Mavenで実行可能なJARを作成する方法

Mavenを使用して実行可能JARを作成する方法

1. 前書き

この簡単な記事では、packaging a Maven project into an executable Jar fileに焦点を当てます。

通常、jarファイルを作成するときは、IDEを使用せずに簡単に実行したいと考えています。そのために、実行可能ファイルを作成するためにこれらの各アプローチを使用する場合の構成と長所/短所について説明します。

参考文献:

Apache Mavenチュートリアル

Apache Mavenを使用してJavaプロジェクトを構築および管理するための迅速かつ実用的なガイド。

Maven Local Repositoryはどこにありますか?

Mavenのローカルリポジトリの保存場所とその変更方法を示すクイックチュートリアル。

Maven BOMを使用したSpring

Spring MavenプロジェクトでBOM(部品表)を使用する方法を学びます。

2. 設定

実行可能jarを作成するために、追加の依存関係は必要ありません。 Maven Javaプロジェクトを作成し、main(…)メソッドを持つクラスを少なくとも1つ持つ必要があります。

この例では、ExecutableMavenJar.という名前のJavaクラスを作成しました

また、pom.xmlに次の要素が含まれていることを確認する必要があります。

4.0.0
com.example
core-java
0.1.0-SNAPSHOT
jar

ここで最も重要な側面はタイプです。実行可能jarを作成するには、構成がjarタイプを使用していることを再確認してください。

これで、さまざまなソリューションの使用を開始できます。

2.1. 手動設定

maven-dependency-pluginを使用して、手動でアプローチすることから始めましょう。

まず、必要なすべての依存関係を、指定するフォルダーにコピーします。


    org.apache.maven.plugins
    maven-dependency-plugin
    
        
            copy-dependencies
            prepare-package
            
                copy-dependencies
            
            
                
                    ${project.build.directory}/libs
                
            
        
    

注目すべき2つの重要な側面があります。 まず、目標copy-dependenciesを指定します。これにより、Mavenはこれらの依存関係を指定されたoutputDirectoryにコピーします。

この例では、プロジェクトビルドディレクトリ(通常はtargetフォルダ)内にlibsという名前のフォルダを作成します。

2番目のステップでは、最初のステップでコピーされた依存関係へのリンクを使用して、実行可能ファイルとクラスパス対応のjarを作成します。


    org.apache.maven.plugins
    maven-jar-plugin
    
        
            
                true
                libs/
                
                    org.example.executable.ExecutableMavenJar
                
            
        
    

上記の最も重要な部分は、manifest構成です。 すべての依存関係(フォルダーlibs/)を含むクラスパスを追加し、メインクラスに関する情報を提供します。

クラスの完全修飾名を指定する必要があることに注意してください。つまり、パッケージ名が含まれます。

このアプローチの長所と短所は次のとおりです。

  • pros –各ステップを指定できる透過的なプロセス

  • cons –手動、依存関係は最後のjarから外れています。つまり、実行可能jarは、libsフォルダーにアクセスして%()で表示できる場合にのみ実行されます。 t4)s

2.2. Apache Mavenアセンブリプラグイン

Apache Mavenアセンブリプラグインを使用すると、ユーザーは、プロジェクトの出力をその依存関係、モジュール、サイトドキュメント、およびその他のファイルとともに単一の実行可能なパッケージに集約できます。

アセンブリプラグインの主な目標は、singleの目標です。これは、すべてのアセンブリの作成に使用されます(他のすべての目標は非推奨であり、将来のリリースで削除される予定です)。

pom.xmlの構成を見てみましょう。


    org.apache.maven.plugins
    maven-assembly-plugin
    
        
            package
            
                single
            
            
                
                
                    
                        org.example.executable.ExecutableMavenJar
                    
                
                
                
                    jar-with-dependencies
                
            
        
    

手動アプローチと同様に、メインクラスに関する情報を提供する必要があります。違いは、Mavenアセンブリプラグインが必要なすべての依存関係をjarファイルに自動的にコピーすることです。

構成コードのdescriptorRefsの部分で、プロジェクト名に追加される名前を指定しました。

この例の出力は、core-java-jar-with-dependencies.jar.という名前になります。

  • prosjarファイル内の依存関係、1ファイルのみ

  • cons –アーティファクトのパッケージ化の基本的な制御。たとえば、クラスの再配置はサポートされていません。

2.3. Apache Maven Shadeプラグイン

Apache Maven Shadeプラグインは、プロジェクトの実行に必要なすべての依存関係で構成されるuber-jarにアーティファクトをパッケージ化する機能を提供します。 さらに、シェーディングをサポートしています。 rename-いくつかの依存関係のパッケージ。

構成を見てみましょう。


    org.apache.maven.plugins
    maven-shade-plugin
    
        
            
                shade
            
            
                true
                
                    
                        org.example.executable.ExecutableMavenJar
                
            
        
        
    

この構成には3つの主要な部分があります。

まず、<shadedArtifactAttached>は、jarにパッケージ化されるすべての依存関係をマークします。

