>  기사  >  Java  >  springboot 패키징 플러그인을 사용하여 jar 패키지를 제거하고 슬림하게 만드는 방법

springboot 패키징 플러그인을 사용하여 jar 패키지를 제거하고 슬림하게 만드는 방법

王林
王林앞으로
2023-05-16 17:13:061105검색

1. Pom 파일 구성

1.1 참조된 jar 패키지를 지정된 경로에 복사하려면 maven-dependent-plugin 플러그인을 추가하세요.

이후 Tomcat 시작 시 종속성 패키지 경로를 지정하는 것이 편리합니다.

<!--拷贝依赖到jar外面的lib目录-->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>copy</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>                <!--指定的依赖路径-->
                <outputDirectory>
                    ${project.build.directory}/lib
                </outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

디렉토리 구조 이 플러그인을 사용하여 빌드한 후 종속 jar 패키지를 포함하는 추가 lib 디렉터리(즉, 위에서 구성한 outputDirectory에 의해 지정된 경로)가 있습니다.

springboot 패키징 플러그인을 사용하여 jar 패키지를 제거하고 슬림하게 만드는 방법

springboot 패키징 플러그인을 사용하여 jar 패키지를 제거하고 슬림하게 만드는 방법

1.2 springboot 프로젝트는 spring -boot-maven-plugin 패키징 플러그인

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <executable>true</executable>
     <layout>ZIP</layout>
        <mainClass>
            com.iasp.BasicStarter
        </mainClass>
        <!--只包含自己-->
        <includes>
            <include>
                <groupId>${groupId}</groupId>
                <artifactId>${artifactId}</artifactId>
            </include>
         <!--或者-->
           <!--依赖jar不打进项目jar包中-->
             <!--<include>
                  <groupId>nothing</groupId>
                  <artifactId>nothing</artifactId>
             </include>-->
        </includes>
        <!--不包含哪些-->
        <!--<excludeGroupIds>-->
            <!--com.hundsun.jrescloud,-->
            <!--org.springframework.boot,-->
            <!--org.springframework-->
        <!--</excludeGroupIds>-->
    </configuration>

    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

위의 패키징을 구성한 후 해당 jar 패키지가 제외되어 플러그인으로 만든 flat jar 패키지의 크기가 작아져서 업로드가 더 쉬워집니다. 게시용 서버는 다음과 같습니다. BOOT-INF 디렉토리 아래의 lib 디렉토리는 다음과 같습니다.

springboot 패키징 플러그인을 사용하여 jar 패키지를 제거하고 슬림하게 만드는 방법

원래 유형 jar 패키지의 구조는

springboot 패키징 플러그인을 사용하여 jar 패키지를 제거하고 슬림하게 만드는 방법

그런 다음 jar 패키지 경로를 지정합니다. 프로젝트 시작 시 .path="../lib", 슬리밍 효과를 얻기 위해 종속성은 D:develop/shared/에 배치됩니다. fjar 디렉터리에서 실행 명령

java -Dloader.path="D:develop/shared/fjar" -jar mytest.jar

을 실행하세요. 참고: 또 다른 시작 해결책은 -Dloader.path="D:develop/shared/fjar"를 추가하지 않고 경로를 지정하고 다음 명령을 직접 사용하여 시작

java -jar mytest.jar

위 시작을 사용하는 것입니다. 그렇다면 maven-jar-plugin을 추가해야 합니다. 또한 실행 가능한 jar를 읽는 일부 파일을 처리할 때 패키징 작업을 위해 maven-jar-plugin 플러그인을 사용할 수 있습니다.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <!--addClasspath表示需要加入到类构建路径-->
                <addClasspath>true</addClasspath>
                <!--classpathPrefix指定生成的Manifest文件中Class-Path依赖lib前面都加上路径,构建出lib/xx.jar-->
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>com.common.util.CommonUtilsApplication</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

위 플러그인의 효과는 클래스 경로에 해당하는 jar를 패키지의 META_INF 디렉터리 아래 MANIFEST.MF 파일에 추가하여 애플리케이션이 처음 시작될 때 필요한 버전 종속성만 적용되도록 하는 것입니다. Class-Path에 따라 로드됩니다(공유 디렉토리에서 다중 버전 로드 참조 충돌 문제를 해결하기 위해). 이 효과는 -classpath xxx(특정 jar) 매개변수를 추가하는 것과 동일합니다.

이때, 실행할 xxx.jar과 동일한 디렉터리에 필요한 jar 디렉터리를 넣으면 됩니다. lib 디렉터리와 xxx.jar이 실행될 경우에는 -Dloader.path 매개변수를 추가할 수 없습니다. run are not in 동일한 레벨 디렉토리인 경우 다음과 같이 -Dloader.path를 사용하여

