[英]How to create a non-executable JAR file that includes all Maven dependencies
I have a Java project that doesn't have a main file but it has a lot of Maven dependencies.我有一个 Java 项目,它没有主文件,但它有很多 Maven 依赖项。
How I can create a JAR-file that contains my source-code and required maven dependencies?如何创建包含我的源代码和所需的 maven 依赖项的 JAR 文件?
My pom.xml:我的 pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>NetworkCommunicationAPI</groupId>
<artifactId>NetworkCommunicationAPI</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20210307</version>
</dependency>
</dependencies>
</project>
You can use the Maven shade plugin or Maven assembly plugin to create such a JAR.您可以使用 Maven 阴影插件或 Maven 组装插件来创建这样的 JAR。
In most cases, such JARs should be avoided.在大多数情况下,应避免使用此类 JARs。 You create a dependency hell for everyone who uses your JAR because Maven cannot manage the included dependencies any more and therefore conflicts with other dependencies (not from your JAR) may become unmanagable.
您为使用 JAR 的每个人创建了一个依赖地狱,因为 Maven 无法再管理包含的依赖项,因此与其他依赖项(不是来自您的 JAR)的冲突可能变得难以管理。
On the other, such fat JARs are of little use because Maven or Gradle will find your transitive dependencies anyway, so there is no need to include them into the JAR. On the other, such fat JARs are of little use because Maven or Gradle will find your transitive dependencies anyway, so there is no need to include them into the JAR.
You can use the maven-assembly-plugin just as you could use it for creating an executable JAR with dependencies .您可以使用 maven-assembly-plugin 就像您可以使用它来创建带有 dependencies 的可执行 JAR 一样。
The only thing you need to change is that you don't need to specify a main class:您唯一需要更改的是您不需要指定主要的 class:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
After that, you can create the JAR using mvn compile assembly:single
.之后,您可以使用
mvn compile assembly:single
创建 JAR。
This compiles your sources and creates a JAR containing the compiled sources and all dependencies in the compile-scope.这将编译您的源代码并创建一个 JAR,其中包含已编译的源代码和编译范围内的所有依赖项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.