次に、the transformer implementationを指定する必要があります。この例では、標準のものを使用しました。

最後に、アプリケーションのメインクラスを指定する必要があります。

出力ファイルの名前はcore-java-0.1.0-SNAPSHOT-shaded.jarになります。ここで、core-javaはプロジェクト名で、その後にスナップショットバージョンとプラグイン名が続きます。

  • prosjarファイル内の依存関係、アーティファクトのパッケージ化の高度な制御、シェーディングとクラスの再配置

  • cons –複雑な構成(特に高度な機能を使用する場合)

2.4. 1つのJarMavenプラグイン

実行可能jarを作成するもう1つのオプションは、OneJarプロジェクトです。

これにより、ファイルシステムのjarsからではなく、アーカイブ内のjarからクラスとリソースをロードする方法を知っているカスタムクラスローダーが提供されます。

構成を見てみましょう。


    com.jolira
    onejar-maven-plugin
    
        
            
                org.example.executable.
                  ExecutableMavenJar
                true
                
                  ${project.build.finalName}.${project.packaging}
                
            
            
                one-jar
            
        
    

構成に示されているように、attachToBuild= trueを使用して、メインクラスを指定し、すべての依存関係をビルドにアタッチする必要があります。

また、出力ファイル名を提供する必要があります。 さらに、Mavenの目標はone-jarです。 One Jarは商用ソリューションであり、実行時に依存関係jarsがファイルシステムに展開されないことに注意してください。

  • pros –クリーンな委任モデル。クラスをOne Jarのトップレベルにすることができ、外部jarsをサポートし、ネイティブライブラリをサポートできます。

  • cons – 2012年以降アクティブにサポートされていません

2.5. Spring Boot Mavenプラグイン

最後に、最後に検討するソリューションは、Spring BootMavenプラグインです。

これにより、実行可能なjarまたはwarアーカイブをパッケージ化し、アプリケーションを「インプレース」で実行できます。

それを使用するには、少なくともMavenバージョン3.2を使用する必要があります。 詳細な説明はhereで入手できます。

設定を見てみましょう:


    org.springframework.boot
    spring-boot-maven-plugin
    
        
            
                repackage
            
            
                spring-boot
                
                  org.example.executable.ExecutableMavenJar
                
            
        
    

Springプラグインと他のプラグインには2つの違いがあります。 まず、実行の目標はrepackageと呼ばれ、分類子はspring-bootと呼ばれます。

このプラグインを使用するためにSpringBootアプリケーションを用意する必要はないことに注意してください。

  • prosjarファイル内の依存関係、アクセス可能なすべての場所で実行でき、アーティファクトのパッケージ化の高度な制御、jarファイルなどからの依存関係の除外、jarのパッケージ化t3)sファイルも

  • cons –潜在的に不要なSpringおよびSpringBoot関連のクラスを追加します

2.6. 実行可能なTomcatを使用したWebアプリケーション

最後の部分では、jarファイル内にパックされたスタンドアロンのWebアプリケーションを使用するというトピックについて説明します。 そのためには、実行可能なjarファイルを作成するために設計された別のプラグインを使用する必要があります。


    org.apache.tomcat.maven
    tomcat7-maven-plugin
    2.0
    
        
            tomcat-run
            
                exec-war-only
            
            package
            
                /
                false
                webapp.jar
                utf-8
            
        
    

goalexec-war-onlyとして設定され、サーバーへのpathconfigurationタグ内で指定され、finalName, charsetなどの追加のプロパティがあります。 jarを作成するには、man packageを実行します。これにより、targetディレクトリにwebapp.jarが作成されます。 走る

アプリケーションを実行するには、コンソールにjava -jar target/webapp.jarと記述し、ブラウザーでlocalhost:8080 /を指定してテストしてみてください。

  • pros – 1つのファイルがあり、展開と実行が簡単

  • cons – Tomcat埋め込みディストリビューションをwarファイル内にパックするため、ファイルのサイズがはるかに大きくなります

これはこのプラグインの最新バージョンであり、Tomcat7サーバーをサポートしていることに注意してください。 エラーを回避するには、サーブレットの依存関係でscopeprovidedとして設定されていることを確認してください。設定されていない場合、実行可能jarruntimeで競合が発生します。


    javax.servlet
    javax.servlet-api
    provided

3. 結論

この記事では、さまざまなMavenプラグインを使用して実行可能jarを作成する多くの方法について説明しました。

このチュートリアルの完全な実装は、this (executable jar)およびthis (executable war)Githubプロジェクトにあります。

How to test?プロジェクトを実行可能jarにコンパイルするには、mvn clean packageコマンドを使用してMavenを実行してください。

願わくば、この記事がこのトピックに関するより多くの洞察を与えてくれて、あなたのニーズに応じてあなたが好むアプローチを見つけることを願っています。

最後に、バンドルするjarのライセンスがこの種の操作を禁止していないことを確認してください。 通常はそうではありませんが、検討する価値があります。