我正在使用maven创建一个自包含的可执行jar文件,其中包含我编写的实用程序,用于在给定的日期/时间戳和日期之间切换日志文件。将此部分日志复制到较小的文件中。当我做的时候
mvn install
maven创建2个jar文件,LogCopy-0.0.1-SNAPSHOT.jar& LOGCOPY-0.0.1-SNAPSHOT-JAR-与-dependencies.jar。奇怪的是,它创造了两个档案,但更奇怪的是,在我看来,在更大的.jar中,我写的每个班级中都有两个。
我的POM.xml使用maven-assembly插件:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>create-my-bundle</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.mycompany.myproject.subproject.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
我在这里做错了吗?我不知所措 - 谷歌似乎并没有太大的影响力。我在O'Reilly的“Maven:The Definitive Guide”中找不到任何关于它的东西。为什么它将每个类中的2个放入.jar中,为什么它会在没有依赖项的情况下执行.jar以及带有?的部分?
答案 0 :(得分:1)
生成两个jar文件,因为LogCopy-0.0.1-SNAPSHOT.jar是由“普通”maven构建创建的。你刚刚添加了插件,另外(作为一个副作用)创建了LogCopy-0.0.1-SNAPSHOT-jar-with-dependencies.jar archieve。 maven-assembly-plugin不会禁用“正常”构建,它只是在打包阶段执行额外的任务。
答案 1 :(得分:1)
听起来像这个错误:http://jira.codehaus.org/browse/MASSEMBLY-399
我不确定您使用的是哪个版本的Maven,但其中一个注释表明您可以使用以下XML ...
<archiverConfig><duplicateBehavior>skip</duplicateBehavior></archiverConfig>
如果您浏览该JIRA,您可以看到与该问题相关的一些错误。
答案 2 :(得分:1)
刚下载了maven程序集插件的2.2-beta-5。在该版本中修复了jar文件中.class重复项的问题。虽然我仍然想知道如何将相同的文件名打包到jar中的相同位置。
答案 3 :(得分:-1)
在2.2版中看起来都很好,所以暂时你可以添加:
<version>2.2</version>