用Maven跑Java main的3种方法

概述

Maven exec plugin可以使我们运行自己工程的Java类的main方法,并在classpath里自动包含工程的dependencies。本文用示例代码展示了使用maven exec plugin来运行java main方法的3种方法。

在命令行(Command line)运行

用这种方式运行的话,并没有在某个maven phase中,所以你首先需要compile(编译)一下代码。
请记住exec:java不会自动编译代码,需要先编译才行。

1
mvn compile

不带参数跑:

1
mvn exec:java -Dexec.mainClass="com.vineetmanohar.module.Main"

带参数跑:

1
mvn exec:java -Dexec.mainClass="com.vineetmanohar.module.Main" -Dexec.args="arg0 arg1 arg2"

在classpath里用runtime依赖

1
mvn exec:java -Dexec.mainClass="com.vineetmanohar.module.Main" -Dexec.classpathScope=runtime

在pom.xml文件的某个phase里运行

也可以在maven的某个phase里运行main方法。比如,作为test phase的一部分运行CodeGenerator.main()方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<build>  
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1.1</version>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>com.vineetmanohar.module.CodeGenerator</mainClass>
<arguments>
<argument>arg0</argument>
<argument>arg1</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

用以上配置运行exec plugin,运行相应的phase就行了。

1
mvn test

在pom.xml文件的某个profile运行

也可以用不同的profile运行main方法。只要用<profile>标签包裹住以上配置就行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<profiles>  
<profile>
<id>code-generator</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1.1</version>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>com.vineetmanohar.module.CodeGenerator</mainClass>
<arguments>
<argument>arg0</argument>
<argument>arg1</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>

调用以上profile,运行以下命令就行:

1
mvn test -Pcode-generator