springboot 패키징 플러그인을 사용하여 jar 패키지를 제거하고 슬림하게 만드는 방법

을 시작해야 합니다. 동일한 레벨 디렉토리에서 시작

springboot 패키징 플러그인을 사용하여 jar 패키지를 제거하고 슬림하게 만드는 방법

동일한 레벨 디렉토리에서 시작하지 않음:

springboot 패키징 플러그인을 사용하여 jar 패키지를 제거하고 슬림하게 만드는 방법

여기서 -Dloader.path는 여러 디렉터리를 지정할 수 있으므로 여러 마이크로서비스가 있는 경우 공개적으로 사용되는 일부 jar는 공유 디렉터리에 배치할 수 있고 각 마이크로서비스에 고유한 jar는 마이크로서비스의 개인 디렉터리에 배치할 수 있습니다. (jar 버전 충돌 문제 해결) 예는 다음과 같습니다.

springboot 패키징 플러그인을 사용하여 jar 패키지를 제거하고 슬림하게 만드는 방법

참고:

1 -Dloader.path를 사용할 때 패키징할 때 ZIP을 추가해야 합니다. 지정하지 않으면 -Dloader.path가 적용되지 않습니다

여러 마이크로서비스의 슬리밍 패키징의 경우 spring-boot-maven-plugin 패키징으로 인해 발생하는 일부 애플리케이션 시작 문제를 방지하기 위해 maven-jar-plugin 패키징을 사용하는 것이 좋습니다. 메커니즘(트랩됨)

2. 서로 다른 버전의 종속성이 있는 경우:

예를 들어 프로젝트 A는 Y 라이브러리 버전 1.0에 종속되고 프로젝트 B는 Y 라이브러리 버전 2.0에 종속됩니다. 그러면 버전 종속성 충돌이 발생할 수 있습니다. (두 버전이 호환되지 않는 경우) 해결 방법:

2.1 버전이 일치하는 한 동일한 버전을 계속 사용하여 버전의 일관성을 유지하세요. 처리를 위해 Maven의 버전 종속성 관리를 사용할 수 있습니다. 즉, 상위 pom 파일에서 를 사용하여 종속성 버전을 균일하게 관리할 수 있습니다.

2.2 프로젝트가 필요한 버전에 종속되도록 하고 이를 war 패키지에 추가합니다. 동일한 버전의 다른 jar 패키지를 동일한 공유 패키지에 넣습니다.

테스트를 통해 검색 시 종속성이 위에서 아래로 검색되는 것을 확인했습니다. 일치하는 경우 아래와 같이 첫 번째 항목인 comm-0.0을 사용합니다. 1.jar 버전이 사용됩니다

springboot 패키징 플러그인을 사용하여 jar 패키지를 제거하고 슬림하게 만드는 방법

참고:

spring-boot-maven-plugin 플러그인을 사용하면 모든 종속 jar 패키지가 패키징되므로 생성된 JAR 패키지를 직접 실행할 수 있습니다. 개발 운영을 단순화합니다.

使用spring-boot-maven-plugin插件如果不指定程序主运行入口类的话默认为Main-Class: org.springframework.boot.loader.JarLauncher

springboot 패키징 플러그인을 사용하여 jar 패키지를 제거하고 슬림하게 만드는 방법

这个可以自定义执行主入口类,有以下几种方式:

1.POM继承spring-boot-starter-parent

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
<properties>
        <!-- The main class to start by executing java -jar -->
        <start-class>ccom.notes.JavaNotesApplication</start-class>
</properties>

2.POM不是继承spring-boot-starter-parent时需指定

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <version>2.1.9.RELEASE</version>
  <configuration>
    <mainClass>com.notes.JavaNotesApplication</mainClass>
    <layout>ZIP</layout>
  </configuration>
  <executions>
    <execution>
      <goals>
        <goal>repackage</goal>
      </goals>
    </execution>
  </executions>
</plugin>

3.POM不是继承spring-boot-starter-paren,且使用maven-jar-plugin插件来指定执行的类

<plugin>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-jar-plugin</artifactId>
   <configuration>
      <archive>
         <manifest>
            <addClasspath>true</addClasspath>
            <useUniqueVersions>false</useUniqueVersions>
            <classpathPrefix>lib/</classpathPrefix>
            <mainClass>com.notes.JavaNotesApplication</mainClass>
         </manifest>
         <manifestEntries>
            <version>${project.version}</version>
         </manifestEntries>
      </archive>
   </configuration>
</plugin>

위 내용은 springboot 패키징 플러그인을 사용하여 jar 패키지를 제거하고 슬림하게 만드는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제