【问题标题】:maven-dependency-plugin generates duplicate files in jar-with-dependencies.jar filemaven-dependency-plugin 在 jar-with-dependencies.jar 文件中生成重复文件
【发布时间】:2012-01-26 11:31:59
【问题描述】:

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

<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、property 文件、xml 文件都存在两次。
  2. 所有 java 类 .class 文件都存在两次。
  3. 有很多与依赖相关的overview.html和license.txt文件。

我不确定这是否正确,我还需要有人为我澄清这个生成的 jar 文件的重要性,因为我不熟悉这个插件。

请指教,谢谢。

【问题讨论】:

  • “存在两次”是什么意思?两个文件不能有相同的路径——你看到的完整路径是什么?该插件创建了一个包含所有项目依赖项的 jar 文件,因此它可以独立运行——不知道你为什么还要使用它;你为什么开始使用它?
  • 当我用 win rar 查看这个 jar 时,我可以在我的应用程序中看到每个 .sql,.xml 文件的两个副本。
  • 我使用它是因为我想制作一个包含所有依赖项的独立应用程序,这是一个不好的做法吗?还是我应该使用另一个插件?
  • 这就是插件的用途。关于双文件——我问的是完整路径是什么,因为两个文件不能同名。
  • @DaveNewton -- MahmoudS 完全正确。 JAR 格式可以保存重复文件(完全相同的路径和名称),这是 maven-assembly-plugin 的一个已知问题。见:stackoverflow.com/questions/10308916/…

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


【解决方案1】:

既然您提到了jar-with-dependencies,我假设您正在使用maven assembly plugin 将您的项目工件与依赖的jar 一起组装到一个jar 中。

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

在上面的特定情况下,maven 依赖插件似乎没有做任何有用的事情。 maven 程序集插件会根据配置自动将其所有依赖项打包到一个发行版中。

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

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

【讨论】:

  • 对不起,我忘了提到我正在使用 maven-assembly-plugin 和 maven-dependecy-plugin,我更新了代码,我是否必须使用程序集插件和依赖项插件在项目 jar 中获取我的依赖项?
  • @Msaleh。更新了解决问题的答案。
  • 我能看到的是 maven 依赖插件收集所有 jar 并将它们放在应用程序 jar 内的 lib 文件夹中,所以它在这里做了一些有用的事情。你能指导我更好的配置来收集应用程序生成的 jar 中的所有 pom jar 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-19
  • 1970-01-01
相关资源
最近更新 更多