web-dev-qa-db-ja.com

Mavenでは、使用されているクラスパスをどのように出力しますか?

現在の目的のために、warファイルを作成するMavenプロジェクトがあり、warを作成するときに実際にどのクラスパスが使用されているかを確認します。プロジェクト全体をコンパイルすることなく、単一のコマンドでそれを行う方法はありますか?

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

42
Alexander Bird

ファイル内でクラスパスを単独で取得するには、次のようにします。

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>

From: http://maven.Apache.org/plugins/maven-dependency-plugin/usage.html

69
Janik Zikovsky

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

14
Philip Helger

次のコマンドoutputs MacおよびLinuxのクラスパス:

mvn -q exec:exec -Dexec.executable=echo -Dexec.args="%classpath"

結果を出力し、ファイルに保存しないことは、たとえば、Bashスクリプトの変数に結果を割り当てるときに役立ちます。このソリューションはMacおよびLinuxでのみ実行されますが、Bash Shellスクリプトも実行されます。

echo実行可能ファイルが存在しないWindows(BATファイルなど)では、次のようなものが必要です(テストされていません):

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の影響を受けます。

8
Danila Piatov

コマンド 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

唯一の要件は、コンパイルが終了することです。コンパイルが実行されないと動作しません。

他のコマンドは、コマンドmvn dependency:tree

6
Paul Guralivu

ecerulm のコメントで Janikの回答 に記載されているように、スコープを_dependency:build-classpath_に指定することもできます。クラスパスの出力はスコープによって異なるため(デフォルトではtestは何らかの理由で使用されます)。私はこのようなコマンドで終わった:

_mvn -DincludeScope=compile dependency:build-classpath
_

POM内では、次のように使用できます。

_<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>
              <includeScope>compile</includeScope>
              <!-- Omit to print on console: -->
              <outputFile>${project.build.directory}/compile-classpath.txt</outputFile>
            </configuration>
          </execution>
          <execution>
            <id>build-test-classpath</id>
            <phase>generate-test-sources</phase>
            <goals>
              <goal>build-classpath</goal>
            </goals>
            <configuration>
              <includeScope>test</includeScope>
              <!-- Omit to print on console: -->
              <outputFile>${project.build.directory}/test-classpath.txt</outputFile>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>
_

これにより、メインビルド用とテスト用の2つのバージョンのクラスパスが出力されます。

2
Pavel S.

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

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
1
ElMesa