【问题标题】:Maven calling maven plugin goal from command lineMaven 从命令行调用 Maven 插件目标
【发布时间】:2016-02-19 22:41:35
【问题描述】:

你能告诉我如何使用以下配置在命令行中调用 maven surefire 吗?

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.19.1</version>
    <executions>
        <execution>
            <id>Custom tests</id>
            <phase>test</phase>
            <goals>
                <goal>test</goal>
            </goals>
            <configuration>
                <classesDirectory>target/generated/classes/normalCase/</classesDirectory>
                <reportsDirectory>target/generated/reports/normalCase/</reportsDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

当在我的 pom.xml 中这样定义 surefire 并且我执行阶段测试时,它会完全按照我希望的方式工作:它会尝试在位于目标/生成/类/normalCase 中的类上运行我的测试。

所以我尝试了这个命令行:

mvn surefire:test -DclassesDirectory="target/generated/classes/normalCase/"

但是不,它会一直检查默认值目录“target/classes”中的类。

那么我怎样才能在命令行中实现呢?

【问题讨论】:

    标签: java maven maven-surefire-plugin


    【解决方案1】:

    回顾一下你的情况。您在构建期间生成了多个版本的源代码,每个版本最终都位于target 下的单独文件夹中。对于这些版本中的每一个,您都希望使用maven-surefire-plugin 执行单元测试。让我们考虑基本目录是target/generated/classes。这意味着每个版本都有多个子目录target/generated/classes/version1target/generated/classes/version2...。

    一个可能的解决方案是使用iterator-maven-plugin 迭代all subdirectories of a folder 并从所有这些子目录调用maven-surefire-plugin。变量@item@ 保存当前项。

    <plugin>
        <groupId>com.soebes.maven.plugins</groupId>
        <artifactId>iterator-maven-plugin</artifactId>
        <version>0.3</version>
        <executions>
            <execution>
                <id>iterate</id>
                <phase>test</phase>
                <goals>
                    <goal>iterator</goal>
                </goals>
                <configuration>
                    <folder>target/generated/classes</folder>
                    <pluginExecutors>
                        <pluginExecutor>
                            <plugin>
                                <groupId>org.apache.maven.plugins</groupId>
                                <artifactId>maven-surefire-plugin</artifactId>
                                <version>2.19.1</version>
                            </plugin>
                            <goal>test</goal>
                            <configuration>
                                <classesDirectory>target/generated/classes/@item@</classesDirectory>
                                <reportsDirectory>target/generated/reports/@item@</reportsDirectory>
                            </configuration>
                        </pluginExecutor>
                    </pluginExecutors>
                </configuration>
            </execution>
        </executions>
    </plugin>
    

    【讨论】:

    • 看来循环执行得很好。 @item@ 捕获了良好的价值,因为报告是在正确的位置创建的。测试已运行,但他们似乎没有看到我的课程。我有错误:ClassATest ClassATest.testMethodA() 中的 NoClassDefFoundError。我不太明白,因为如果它知道我的一个测试包含方法“ClassATest.testMethodA()”,这意味着它已经能够读取 ClassATest.class,因此它完美地找到了它的定义......我不知道。还是非常感谢你,我会努力解决的。
    • @Vanesbush 嗯,这很奇怪。你能做一个简单的项目(例如在 GitHub 上),我可以用它来重现吗?
    猜你喜欢
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 2012-11-02
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多