1

我有一个来自某个构建的 EAR 文件。我想将此 EAR 文件的内容提取到另一个文件夹中。我很困惑如何做到这一点。我已经查看并尝试了 http://maven.apache.org/plugins/maven-ear-plugin/http://maven.apache.org/plugins/maven-dependency-plugin/usage.html

但要么 maven 无法找到该文件,要么它有依赖问题。

由于我是 Maven 新手,我不明白如何设置这些插件。

使用以下插件时出现以下错误。

在http://repo.maven.apache.org/maven2中找不到 ECM:ECM:ear:1.0被缓存在本地存储库中

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.6</version>
            <executions>
                <execution>
                    <id>unpack</id>
                    <phase>package</phase>
                    <goals>
                        <goal>unpack</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>ECM</groupId>
                                <artifactId>ECM</artifactId>
                                <version>1.0</version>
                                <type>ear</type>
                            </artifactItem>
                        </artifactItems>
                        <outputDirectory>${project.build.directory}/earoutput</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
4

3 回答 3

4

您可以使用dependency:unpack-dependencies. 我只是修改了我的答案,因为根据您的评论,您的耳朵是由其他构建生成的。如果您没有可以部署您的 ear 工件的 Enterprise 存储库,则必须使用“系统”范围,但请注意,通常不鼓励这样做。

将以下依赖项添加到您的 pom.xml

<dependency>
    <groupId>ECM</groupId>
    <artifactId>ECM</artifactId>
    <version>1.0</version>
    <type>ear</type>
    <scope>system</scope>
    <systemPath>/path/to/your/abc.ear</systemPath>
</dependency>

将以下插件添加到您的 postBuild 模块 pom.xml

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.6</version>
    <executions>
        <execution>
            <id>unpack</id>
            <phase>package</phase>
            <goals>
                <goal>unpack-dependencies</goal>
            </goals>
            <configuration>
                <includeArtifactIds>ECM</includeArtifactIds>
                <outputDirectory>${project.build.directory}/earoutput</outputDirectory>
            </configuration>
        </execution>
    </executions>
 </plugin>
于 2013-03-06T00:38:22.877 回答
0

Maven 依赖插件及其解目标可以做到这一点。

示例配置:

<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-dependency-plugin</artifactId>
 <version>2.6</version>
 <executions>
   <execution>
     <id>unpack</id>
     <phase>package</phase>
     <goals>
       <goal>unpack</goal>
     </goals>
     <configuration>
       <artifactItems>
         <artifactItem>
           <groupId>myear</groupId>
           <artifactId>myear</artifactId>
           <version>1.0</version>
           <type>ear</type>
         </artifactItem>
       </artifactItems>
       <outputDirectory>${project.build.directory}/earoutput</outputDirectory>
     </configuration>
   </execution>
 </executions>
</plugin>

这将获取“myear.ear”工件并将其提取到“target/earoutput”目录。这也适用于 JAR、WAR 和任何其他类似 zip 的文件。执行的阶段是“包”——如果您需要在构建的其他部分使用这些资源,这可能为时已晚。如果需要,将阶段更改为更早的内容,例如“生成资源”。

您提到您已经尝试使用依赖插件。EAR 文件是否来自另一个 Maven 项目,是否已安装在本地 Maven 存储库中?如果它仍然不起作用,请发布您尝试使用的插件配置。


(编辑:更新依赖项和本地存储库的信息)

为此,需要将您的 EAR 文件放入本地 Maven 存储库(这只是您磁盘上的一个目录)。但是,如果其他人也需要构建您的项目,您有几个选择:

  • 将 EAR 导入本地存储库,并部署到远程存储库,以便每个人都可以获取它(推荐,但需要您设置公司 Maven 存储库)
  • 将 EAR 提供给每个人,并让他们使用几个 Maven 命令将其放入本地存储库(对于一些开发人员来说可能没问题,比设置整个存储库服务器的开销更少)
  • 将依赖的 EAR 检入项目下的源代码控制中,并将其解包(不是推荐的做事方式)到项目的目标中

导入本地存储库很容易。它与这些说明非常相似。

使用以下命令:

mvn install:install-file -Dfile=<path-to-EAR-file-on-local-filesystem> -DgroupId=myear
-DartifactId=myear -Dversion=1.0 -Dpackaging=ear

(根据需要修改 path、groupId、artifactId 和 version)

组 ID 和工件 ID 只是为了唯一标识工件。

在本地存储库中安装它后,依赖插件应该可以工作并找到工件。

于 2013-03-06T00:01:22.323 回答
0

你看过这个用于解压模块的 Maven EAR 插件示例了吗?

于 2013-03-05T23:53:07.233 回答