ホームページ  >  記事  >  Java  >  springboot パッケージング プラグインを使用して jar パッケージを削除し、スリム化する方法

springboot パッケージング プラグインを使用して jar パッケージを削除し、スリム化する方法

王林
王林転載
2023-05-16 17:13:061155ブラウズ

1. Pom ファイルの設定

1.1 maven-dependency-plugin プラグインを追加して、参照された jar パッケージを指定されたパスにコピーします

後続の 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>

このプラグインを使用してビルドした後、ディレクトリ構造には追加の lib ディレクトリ (つまり、上で構成した出力ディレクトリで指定されたパス) が追加され、これには依存する jar パッケージが含まれます。

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パッケージが除外され、プラグインで作成したフラットパッケージとなる jarパッケージのサイズが小さくなり、公開用サーバーへのアップロードが容易になる 効果は以下の通り libディレクトリBOOT-INF ディレクトリの下にあるものが消えています:

springboot パッケージング プラグインを使用して jar パッケージを削除し、スリム化する方法

元の jar パッケージの構造は

springboot パッケージング プラグインを使用して jar パッケージを削除し、スリム化する方法

です。次に、プロジェクトの開始時に、jar パッケージ パス -Dloader.path="../lib" を指定すると、スリム化効果が達成され、依存関係が D に配置されます。develop/shared/fjar ディレクトリで、run コマンドを実行します

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

注: 別の起動ソリューションは、-Dloader.path="D:develop/shared/fjar" を追加せずにパスを指定し、次のように直接使用することです。上記の起動を使用するには、maven-jar-plugin プラグインを追加し、 属性を設定する必要があります。さらに、実行可能 jar を読み取るいくつかのファイルを処理するときに、maven-jar-plugin プラグインを使用できます。パッケージ化操作用に spring-boot-maven-plugin を置き換えます

java -jar mytest.jar

上記のプラグインの効果は、クラスパスに対応する jar をパッケージの META_INF ディレクトリの下の MANIFEST.MF ファイルに追加することです。使用したばかりの jar を後で使用できるようにする 起動時に、必要なバージョンの依存関係のみがクラスパスに従ってロードされます (共有ディレクトリでの複数バージョンのロード参照の競合の問題を解決するため)。この効果は同等です。パラメータ -classpath xxx (特定の jar) を追加します。

この時点では、必要な jar ディレクトリ lib を実行する xxx.jar と同じディレクトリに置くだけです。起動時に -Dloader.path パラメータを追加することはできません。lib ディレクトリが同じ場合は、実行する xxx.jar として、 xxx.jar が同じレベルのディレクトリにない場合は、次のように -Dloader.path を使用して

を開始する必要があります。同レベルのディレクトリから開始してくださいspringboot パッケージング プラグインを使用して jar パッケージを削除し、スリム化する方法

同じレベルのディレクトリから開始しないでください: springboot パッケージング プラグインを使用して jar パッケージを削除し、スリム化する方法

# その中に、 - Dloader.path は複数のディレクトリを指定できるため、複数のマイクロサービスがある場合、いくつかの共通の使用される jar は共有ディレクトリに配置されます。各マイクロサービスに固有の jar はマイクロサービスのプライベート ディレクトリに配置できます (問題を解決するため)。 jar バージョンの競合) 例は次のとおりです: springboot パッケージング プラグインを使用して jar パッケージを削除し、スリム化する方法

springboot パッケージング プラグインを使用して jar パッケージを削除し、スリム化する方法注:

1. -Dloader.path を使用する場合、パッケージ化するときに ZIP を追加する必要があります。指定しない場合、-Dloader.path は有効になりません。

複数のマイクロサービスのパッケージ化をスリム化するには、maven-jar- を使用することをお勧めします。 spring-boot-maven-plugin パッケージ化メカニズム (トラップ) によって引き起こされるアプリケーション起動の問題を回避するためのプラグイン パッケージ化 (トラップ)

2. 異なるバージョンの依存関係がある場合:

たとえば、プロジェクト A は依存関係にあります。 Y ライブラリのバージョン 1.0 に依存し、プロジェクト B が Y ライブラリのバージョン 2.0 に依存している場合、バージョンの依存関係の競合が発生する可能性があります (2 つのバージョンに互換性がない場合)。解決策:

2.1. バージョンを変更できる場合は、一貫性を保つには、バージョンの一貫性を確保するために同じバージョンを使用し続けます。 Maven のバージョン依存関係管理を処理に使用できます。つまり、親 pom ファイルで を使用して、依存関係のバージョンを均一に管理します。

2.2. プロジェクトを必要なバージョンに依存させ、戦争に投入します。パッケージを作成し、他の同じ依存関係を war パッケージに入れます。同じ共有パッケージの下にある jar パッケージのバージョン

テストでは、検索時に依存関係が上から下に検索されたことがわかりました。一致する場合は、最初のもの以下に示すように、comm-0.0.1.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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。