Mavenは、指定された実行可能なjarをターゲット環境に従って生成する
詳細
実際のプロジェクトでは、「あるコマンドを実行することで何かを解決する」というニーズによく遭遇します.
開発者がスクリプト言語が得意であれば、スクリプトを直接書いてコマンドラインで実行すれば幸いです.
開発者がJava、Cなどの静的言語しか得意でない場合は、最終的に実行可能なファイルを生成し、コマンドラインで直接呼び出すツールもあります.
そうすれば、難しいことはないようだ.確かに、もし事がただこのようにすれば、もちろん比較的に簡単で、肝心な問題は常に開発環境とテスト環境と生産環境が往々にして完全に同じではないことです.では、現在の環境の要件を満たすために、常に異なる環境で構成を変更する必要があります.これにより、手作業が必要なことが多くなります.特に、テストとマルチキャストの場合、配置された担当者は悪口を言うに違いありません.
まあ、こんなくだらないことを言って、私たちは今からこのような問題に正式に直面して、比較的優雅な方法でそれを解決しましょう.
仮に、私たちは今Javaを使ってこのことをしています.反復的にゆっくりします
まず実行可能なjarを作ります.これは比較的簡単で、ほとんどのプログラマーは自分のIDEを直接使用してプロジェクトを実行可能なjarに直接エクスポートすることができます.しかし、今は一人ですべてのことを完成できる時代ではありません.チームの協力を重視する時代には、開発者の個人環境に依存しない方法を選んでこのことを完成しなければなりません.幸いなことに、私たちはmavenを持っています.私たちはmavenの中でこのようなことを簡単に完成することができて、同時にある人の環境にも依存しません.
pom.xmlに以下の構成を追加すればOKです.
OK、上記の構成によれば、mvn:assembly:assemblyというコマンドを簡単に使用して実行可能なjarを得ることができ、このjarではこのプロジェクトに依存する第三者のjarをこのjarに打ち込むことができ、java-jar xxxx.jarを直接使用して指定したコードを実行することができます.
もし、私たちがこの実行可能なjarを生成することにもっと個性的なことをする必要があるなら、どうすればいいのでしょうか.たとえば、プロジェクトではspringに依存する必要がありますが、このように直接生成されたjarが実行されると、自動的に生成されたjarのMETA-INFディレクトリに含まれるspring-schemasとspring-handlersファイルに必要なschemaの定義と解析方法が欠けているため、schema namespaceのエラーが報告されます.それは実はよく解決されています.assembly.xmlを指定してmavenにこの問題を処理してもらうことができます.具体的な構成は次のとおりです.
次に、実行可能なjarを汎用的な方法で生成する必要があります.次に、指定したターゲット環境のjarを生成する方法について、別の問題を解決します.
実は簡単です.mavenのprofile構成を導入すればいいです.具体的な構成は次のとおりです.
これにより、mvn-Dwindwos assembly:assemblyまたはmvn-DRinux assembly:assemblyを実行するだけで 指定したターゲット環境の実行可能なjarを生成できます.
PS:ターゲット環境jarの名前が異なる場合は、対応するassemble.xmlファイルでそのidの値を変更すればいいです.
実際のプロジェクトでは、「あるコマンドを実行することで何かを解決する」というニーズによく遭遇します.
開発者がスクリプト言語が得意であれば、スクリプトを直接書いてコマンドラインで実行すれば幸いです.
開発者がJava、Cなどの静的言語しか得意でない場合は、最終的に実行可能なファイルを生成し、コマンドラインで直接呼び出すツールもあります.
そうすれば、難しいことはないようだ.確かに、もし事がただこのようにすれば、もちろん比較的に簡単で、肝心な問題は常に開発環境とテスト環境と生産環境が往々にして完全に同じではないことです.では、現在の環境の要件を満たすために、常に異なる環境で構成を変更する必要があります.これにより、手作業が必要なことが多くなります.特に、テストとマルチキャストの場合、配置された担当者は悪口を言うに違いありません.
まあ、こんなくだらないことを言って、私たちは今からこのような問題に正式に直面して、比較的優雅な方法でそれを解決しましょう.
仮に、私たちは今Javaを使ってこのことをしています.反復的にゆっくりします
まず実行可能なjarを作ります.これは比較的簡単で、ほとんどのプログラマーは自分のIDEを直接使用してプロジェクトを実行可能なjarに直接エクスポートすることができます.しかし、今は一人ですべてのことを完成できる時代ではありません.チームの協力を重視する時代には、開発者の個人環境に依存しない方法を選んでこのことを完成しなければなりません.幸いなことに、私たちはmavenを持っています.私たちはmavenの中でこのようなことを簡単に完成することができて、同時にある人の環境にも依存しません.
pom.xmlに以下の構成を追加すればOKです.
maven-assembly-plugin
2.2-beta-5
com.wolf.Process
jar-with-dependencies
OK、上記の構成によれば、mvn:assembly:assemblyというコマンドを簡単に使用して実行可能なjarを得ることができ、このjarではこのプロジェクトに依存する第三者のjarをこのjarに打ち込むことができ、java-jar xxxx.jarを直接使用して指定したコードを実行することができます.
もし、私たちがこの実行可能なjarを生成することにもっと個性的なことをする必要があるなら、どうすればいいのでしょうか.たとえば、プロジェクトではspringに依存する必要がありますが、このように直接生成されたjarが実行されると、自動的に生成されたjarのMETA-INFディレクトリに含まれるspring-schemasとspring-handlersファイルに必要なschemaの定義と解析方法が欠けているため、schema namespaceのエラーが報告されます.それは実はよく解決されています.assembly.xmlを指定してmavenにこの問題を処理してもらうことができます.具体的な構成は次のとおりです.
pom.xml
maven-assembly-plugin
com.wolf.Process
src/main/resources/META-INF/assemble.xml
assemble.xml
jar-with-dependencies
jar
false
/
true
META-INF/spring.handlers
META-INF/spring.schemas
runtime
src/main/resources/META-INF/spring.handlers
META-INF
src/main/resources/META-INF/spring.schemas
META-INF
次に、実行可能なjarを汎用的な方法で生成する必要があります.次に、指定したターゲット環境のjarを生成する方法について、別の問題を解決します.
実は簡単です.mavenのprofile構成を導入すればいいです.具体的な構成は次のとおりです.
pom.xml
windows
maven-assembly-plugin
src/main/resources/META-INF/assemble-linux.xml
windows
linux
maven-assembly-plugin
src/main/resources/META-INF/assemble-linux.xml
linux
これにより、mvn-Dwindwos assembly:assemblyまたはmvn-DRinux assembly:assemblyを実行するだけで 指定したターゲット環境の実行可能なjarを生成できます.
PS:ターゲット環境jarの名前が異なる場合は、対応するassemble.xmlファイルでそのidの値を変更すればいいです.