应用执行

应用执行

通常我们在使用 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>
上一页