gpt4 book ai didi

java - 如何告诉 Maven 将所有依赖项重新打包到单个 jar 文件中

转载 作者:太空宇宙 更新时间:2023-11-04 09:51:39 26 4
gpt4 key购买 nike

给定一个包含依赖项列表的 pom.xml 文件,是否有一个 Maven 命令可以将所有这些 jar 捆绑到一个大 jar 中? 我不想在构建中包含我的 .class 文件 - 我只想在构建中包含库 .class/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}/Crunchify/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
  1. 我无法弄清楚它将依赖项复制到哪里 - 即使我硬编码路径而不是 ${project.build.directory}/Crunchify/lib,也不会向该位置写入任何内容,
  2. 我假设它正在复制 jar,但不会将多个 jar 的内容放入一个大 jar 文件中。

我还看到了这个常见的插件:

http://maven.apache.org/plugins/maven-assembly-plugin/usage.html

     <plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>

但是当我使用 pom.xml 中存在的 maven-assemble-plugin 运行 mvn clean package 时,我没有看到任何新的 jar 文件。

最佳答案

通过 jar-with-dependenciessingle~package,您陷入了程序集的“GOTCHAS”之一(在打包之前没有任何内容可以组装(未完成))。

但是结合这两个插件,这将起作用:

/pom.xml

<project>
...
<!-- many many dependencies -->
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<descriptors>
<descriptor>src/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>copy-deps</id>
<phase>process-sources</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

/src/Assembly/Assembly.xml

<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
<id>big-big-jar</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.build.directory}/dependency</directory>
<outputDirectory />
<includes>
<!-- attention: maybe you need more ... zip, tz.gz.bz. -->
<include>*.jar</include>
</includes>
</fileSet>
</fileSets>
</assembly>

cmd

mvn clean package
...
BUILD SUCCESS

...将为您生成:

/target/${build.finalName}-big-big-jar.jar

..文件,包含所有 transient 依赖项,没有您的.jar/类。

关于java - 如何告诉 Maven 将所有依赖项重新打包到单个 jar 文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54659336/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com