26

我将基于 Maven 的 Spring 应用程序打包为:

mvn install-DskipTests -Peverything. 

奇怪的事情出现了。在生成的 jar 的 META-INF 中,我发现重复的 pom.xml 和 pom.properties 文件。有人可以解释一下吗?谢谢。

在此处输入图像描述

这是提取的 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

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

4

6 回答 6

18

添加

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

到你的 pom.xml

于 2012-11-14T07:19:03.840 回答
15

看起来这是一个由 Eclipse 中的冲突引起的常见问题,尤其是在m2e-wtp集成中。

有些人表示可以通过在要运行的目标列表中包含clean来修复它,例如mvn clean package.

还要尝试更新您的m2e安装并确保您没有安装多个版本的m2em2eclipse(Indigo 之前的版本)。

对面临此问题的其他人的一些参考:

于 2012-04-25T07:40:36.413 回答
7

我知道这个问题有点老了,但我想我会分享一些关于这个主题的晦涩信息。我遇到了同样的问题,我发现当我在 Eclipse 打开的情况下运行 maven 并且我的工作区首选项设置为使用本机挂钩或轮询刷新工作区时,eclipse 添加了额外的 pom.xml 和 pom.properties 文件!关闭 eclipse 或删除刷新工作区选项为我解决了这个问题。这是一个很难追踪的问题,所以希望其他人能从中受益。

于 2012-08-23T18:19:15.870 回答
0

跟进@Dan 的解决方法:

我尝试了您的解决方案,它似乎有效 - 乍一看。然而,它只是延迟了最终的失败。

它似乎比任何时候刷新工作空间时都会在 /classes 目录中创建 pom.xml 和 pom.properties 文件。之后,任何以后的“打包”目标都将在 .jar 中包含重复文件,从而破坏任何以后的签名。

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

于 2013-01-02T15:25:46.013 回答
0

您需要执行“mvn clean”,然后执行“mvn package”,或者只执行“mvn clean package”。如果“mvn clean”由于任何原因失败,如果你在此之后执行“mvn package”,你会再次看到这个问题。

于 2020-02-07T17:08:13.010 回答
-5

不知道你的意思是什么,duplicate但由 maven 创建的 jar 确实随文件夹pom.xml一起pom.properties提供META-INF。请参阅Maven 入门指南的这一部分。

于 2012-04-25T04:27:30.643 回答