应用执行
应用执行
通常我们在使用 Maven 管理项目的时候,都希望直接使用 Maven 插件的方法来管理我们的代码,以及运行。最常用的一个功能就是运行一个主类:希望测试一个主类的输出,但是这个主类又依赖的很多的第三方的 jar 包,直接使用 java 添加第三方的 jar 到对应的 classPath 下非常不方便。
命令行中执行
如果需要在 Maven 中直接运行某个类中的 Main 方法,可以直接在命令行中指定:
mvn exec:java -Dexec.mainClass="com.example.Main"
mvn exec:java -Dexec.mainClass="xxx.xxx.xxx" [-Dexec.args="arg1 arg2 arg3"]
exec-maven-plugin
如果是经常使用的话,可以在 pom 文件中添加如下的配置:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.example.Main</mainClass>
<arguments>
<argument>foo</argument>
<argument>bar</argument>
</arguments>
</configuration>
</plugin>
其更为复杂的配置如下:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
// 可以添加对应的执行阶段
<phase>test</phase>
...
<goals>
// 指定来的 goal为java,表示运行java程序
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
// 指定了运行的main class
<mainClass>com.example.Main</mainClass>
// 执行运行 main class的参数
// 其实就是传入main方法的String[]
<arguments>
<argument>argument1</argument>
...
</arguments>
// 运行java的程序的系统参数
<systemProperties>
<systemProperty>
<key>myproperty</key>
<value>myvalue</value>
</systemProperty>
...
</systemProperties>
</configuration>
</plugin>
</plugins>
</build>
...
</project>
我们也可以指定 Profile:
<profiles>
<profile>
<id>my-exec</id>
....
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
// 可以添加对应的执行阶段
// 也可以不添加执行阶段,使用mvn exec:exec运行
<phase>test</phase>
...
<goals>
// 指定来的 goal为java,表示运行java程序
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
// 指定了运行的main class
<mainClass>com.example.Main</mainClass>
// 执行运行 main class的参数
// 其实就是传入main方法的String[]
<arguments>
<argument>argument1</argument>
...
</arguments>
// 运行java的程序的系统参数
<systemProperties>
<systemProperty>
<key>myproperty</key>
<value>myvalue</value>
</systemProperty>
...
</systemProperties>
</configuration>
</plugin>
</plugins>
</build>
....
</profile>
</profiles>