私の現在の目的のために、war
ファイルを作成する Maven プロジェクトがあり、 war
. プロジェクト全体をコンパイルすることなく、単一のコマンドでそれを行う方法はありますか?
1 つのアイデアは、Maven にtarget/classpath.properties
ファイルを生成させ、その時点で停止させることです。
私の現在の目的のために、war
ファイルを作成する Maven プロジェクトがあり、 war
. プロジェクト全体をコンパイルすることなく、単一のコマンドでそれを行う方法はありますか?
1 つのアイデアは、Maven にtarget/classpath.properties
ファイルを生成させ、その時点で停止させることです。
ファイル内でクラスパスをすべて取得するには、次のことができます。
mvn dependency:build-classpath -Dmdep.outputFile=cp.txt
または、これを POM.XML に追加します。
<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.9</version>
<executions>
<execution>
<id>build-classpath</id>
<phase>generate-sources</phase>
<goals>
<goal>build-classpath</goal>
</goals>
<configuration>
<!-- configure the plugin here -->
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
[...]
</project>
から: http://maven.apache.org/plugins/maven-dependency-plugin/usage.html
このコマンドは、Mac および Linux のクラスパスを出力します。
mvn -q exec:exec -Dexec.executable=echo -Dexec.args="%classpath"
たとえば、結果を Bash スクリプトの変数に割り当てる場合などに、結果を出力してファイルに保存しないと便利です。このソリューションは Mac と Linux でのみ動作しますが、Bash シェル スクリプトも同様です。
実行可能ファイルがない Windows (例: BAT ファイル) では、次のecho
ようなものが必要になります (未テスト):
mvn -q exec:exec -Dexec.executable=cmd -Dexec.args="/c echo %classpath"
java
または、クラスパスを使用してプログラムを実行することもできます。
mvn -q exec:exec -Dexec.executable=java -Dexec.args="-cp %classpath Main"
またはそのように(正しいクラスパスを自動的に使用します):
mvn -q exec:java -Dexec.mainClass="Main"
ただし、これらの代替アプローチはどちらも、プログラムが失敗したときに Maven がエラー メッセージを追加するという問題を抱えています。
または「mvn -e -X ....」を呼び出して、出力を確認します...
このコマンドmvn dependency:list
は、コンパイル、ランタイム、およびテストに使用されるすべての jar を含むクラスパスを次の形式で一覧表示します。
INFO] --- maven-dependency-plugin:2.8:list (default-cli) @ MyProject ---
[INFO]
[INFO] The following files have been resolved:
[INFO] org.netbeans.api:org-openide-filesystems:jar:RELEASE80:compile
[INFO] org.netbeans.api:org-netbeans-modules-queries:jar:RELEASE80:compile
[INFO] org.netbeans.api:org-netbeans-api-progress:jar:RELEASE80:compile
[INFO] org.netbeans.api:org-openide-dialogs:jar:RELEASE80:compile
[INFO] org.apache.derby:derby:jar:10.11.1.1:compile
[INFO] org.netbeans.api:org-openide-windows:jar:RELEASE80:compile
唯一の要件は、コンパイルが完了していることです。コンパイルが実行されていないと機能しません。
もう 1 つのコマンドは、コマンドmvn dependency:tree
です。
これは単一のコマンド ソリューションですが、コードをコンパイルします。
mvn -e -X -Dmaven.test.skip=true clean compile | grep -o -P '\-classpath .*? ' | awk '{print $2}'
シェルスクリプトの使用例
MAVEN_CLASSPATH=$(mvn -e -X -Dmaven.test.skip=true clean compile | grep -o -P '\-classpath .*? ' | awk '{print $2}')
シェルスクリプトでそのバリエーションを使用して、このようにスタンドアロンの main() (Hibernate スキーマ生成用) を実行しました
#/bin/bash
MAVEN_TEST_CLASSPATH=$(mvn -e -X clean package | grep -o -P '\-classpath .*?test.*? ')
java $MAVEN_TEST_CLASSPATH foo.bar.DBSchemaCreate
ファイル出力例
mvn -e -X -Dmaven.test.skip=true clean compile | grep -o -P '\-classpath .*? ' | awk '{print $2}' > maven.classpath