繁体   English   中英

如何创建包含所有 Maven 依赖项的不可执行 JAR 文件

[英]How to create a non-executable JAR file that includes all Maven dependencies

我有一个 Java 项目,它没有主文件,但它有很多 Maven 依赖项。

如何创建包含我的源代码和所需的 maven 依赖项的 JAR 文件?

我的 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>

您可以使用 Maven 阴影插件或 Maven 组装插件来创建这样的 JAR。

在大多数情况下,应避免使用此类 JARs。 您为使用 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.

您可以使用 maven-assembly-plugin 就像您可以使用它来创建带有 dependencies 的可执行 JAR 一样

您唯一需要更改的是您不需要指定主要的 class:

<build>
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
      </configuration>
    </plugin>
  </plugins>
</build>

之后,您可以使用mvn compile assembly:single创建 JAR。

这将编译您的源代码并创建一个 JAR,其中包含已编译的源代码和编译范围内的所有依赖项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM