60

私の現在の目的のために、warファイルを作成する Maven プロジェクトがあり、 war. プロジェクト全体をコンパイルすることなく、単一のコマンドでそれを行う方法はありますか?

1 つのアイデアは、Maven にtarget/classpath.propertiesファイルを生成させ、その時点で停止させることです。

4

7 に答える 7

99

ファイル内でクラスパスをすべて取得するには、次のことができます。

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

于 2014-12-12T20:33:34.170 に答える
17

このコマンドは、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 がエラー メッセージを追加するという問題を抱えています。

于 2017-07-11T20:19:54.017 に答える
15

または「mvn -e -X ....」を呼び出して、出力を確認します...

于 2013-05-20T17:40:07.023 に答える
7

このコマンド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です。

于 2016-06-14T10:42:03.690 に答える
1

これは単一のコマンド ソリューションですが、コードをコンパイルします

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
于 2016-05-31T16:26:46.197 に答える