使用maven解压缩EAR文件

时间:2013-03-05 23:50:40

标签: maven ear

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

但是maven无法找到该文件或者它存在依赖性问题。

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

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

无法找到ECM:ECM:ear:http://repo.maven.apache.org/maven2中的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>

3 个答案:

答案 0 :(得分:4)

您可以使用dependency:unpack-dependencies执行此操作。我只是修改我的答案,因为根据你的评论,你的耳朵是由其他一些构建产生的。如果您没有可以部署耳神器的企业存储库,则必须使用&#34; system&#34;范围,但请注意,通常气馁

将以下依赖项添加到您的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>

答案 1 :(得分:0)

答案 2 :(得分:0)

Maven Dependency Plugin及其unpack目标可以做到这一点。

示例配置:

<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的文件。这下执行的阶段是'package' - 如果你需要在构建的其他部分使用这些资源,这可能为时已晚。如果需要,可以将阶段更改为“generate-resources”。

您提到您已尝试使用依赖项插件。来自另一个Maven项目的EAR文件是否已安装在本地Maven存储库中?如果在您尝试使用的插件配置后仍然无效。


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

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

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

轻松导入本地存储库。它与these instructions非常相似。

使用以下命令:

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只是为了唯一地识别工件。

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