如何使用Maven执行程序?

我想有一个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> 

不过,我不知道如何从命令行触发插件。

使用您为exec-maven-plugin定义的全局configuration

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

在命令行中调用mvn exec:java将调用configuration为执行类org.dhappy.test.NeoTraverse的插件。

所以,要从命令行触发插件,只需运行:

 mvn exec:java 

现在,如果要执行exec:java目标作为标准构build的一部分,则需要将目标绑定到默认生命周期的特定阶段 。 为此,在execution元素中声明你想要绑定目标的phase

 <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。

为了执行多个程序,我还需要一个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> <classpath/> <argument>org.dhappy.test.NeoTraverse</argument> </arguments> </configuration> </plugin> </plugins> </build> </profile> </profiles> 

这是可执行的,如下所示:

 mvn exec:exec -Dtraverse