如何使用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>

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

Answers:


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目标作为标准构建的一部分,你需要的目标绑定到特定阶段的的默认的生命周期。为此,phaseexecution元素中声明要将目标绑定到的对象:

<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

为我工作!谢谢!
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

1
是的,最有可能的<classpath />标签是错误地到达的,应该将其删除。因此,该行应如下所示:<argument>-classpath</argument>
Dimitry K

7
没错 这表明pom.xml中指定的依赖项应用作类路径的一部分。
user924272 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.