1。プロジェクトの背景
Spring Cloudは、スプリングブートプロジェクトを構築し、各プロジェクトのレベルを改良し、カップリングを減らす目的を達成します。プロジェクトは、安らかなコミュニケーションに基づいています。
プロジェクトのパッケージ化の過程で、Spring-Boot-Maven-Pluginプラグインを使用してパッケージ化すると、脂肪瓶が生成されます。 JARパッケージが解凍された場合、プロジェクトに依存するJARパッケージがBoot-INFの下のLIBフォルダーに保存されていることがわかります。複数のサブプロジェクトを分析した後、同じJARパッケージが大多数を占めることがわかります。その後、オンライン環境に展開されるたびに、各システムの一般的な瓶は実際にサーバー上で繰り返し棚に置かれます。したがって、頻繁に変更されていない一般的なJARパッケージまたはJARパッケージを抽出する方法があるかどうか、別のコピーを整理し、外部荷重を使用して脂肪瓶で体重を減らす目的を達成する方法があるかどうかを自然に考えます。
2。ファットジャースリミング
上記の分析と関連情報のレビューの後、次の手順を整理して、JARパッケージをスリミングにしました。
1.各プロジェクトは、Spring-Boot-Maven-Pluginプラグイン(公式ドキュメント)を構成して、ファットジャーに保持されているJARパッケージを生成します
<Plugin> <groupId> org.springframework.boot </groupid> <artifactid> spring-boot-maven-plugin </artifactid> <configuration> <configuration> zip </layout> <! - <expludegroupids> org.springframework.boot Tk.mybatis、mysql、com.alibaba、javax.persistence、io.springfox、org.springframework.session </expludegroupids> - > <clougid> xx </groupid> <artifactid> xx < <Artifactid> xx </artifactid> </include> </include> </configuration> </plugin>
上記のコードと同様に、状況に応じて、excludeGroupIDS、またはその他のタグを含めるか、その他のタグを使用できます。
2.プロジェクト依存関係の瓶から脂肪瓶に保存したくないjarパッケージを抽出します。
方法1(推奨):Maven依存関係プラグインをプロジェクトPOMファイルに追加する(公式ドキュメント)
<プラグイン> <groupid> org.apache.maven.plugins </groupid> <artifactid> maven-dependent-plugin </artifactid> <バージョン> 3.1.1 </version> <executions> <id> copy依存者</id> <フェーズ>パッケージ</< <OutputDirectory> e:/lib </outputdirectory> - > <excludegroupids> <! - jarのjarパッケージのfat groupid属性値(複数、分離)のまま - > </explitenapshots> true </computuration> </実行> </実行>
タグの特定の意味については、公式ドキュメントを確認してください。
Mavenを使用してプロジェクトをパッケージ化する場合は、Mavenコマンドを使用します。
MVN Clean Install -dmaven.test.skip = true -doutputdirectory = e:/lib(-doutputdirectory = e:/libは、プロジェクトが動的に依存するJARパッケージによってエクスポートされるパスです。
configurationプラグインがこのコマンドを実行した後、excludegroupidsタグで構成されたJARパッケージを除き、プロジェクトの残りの部分は指定されたディレクトリにインポートされ、脂肪ジャーの余分なJARパッケージが抽出されます。
方法2:Maven依存関係のプラグインをプロジェクトに追加しないでください。MVNを直接使用して、プロジェクトのJARパッケージに依存するコマンドをコピーします。この方法では、各サブプロジェクトの依存関係を1つずつ必要とし、少数のサブプロジェクトを使用できます。
MVN依存関係:copy -dependencies -doutputdirectory = e:/lib(ダイナミックに指定されたディレクトリがない場合、依存関係ディレクトリはプロジェクトのターゲットパスでデフォルトで生成されます)
各プロジェクトによってエクスポートされた依存関係のJARパッケージをフォルダーに入れ、重複を削除し、脂肪瓶に予約されている依存関係の瓶パッケージを削除してから、脂肪瓶の余分な瓶パッケージの除去を完了します。
3.抽出されたJARパッケージをサーバーの特定のパスに配置し、プロジェクトの起動スクリプトを構成し、外部からロードします。
nohup java -dloader.path = "xx/lib" -jar xx.jar
-dloader.pathは外部読み込みアドレスです。
スリミングした後、プロジェクトがパッケージ化された後、JARパッケージで確認できます。 Boot-INFのLIBには、必要な瓶パッケージのみがあり、脂肪瓶のサイズを大幅に削減します。
POMの構成は、マイクロサービスシステムで使用して統合された構成を形成でき、各プロジェクトのJARパッケージの依存関係は特定の状況に応じて変更されます。
3。遭遇した問題と解決策
スリミングの過程で、それは滑らかなセーリングではありませんでした。作業が完了し、プロジェクトを開始したと思ったとき、スタートアップが失敗し、jarが対立することがわかりました。
1. JARパッケージの競合を解決し、MVNコマンドを介したJARパッケージの依存関係を分析し、競合するJARパッケージを見つけ、バージョンを統合します。
Eclipseでは、新しいMavenビルドを作成しました。最初は、MVN依存関係を試してからツリーを試し、JARパッケージの依存関係全体を分析しましたが、問題のJARパッケージの依存関係は見つかりませんでした。その後、MVN依存関係を試しました:ツリー - dverboseを試し、すべての間接的な暗黙的依存関係を分析しましたが、それでも問題のJARパッケージの依存関係は見つかりませんでした。
この時点で、私はプロジェクトにJARパッケージがないと思われます。繰り返しパッケージングの後、この問題は実際にプロジェクトの依存関係にあることがわかりますが、深く隠されすぎています。したがって、単一のJARパッケージについては、分析のみを実行できます。
MVN依存関係:tree -dverbose -dincludes = xx:xx:xx(xx:xx:xx jar package groupid:artifactid:バージョン)
Dincludesを使用した後、対応するJARパッケージの依存関係が見つかり、JARパッケージはプロジェクトで除外されます。再びパッケージ化した後、プロジェクトは正常に開始され、問題が解決します。
2。パッケージングプロセス中に、一部のサブプロジェクトはスプリングブートマベンプラギンプラグインを使用しませんでしたが、Maven-Jar-Pluginを使用して実行可能な瓶に直接パッケージ化しました。 Fat Jar Slimming構成を組み合わせた後、相互運用可能なものに依存していた瓶が失敗したことがわかりました。脂肪瓶はスリミングしているため、コードが頻繁に変更されるプロジェクトの瓶のみが残り、依存関係が実行可能な瓶に渡されないため、このプロジェクトの完全性を確保するために、このプロジェクトの必要なプロジェクトのJARパッケージに明示的に依存する必要があります。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。