Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建一个jar,将依赖项作为主要构建工件,稍后由汇编插件使用?_Java_Maven_Jar_Dependencies - Fatal编程技术网

Java 如何创建一个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

我一直在从事一个JavaMaven项目,该项目最终创建了一个可执行的jar文件。起初我没有问题,但后来我决定也要将依赖项复制到jar中

我发现以下堆栈溢出问题(非常有用),并按照答案中提供的说明(替换我自己的主类和目标版本):

这非常有效,但我最终得到了两个jar文件(ldap-daemon-0.0.1-SNAPSHOT.jar和ldap-daemon-0.0.1-SNAPSHOT-jar-with-dependencies.jar)。我对此没有意见,但据我所知,我无法在以后使用maven dependency插件的复制功能获得带有依赖项的jar副本

因此,我想知道的是如何实现以下目标之一:

  • 让我的主要构建工件ldap-daemon-0.0.1-SNAPSHOT.jar包含其依赖项
  • 使用maven依赖插件复制第二个构建工件(ldap-daemon-0.0.1-SNAPSHOT-jar-with-dependencies.jar)
下面是我的ldap守护进程插件配置(打包配置为“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>