当前位置: 首页 > 知识库问答 >
问题:

如何为spring应用程序创建具有所有依赖项的fat jar

赏梓
2023-03-14

我需要创建所有依赖项的jar。我有一个spring项目,它与数据库一起工作,我需要在另一台计算机上启动Spring Boot应用程序,那里只有Java。我想只有一个jar文件,并用java-jar jarname.jar启动它,如何创建这个jar?

UPD:我现在的pom:

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath /> <!-- lookup parent from importer.app.pack.repository -->
    </parent>

    <properties>
        <!-- The main class to start by executing java -jar -->
        <start-class>app.App</start-class>
    </properties>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>2.2</version>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                            <configuration>
                                <transformers>
                                    <transformer
                                            implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
                                    <transformer

                                            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                        <mainClass>app.App</mainClass>
                                    </transformer
>
                                </transformers>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

    <dependencies>

        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>javax.persistence-api</artifactId>
            <version>2.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.8</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.0.1.RELEASE</version>
        </dependency>
    </dependencies>

共有1个答案

寿子轩
2023-03-14

如果它是一个Spring Boot项目(我假设它是,因为异常声明:类org/SpringFramework/boot/SpringApplication丢失了;这个类显然属于spring-boot项目),那么您就不需要使用maven shade插件。

而是使用spring-boot-maven-plugin。有关可能的选项和配置的示例,请参阅此处

<build>
  ...
  <plugins>
    ...
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <version>2.2.2.RELEASE</version> // or your version
      <executions>
        <execution>
          <goals>
            <goal>repackage</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    ...
  </plugins>
  ...
</build>

这个插件背后的想法是spring boot其实并不是一个大罐子,而是一个更复杂的东西。它的内部结构看起来并不像jar(例如,所有的依赖项都是boot-int/lib中的jar包,因此您有jar insider jar)

或者,如果它是一个没有spring boot的spring项目,那么显然在类路径中根本不需要spring boot JAR。在本例中,您也不需要spring-boot-maven-plugin

 类似资料:
  • 本文向大家介绍Apache Maven 创建具有项目所有依赖项的.jar文件,包括了Apache Maven 创建具有项目所有依赖项的.jar文件的使用技巧和注意事项,需要的朋友参考一下 示例 要创建包含所有依赖项的JAR,可以使用内置描述符格式jar-with-dependencies。以下示例package使用此内置描述符并声明的主类来配置绑定到该阶段的Assembly Plugin的执行co

  • 问题内容: 我有一个独立的Java应用程序,我想将其打包为:myapp.jar。并将所有相关的jar文件复制到“备用文件夹”。理想情况下,我想让Maven更新META- INF文件,以将所有类路径依赖项jar条目添加到其中。 例如,如果我的项目引用了commons.jar,并且当我使用此插件构建程序集时,它将所有.class文件和程序包从commons.jar复制到myappjar- with-d

  • 问题内容: 我有一个使用Maven 2构建的桌面Java应用程序(但是如果有帮助的话,我可以升级到Maven 3),并且具有许多开源依赖项。我现在正尝试将其打包为独立版本,以使最终用户可以使用它,而无需安装maven或其他任何工具。 我已经成功地使用maven-assembly- plugin构建了一个包含所有依赖项的jar,但这并不是我真正想要的,因为使用LGPL库时,您是要重新分发要用作单独j

  • Q1我如何在LibA中包含依赖项,这样当一些其他项目包含这个库时,它就不应该担心我的库的内部依赖项。 Q3当某人包含一个来自jcenter的库时,是否会带来所有的依赖关系? 任何帮助都将非常感谢。:)

  • 问题内容: 我想将我的项目打包在一个可执行的JAR中进行分发。 如何使Maven项目将所有依赖JAR打包到我的输出JAR中? 问题答案: 然后用 编译目标应在Assembly:single:single之前添加,否则不包括您自己项目中的代码。 通常,此目标与自动执行的构建阶段相关。这样可以确保在执行mvn install或执行部署/发布时构建JAR 。

  • 我正在写一个Spring引导应用程序,它需要从ibm笔记数据库中获取记录。为此,我必须使用一个jar库,它不能作为maven依赖项使用。因此,我将jar作为lib/com/ibm/note/1.0.0/notes-1.0.0.jar放在项目主页中,并将其作为本地存储库添加到pom文件中,如下所示。 我的应用程序在eclipse IDE中运行时没有任何问题。但是当我通过右键单击eclipse的pom