Mavenを使用してプログラムを実行するにはどうすればよいですか?


120

MavenゴールでJavaクラスの実行をトリガーしたいのですが。私は次Makefileの行で移行しようとしています:

neotest:
    mvn exec:java -Dexec.mainClass="org.dhappy.test.NeoTraverse"

そして、現在mvn neotest何をmake neotestしているのかを作りたいと思います。

execプラグインのドキュメントにMaven Antタスクページにも、簡単な例はありませんでした。

現在、私は次の場所にいます:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.1</version>
  <executions><execution>
    <goals><goal>java</goal></goals>
  </execution></executions>
  <configuration>
    <mainClass>org.dhappy.test.NeoTraverse</mainClass>
  </configuration>
</plugin>

ただし、コマンドラインからプラグインをトリガーする方法はわかりません。

回答:


149

exec-maven-pluginに定義したグローバル構成使用します。

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.4.0</version>
  <configuration>
    <mainClass>org.dhappy.test.NeoTraverse</mainClass>
  </configuration>
</plugin>

mvn exec:javaコマンドラインで呼び出すと、クラスを実行するように構成されたプラグインが呼び出されますorg.dhappy.test.NeoTraverse

したがって、コマンドラインからプラグインをトリガーするには、次のコマンドを実行します。

mvn exec:java

ここで、exec:java標準ビルドの一部としてゴールを実行する場合は、デフォルトのライフサイクルの特定のフェーズにゴールをバインドする必要があります。これを行うにphaseは、execution要素でゴールをバインドする先を宣言します。

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.4</version>
  <executions>
    <execution>
      <id>my-execution</id>
      <phase>package</phase>
      <goals>
        <goal>java</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <mainClass>org.dhappy.test.NeoTraverse</mainClass>
  </configuration>
</plugin>

この例では、packageフェーズ中にクラスが実行されます。これは単なる例であり、ニーズに合わせて変更してください。プラグインバージョン1.1でも動作します。


1
最初は戸惑いましたexec:java。ScalaとClojureのコードにも使用できます。Javaコード自体である必要はありません。
2015

8
バージョンは1.4.0である必要があります
Walery Strauch 2016

私のために働いた!どうも!
mrddr

25

複数のプログラムを実行するために、profilesセクションも必要でした。

<profiles>
  <profile>
    <id>traverse</id>
    <activation>
      <property>
        <name>traverse</name>
      </property>
    </activation>
    <build>
      <plugins>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>exec-maven-plugin</artifactId>
          <configuration>
            <executable>java</executable>
            <arguments>
              <argument>-classpath</argument>
              <argument>org.dhappy.test.NeoTraverse</argument>
            </arguments>
          </configuration>
        </plugin>
      </plugins>
    </build>
  </profile>
</profiles>

これは次のように実行可能です:

mvn exec:exec -Dtraverse

1
その<argument>-classpath</argument><classpath />行で何が起こっているのですか?私はそれが正しいとは思いません。
GreenGiant 2013年

1
うん、たぶん<classpath />タグは間違ってそこにあるので、削除する必要があります。:だから、その行だけになります<argument>-classpath</argument>
のDimitry K

7
それは間違いではありません。これは、pom.xmlで指定された依存関係をクラスパスの一部として使用する必要があることを示しています。
user924272 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.