2012-04-25 102 views
21

我打包我的基于Maven的春季应用与产生重复的pom.xml和pom.properties文件。在生成的jar的META-INF中,我找到了重复的pom.xml和pom.properties文件。有人可以解释吗?谢谢。的Maven在一个罐子里

enter image description here

在这里被提取的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.abc.xyz</groupId> 
<artifactId>migrate-app</artifactId> 
<packaging>jar</packaging> 
<version>1.0-SNAPSHOT</version> 
<name>migrate-app</name> 
<url>http://maven.apache.org</url> 
<dependencies> 

.. 

</dependencies> 

<profiles> 
    <profile> 
    <id>everything</id> 
    <build> 
     <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <configuration> 
      <source>1.5</source> 
      <target>1.5</target>   
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.5</version> 
     <configuration> 
      <skipTests>true</skipTests> 
     </configuration> 
     </plugin>    
     </plugins> 
    </build> 
    </profile> 
    </profiles> 

输出用于命令:

mvn -version 

阿帕奇的Maven 3.0.4(r1232337; 2012-01-17 15: 44:56 + 0700) Maven home:C:\ apache-maven-3.0.4 \ bin .. Java版本:1.6.0_30,供应商:S un Microsystems Inc. Java主页:C:\ Program Files(x86)\ Java \ jdk1.6.0_30 \ jre 默认语言环境:en_US,平台编码:Cp1252 操作系统名称:“windows 7”,版本:“6.1”,弓:“86”,家人:“窗口”

+0

您可以在这里写下“mvn -version”的输出吗? – 2012-04-25 04:31:03

+0

我已经添加了输出。 – bnguyen82 2012-04-25 04:49:40

+0

谢谢。我也会搜索它。我在这里运行mvn版本3,并且具有相同的行为。 jar内的双文件。 – 2012-04-25 05:23:32

回答

-5

不知道你的duplicate的意思,但由行家创建的JAR中META-INF文件夹来与pom.xmlpom.properties不会。请参阅maven入门指南的this section

+0

我的意思是有两个pom.xml文件和两个pom.properties文件。 – bnguyen82 2012-04-25 04:51:26

+0

Jar压缩文件基于ZIP格式(实际上,您可以使用ZIP实用程序来操作jar压缩文件),它允许在压缩文件中重复输入。提取过程中简单地覆盖具有相同名称的条目。当您检查用Eclipse/m2e组合构建的jar文件时,您会看到所提及文件的字面重复条目。真正烦人的是,这打破了jar cmdline工具(你不能更新任何文件) – 2013-10-11 15:26:52

13

看来这是一个由Eclipse中的冲突引起的某种常见问题,特别是与集成的冲突。

有些人表示可以通过在要运行的目标列表中包括clean来解决该问题。 mvn clean package

也可以尝试更新您的M2E安装,并确保你没有安装M2Em2eclipse的(预靛蓝版本)多个版本。

+0

我打开http://jira.codehaus.org/browse/MSHARED-324来跟踪maven-archiver插件上的问题。任何有兴趣在Maven中看到修复的人都应该投票支持它。 – 2014-03-10 10:55:09

+0

我刚刚解决了这个问题,因为它是由Maven JAR Plugin 2.6隐式修复的。 – 2015-12-31 21:40:19

6

我知道这个问题是有点老了,但我认为:

来面临这个问题其他人一些参考我会分享一些关于这个问题的隐晦信息。我遇到了同样的问题,我发现当我用Eclipse打开maven时,我的工作空间首选项被设置为使用本地钩子或轮询来刷新工作空间,额外的pom.xml和pom.properties文件通过eclipse添加!关闭日食或删除刷新工作区选项解决了我的问题。这是一个难以追查的问题,所以希望别人能够从中受益。

14

添加

<build> 
    <plugins> 
    <plugin> 
     <artifactId>maven-jar-plugin</artifactId> 
     <configuration> 
     <archive> 
      <addMavenDescriptor>false</addMavenDescriptor> 
     </archive> 
     </configuration> 
    </plugin> 
    </plugins> 
</build> 

到你的pom.xml

+0

这对我有用。但是,你能解释为什么吗? – spoulson 2013-01-30 14:31:21

+0

Maven build将maven文件添加到META-INF文件夹中。如果你正在开发一个applet或类似的项目,这是一个问题。当false时,addMavenDescriptor属性从jar中排除maven文件。 – besc 2013-01-31 15:00:30

+0

刚刚遇到包含小程序的项目的这个错误。这显然与m2e有关。我终于删除了似乎是该bug的唯一解决方案的maven描述符...... - 谢谢 – Rob 2014-07-03 09:39:26

0

各地跟进到@丹的工作:

我想你的解决方案,它出现工作 - 乍一看。但是,这只是推迟了最终的失败。

在任何时候刷新工作空间时,都会出现在/ classes目录中创建pom.xml和pom.properties文件。之后,任何后来的“包”目标将包括.jar中的重复文件,并因此破坏以后的任何签名。

如果轮询开启 - 您“失败 - 快速”。如果它关闭,你可以在任意时间在未来的版本中失败。