【问题标题】:Spring Boot : How to make small jar package and share dependencies from external folderSpring Boot:如何制作小 jar 包并从外部文件夹共享依赖项
【发布时间】:2021-07-17 07:25:50
【问题描述】:

我必须在客户端位置的同一 Linux 服务器上部署多个 Spring Boot 应用程序。每个应用程序都包含相同的依赖项,每个应用程序文件大小为 50mb,因此我们如何创建一个公共库文件夹,以便所有 Spring Boot 应用程序从一个位置共享相同的依赖项。这可能会使我的应用程序 jar 或 war 文件变小。请帮我解决这个问题。

任何建议或博客链接都会有所帮助。

提前致谢。

【问题讨论】:

    标签: spring spring-boot maven package


    【解决方案1】:

    您好,您提出的这个问题

    那么我们如何创建一个通用库文件夹,以便所有 Spring Boot 应用程序从一个位置共享相同的依赖项

    在 pom.xml 中添加 ma​​ven-dependency-plugin,目标为 copy-dependencies,在此您可以设置公共库文件夹的输出目录

    例子

    <plugin>
        <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <phase>install</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                       <outputDirectory>${project.build.directory}/lib</outputDirectory>
                    </configuration>
           </execution>
        </executions>
    </plugin>
    

    现在您可以使用以下内容创建两个 jar,一个包含所有依赖项(命名为 appname-exec.jar),另一个仅包含类文件(appname.jar)

    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
            <classifier>exec</classifier>
        </configuration>
    </plugin>
    

    现在您可以将 jar 仅用于类文件 (appname.jar),因为 大小会小得多,因为它不包含依赖项

    为了使用 jar (appname.jar),需要配置最后一步,即添加作为公共位置 jar 的类路径条目,并在标签内添加主类名。

    <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>fully.qualified.MainClass</mainClass>
           </manifest>
        </archive>
       </configuration>
    </plugin>
    

    现在您可以根据项目结构将这三个放在构建部分下的 pom.xml 中。

    【讨论】:

      【解决方案2】:

      您可以使用spring-boot-thin-launcher 构建可执行和精简的 Spring Boot jar。它适用于mavengradle

      Maven:

      <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
          <version>${spring-boot.version}</version>
          <dependencies>
              <dependency>
                  <groupId>org.springframework.boot.experimental</groupId>
                  <artifactId>spring-boot-thin-layout</artifactId>
                  <version>1.0.28.BUILD-SNAPSHOT</version>
              </dependency>
          </dependencies>
      </plugin>
      

      Gradle:

      plugins {
          //other plugins goes here ...
          id 'org.springframework.boot.experimental.thin-launcher' version '1.0.28.BUILD-SNAPSHOT'
      }
      

      你可以通过命令运行 Spring Boot Thin JAR

      java -jar my-app-1.0.jar --thin.root=path/to/dependency/jars
      

      你可以看看:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-16
        • 2020-10-27
        • 2019-09-11
        相关资源
        最近更新 更多