maven-dependency-plugin在jar-with-dependencies.jar文件中生成重复文件

时间:2011-12-22 22:27:02

标签: java maven-2 jar packaging maven-dependency-plugin

我正在用maven创建一个独立的java应用程序,我在jar文件中包含 maven-dependecy-plugin 的依赖项,如下所示:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/classes/lib</outputDirectory>
                        <overWriteReleases>false</overWriteReleases>
                        <overWriteSnapshots>false</overWriteSnapshots>
                        <overWriteIfNewer>true</overWriteIfNewer>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>theMainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

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

                     </configuration>
                    </execution>
               </executions>
        </plugin> 

这包括lib文件夹中生成的jar文件中的依赖项,jar运行并且工作正常,但问题出在另一个生成的jar文件appname-1.0-jar-with-dependencies.jar中。

问题:我不确定这是否是一个问题,但我注意到在生成的appname-1.0-jar-with-dependencies.jar中的目标文件夹中,它包含重复的应用程序文件,如:

  1. 所有sql,属性文件,xml文件都存在两次。
  2. 所有java类.class文件都存在两次。
  3. 有很多与依赖项相关的overview.html和license.txt文件。
  4. 我不确定这是否正确,我还需要有人为我澄清这个生成的jar文件的重要性,因为我不熟悉这个插件。

    请告知,谢谢。

1 个答案:

答案 0 :(得分:3)

由于您已经提到过jar-with-dependencies,我假设您正在使用maven assembly plugin将项目工件与相关的jar组装到一个jar中。

我怀疑你的项目工件是两次进入jar-with-dependencies - 由于dependencySet的属性useProjectArtifact默认为true。您可以在程序集描述符中将此属性设置为true,并查看它是否解决了您的问题。

在上面的具体情况中,maven依赖插件似乎没有做任何有用的事情。 maven assembly插件会根据配置自动将其所有依赖项打包到单个发行版中。

但是如果你创建一个可执行jar-with-dependencies,请注意classpath issues。您可能想要创建ziptar.gz

上面使用的配置是默认配置,不允许自定义。您可能希望使用程序集描述符文件,您可以在其中设置前面提到的属性或其他选项。