Maven运行项目


231

是否有Maven的“阶段”或“目标”来简单地执行Java类的主要方法?我有一个项目,希望通过简单地执行诸如“ mvn run”之类的操作来进行手动测试。

Answers:


348

请参阅exec maven插件。您可以使用以下命令运行Java类:

mvn exec:java -Dexec.mainClass="com.example.Main" [-Dexec.args="argument1"] ...

调用就像mvn exec:java插件配置在pom.xml中一样简单。Mojohaus上的插件站点上有一个更详细的示例

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>com.example.Main</mainClass>
                    <arguments>
                        <argument>argument1</argument>
                    </arguments>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

14
这就是答案的样子!参考+简单示例+复杂示例。这个简单的例子对我
有用

1
该插件是否有更新的版本(比1.2.1更新?)
Alexander Mills

是的,有一个较新的版本,因此除非您要使用版本1.2.1,否则不要复制1对1以上的片段。有关最新版本,请参阅mojohaus.org/exec-maven-plugin/usage.html。它是1.6.0
user1053510

谢谢,如果您在子模块中有其他模块的依赖关系,您还知道如何运行主类吗?
user1767316 '19

这并不能有效地运行主要班级
德克斯特

23

1.编辑POM.xml

在中添加以下属性pom.xml。确保使用包含main方法的全限定类名(即带有包名):

<properties>
        <exec.mainClass>fully-qualified-class-name</exec.mainClass>
</properties>

2.运行命令

现在从终端,触发以下命令:

mvn clean compile exec:java

注意您可以通过-Dexec.args="xxx"flag 传递更多参数。


这真的有效吗?我已经尝试过这两个:<exec.mainClass> $ {foo.bar.SomeMainClass} </ exec.mainClass>和<exec.mainClass> foo.bar.SomeMainClass </exec.mainClass>,它不起作用。错误是相同的:[ERROR]无法在项目newtrex上执行目标org.codehaus.mojo:exec-maven-plugin:1.6.0:java(default-cli):目标org.codehaus.mojo的参数'mainClass' :exec-maven-plugin:1.6.0:java丢失或无效-> [帮助1]
Nenad Bulatovic,

它有效,您可能需要检查一下帖子
Saikat

@NenadBulatovic:如果您将$ {foo.bar.SomeMainClass}替换为foo.bar.SomeMainClass->不带$或{},则可以正常工作
Krishna Santosh Sampath

14

上面提到的答案是正确的,但我正在为像我这样的菜鸟简化它。转到您项目的pom文件。添加一个新属性exec.mainClass并将其值作为包含您的main方法的类给出。对我来说,这是DriverClassmainpkg。根据您的项目进行更改。 在此处输入图片说明

完成此操作后,导航到包含您的项目的文件夹,pom.xml然后在命令提示符下运行它mvn exec:java。这应该调用main方法。


8

无需在pom.xml中添加新插件。只需运行此命令

mvn org.codehaus.mojo:exec-maven-plugin:1.5.0:java -Dexec.mainClass="com.example.Main" | grep -Ev '(^\[|Download\w+:)' 

有关更多用法,请参见maven exec插件


通过-Dexec.args="...arg..."
sstn 18'Feb


2

clean package exec:java -P Class_Containing_Main_Method 如果项目中只有一个Main方法(PSVM),并且具有以下Maven设置,则命令也是一个选项。

不要忘了在以下<properties></properties>部分中提到该类pom.xml

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.main.class>com.test.service.MainTester</java.main.class>
</properties>

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <configuration>
           <mainClass>${java.main.class}</mainClass>
        </configuration>
</plugin>

STS运行配置以及上述Maven设置:

在此处输入图片说明


在我看来,这不合适。-P不是'profile'吗?如果在命令行上指定它,为什么需要将其放在插件属性中?
Rup

@Rup是的,-P用于个人资料。分享了这一点,因为它也是运行Maven项目的一种选择。
阿披耶特(Abhijeet)2015年
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.