在 Maven 中从测试范围运行 main:“目标 org.codehaus.mojo:exec-maven-plugin:1.6.0:java 的参数 'mainClass' 丢失或无效”

Posted

技术标签:

【中文标题】在 Maven 中从测试范围运行 main:“目标 org.codehaus.mojo:exec-maven-plugin:1.6.0:java 的参数 \'mainClass\' 丢失或无效”【英文标题】:Run main from test scope in Maven: "The parameters 'mainClass' for goal org.codehaus.mojo:exec-maven-plugin:1.6.0:java are missing or invalid"在 Maven 中从测试范围运行 main:“目标 org.codehaus.mojo:exec-maven-plugin:1.6.0:java 的参数 'mainClass' 丢失或无效” 【发布时间】:2019-05-01 09:10:38 【问题描述】:

我想执行一个位于 test src 文件夹中的主类。 我试过了:

mvn -q exec:java \
    -Dexec.mainClass=com.example.beanoverriding.EmbeddedApplication \
    -Dexec.classpathScope="test"

但是得到:

[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.6.0:java (default-cli) on project bean-overriding: 
        The parameters 'mainClass' for goal org.codehaus.mojo:exec-maven-plugin:1.6.0:java are missing or invalid -> [Help 1]

查看实际代码:

编辑: 像这样写它是有效的:

mvn -q exec:exec \
    -Dexec.executable=java \
    -Dexec.args="-cp %classpath com.example.beanoverriding.EmbeddedApplication" \
    -Dexec.classpathScope="test"

【问题讨论】:

也许主类值应该在双引号之间?参见例如***.com/a/9846103/412834。 exec 目标中确实没有 mainClass 参数。 mainClass 仅在 java 目标中可用。所以executable + args 似乎是正确的解决方案。 【参考方案1】:

根据文档,您确实应该设置 exec.mainClass 属性。但这在主班看来确实不是。

使用-X 选项 (mvn -X exec:java -Dexec.mainClass=com.example.beanoverriding.EmbeddedApplication -Dexec.classpathScope=test) 执行命令时,Maven 会显示有关配置的更多信息:

    <configuration>
      ...
      <classpathScope default-value="runtime">$exec.classpathScope</classpathScope>
      ...
      <mainClass>$start-class</mainClass>
      ...
    </configuration>

似乎主类是由start-class 属性设置的...所以似乎该属性在某些配置中被覆盖。确实如此。它在spring-boot-starter-parent pom 中。见https://github.com/spring-projects/spring-boot/blob/v2.1.0.RELEASE/spring-boot-project/spring-boot-starters/spring-boot-starter-parent/pom.xml

因此,使用您当前的配置,以下命令将完成这项工作:

mvn -X exec:java -Dstart-class=com.example.beanoverriding.EmbeddedApplication -Dexec.classpathScope=test

【讨论】:

【参考方案2】:

使用 classpathScope=test(参见 https://www.mojohaus.org/exec-maven-plugin/java-mojo.html#classpathScope)

【讨论】:

谢谢,但我已经用过了。 "-Dexec.classpathScope="test"" 我将重新格式化我的问题。

以上是关于在 Maven 中从测试范围运行 main:“目标 org.codehaus.mojo:exec-maven-plugin:1.6.0:java 的参数 'mainClass' 丢失或无效”的主要内容,如果未能解决你的问题,请参考以下文章

Maven依赖及范围

Maven 的依赖范围和传递

如何在 maven 的集成测试目标中运行单个测试

项目管理工具——Maven

maven依赖范围

转载:maven依赖范围