Maven jar-with-dependencies,包括我的每个类中的2个

时间:2011-04-11 12:22:20

标签: java maven-2

我正在使用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以及带有?的部分?

4 个答案:

答案 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>