Java 如何创建一个jar,将依赖项作为主要构建工件,稍后由汇编插件使用?
我一直在从事一个JavaMaven项目,该项目最终创建了一个可执行的jar文件。起初我没有问题,但后来我决定也要将依赖项复制到jar中 我发现以下堆栈溢出问题(非常有用),并按照答案中提供的说明(替换我自己的主类和目标版本): 这非常有效,但我最终得到了两个jar文件(ldap-daemon-0.0.1-SNAPSHOT.jar和ldap-daemon-0.0.1-SNAPSHOT-jar-with-dependencies.jar)。我对此没有意见,但据我所知,我无法在以后使用maven dependency插件的复制功能获得带有依赖项的jar副本 因此,我想知道的是如何实现以下目标之一:Java 如何创建一个jar,将依赖项作为主要构建工件,稍后由汇编插件使用?,java,maven,jar,dependencies,Java,Maven,Jar,Dependencies,我一直在从事一个JavaMaven项目,该项目最终创建了一个可执行的jar文件。起初我没有问题,但后来我决定也要将依赖项复制到jar中 我发现以下堆栈溢出问题(非常有用),并按照答案中提供的说明(替换我自己的主类和目标版本): 这非常有效,但我最终得到了两个jar文件(ldap-daemon-0.0.1-SNAPSHOT.jar和ldap-daemon-0.0.1-SNAPSHOT-jar-with-dependencies.jar)。我对此没有意见,但据我所知,我无法在以后使用maven de
- 让我的主要构建工件ldap-daemon-0.0.1-SNAPSHOT.jar包含其依赖项
- 使用maven依赖插件复制第二个构建工件(ldap-daemon-0.0.1-SNAPSHOT-jar-with-dependencies.jar)
org.apache.maven.plugins
maven jar插件
org.apache.maven.plugins
maven汇编插件
2.4
带有依赖项的jar
com.acuitus.ldapd.LDAPDaemonImp
包裹
单一的
org.apache.maven.plugins
maven编译器插件
6.
6.
下面是我的插件配置,它试图将生成的jar复制到下游项目的文件夹中:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.acuitus</groupId>
<artifactId>ldap-daemon</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/classes/www-export</outputDirectory>
<destFileName>ldap-daemon.jar</destFileName>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.directory}/wars</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
</configuration>
</execution>
</executions>
</plugin>
org.apache.maven.plugins
maven依赖插件
2.7
复制
包裹
复制
com.acuitus
ldap守护进程
0.0.1-快照
罐子
真的
${project.build.directory}/classes/www-export
ldap-daemon.jar
${project.build.directory}/wars
假的
真的
非常感谢您的帮助。谢谢你的时间 就像你已经知道的那样,这个程序集插件会生成两个jar文件,一个是普通的jar文件,另一个是带有所有依赖项的jar文件。Maven将分类器构造用于从相同pom构建的人工制品,但内容不同,例如jdk1.6或jdk1.7。或者更常见的例子是maven的源代码jar文件。组装插件也使用此构造。您的副本配置如下所示:
<artifactItem>
<groupId>com.acuitus</groupId>
<artifactId>ldap-daemon</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/classes/www-export</outputDirectory>
<destFileName>ldap-daemon.jar</destFileName>
</artifactItem>
当您需要对生成的jar文件和使用的分类器进行更多控制时。这是一个依赖项,我正在执行mvn安装,但在下游项目中我只能得到ldap-daemon-0.0.1-SNAPSHOT.jar,而不是ldap-daemon-0.0.1-SNAPSHOT-jar-with-dependencies.jar。在上面的第二个插件配置中,我还没有找到任何成功的插件配置。我觉得我不需要使用shade插件,因为我正在创建的jar是正确的,并且在正确的目录中,但我只是不知道如何在下游项目中引用它。我是不是误解了阴影插件的好处?感谢您抽出时间回答。非常感谢!你好对不起,我昨天有点困惑,根本没有得到你的要求。我已经更正了上面的答案,希望这就是你要找的。这工作做得很好:)谢谢!我们最近改变了构建系统,我仍然在加快Maven的速度。我感谢你的帮助!
<artifactItem>
<groupId>com.acuitus</groupId>
<artifactId>ldap-daemon</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/classes/www-export</outputDirectory>
<destFileName>ldap-daemon.jar</destFileName>
</artifactItem>
<artifactItem>
<groupId>com.acuitus</groupId>
<artifactId>ldap-daemon</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
<classifier>jar-with-dependencies</classifier>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/classes/www-export</outputDirectory>
<destFileName>ldap-daemon.jar</destFileName>
</artifactItem>