【问题标题】:Create Executable Jar that includes all the dependencies as packaged jars创建包含所有依赖项的可执行 Jar 作为打包的 jar
【发布时间】:2020-01-22 22:35:54
【问题描述】:

我正在尝试了解如何将可执行 jar 文件中的所有依赖项作为打包的 jar(即在 jar 中包含 jar)包含在内,但我失败了。

有人能指点我正确的方向吗?

请注意,我不希望生成的胖 jar 在其中打包 jar,而不是使用 maven-assembly-plugin 获得的未打包的等价物

【问题讨论】:

  • 我觉得你可以拿this direction (maven shade plugin)...
  • 基本上你需要创建一个“胖罐子”。谷歌了解操作步骤。
  • 这能回答你的问题吗? How to create a fat jar?
  • IntelliJ 可以轻松做到这一点,Eclipse 相当简单,NetBeans 也可能如此。这只是为你准备的吗,因为那样你就应该在你的 IDE 中找出如何去做。
  • 我想在 Maven 下做这样我不依赖 UI

标签: java maven executable-jar maven-assembly-plugin


【解决方案1】:

您要创建的东西称为胖罐。您可以通过执行后续步骤来生成它。

在您的 POM 文件中添加 Build 部分,如下所示:

<build>
    <finalName>example</finalName>
    <plugins>

        <!-- Set a compiler level -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>${jdk.version}</source>
                <target>${jdk.version}</target>
            </configuration>
        </plugin>

        <!-- Maven Assembly Plugin -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.4.1</version>
            <configuration>
                <!-- get all project dependencies -->
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <!-- MainClass in mainfest make a executable jar -->
                <archive>
                  <manifest>
                    <mainClass>com.example.Main</mainClass>
                  </manifest>
                </archive>

            </configuration>
            <executions>
              <execution>
                <id>make-assembly</id>
                <!-- bind to the packaging phase -->
                <phase>package</phase> 
                <goals>
                    <goal>single</goal>
                </goals>
              </execution>
            </executions>
        </plugin>

    </plugins>
</build>

上面的“Maven Assembly Plugin”是绑定到Maven的打包阶段,生成最终的Jar,打包使用:

mvn package

将在目标文件夹中创建两个 jar 文件。

  • example.jar – 仅限您的项目类

  • example-jar-with-dependencies.jar – 单个 jar 中的项目和依赖类。

您现在可以使用以下命令检查胖罐中的内容:

jar tf target/example-jar-with-dependencies.jar 

【讨论】:

  • jar-with-dependencies 有缺点,尤其是签名的 jars。
【解决方案2】:

在 pom.xml 中包含依赖项。使用mvn clean install 构建项目,结果将具有这些依赖项。 然后,您可以使用

运行 jar
java -cp <jar Filename> <main class name>

【讨论】:

  • 您的解决方案是显而易见的,但要使用它,我需要将 eh 代码所依赖的所有库放在单独的目录中。
猜你喜欢
  • 2014-01-08
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-08
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多