在测试阶段之前,Maven运行类:exec- Maven -plugin exec:java不执行类



我正在Jenkins机器上运行jUnit4测试,使用Maven构建。我的目标是在执行测试之前恢复测试数据库。

它看起来像execen -maven-plugin是走的路,但我不能让它运行。指针吗?虽然有很多例子,但mojo网站上的文档还是很单薄。

当前需要运行的类位于:

MyProject.src.test.java._tools.BuildTestEnvironment.java

My pom.xml包括:

<pluginManagement>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <plugin>            
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.3</version>
            <executions>
                <execution>
                    <id>build-test-environment</id>
                    <phase>generate-test-resources</phase>            
                    <goals>
                        <goal>java</goal>            
                    </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>src.test.java._tools.BuildTestEnvironment</mainClass>
            </configuration>
        </plugin>
    </plugins>
</pluginManagement>

在Jenkins中运行这个,什么都没有发生。如果我在本地运行,我得到

我尝试过的事情,没有成功:

  1. 在Jenkins中运行build:什么都没有发生。项目构建并开始运行测试,但我的类没有运行。

  2. 在本地运行构建:与Jenkins中的结果相同。

  3. 本地运行generate-test-resources: ClassNotFoundException。即:

    mvn exec:java generate-test-resources
    java.lang.ClassNotFoundException: src.test.java._tools。BuildTestEnvironment

  4. 将类编译成jar,并添加到我的pom中。

更新:

阅读@ppuskar的评论后,我试着移动我的buildxxx类。将其移动到src.main.java._tools。BuildTestEnvironment,我仍然得到一个类似的消息。这是我的构建日志,如果有帮助的话:

[DEBUG]调用:test.java._tools.BuildTestEnvironment.main()
[DEBUG] Plugin Dependencies将被排除。
[DEBUG]项目依赖项将被包含。
(调试)收集项目工件(joda-time: joda-time: jar: 2.3:编译、net.sf.jt400: jt400: jar: 6.7:编译junit: junit: jar: 4.11:编译、org.hamcrest: hamcrest-core: jar: 1.3:编译、com.fasterxml.jackson.core: jackson-core: jar: tripwire:编译、com.fasterxml.jackson.core: jackson-databind: jar: tripwire:编译、com.fasterxml.jackson.core: jackson-annotations: jar: tripwire:编译、org.hamcrest: hamcrest-all: jar: 1.3:编译、org.apache.logging.log4j: log4j api: jar: 2.0 rc1:编译、org.apache.logging.log4j: log4j-core: jar: 2.0 rc1:编译]
[DEBUG]收集项目类路径[C:workspaceVSP_UnitTesttargetclasses]
[DEBUG]添加到类路径:file:/C:/workspace/VSP_UnitTest/target/classes/
将项目依赖构件:joda-time添加到类路径
[DEBUG]添加项目依赖构件:jt400到类路径
[DEBUG]添加项目依赖构件:junit到类路径
添加项目依赖构件:hamcrest-core到类路径
将项目依赖构件:jackson-core添加到类路径
[DEBUG]添加项目依赖构件:jackson-databind到类路径
[DEBUG]添加项目依赖工件:jackson-annotations到类路径
[DEBUG]添加项目依赖构件:hamcrest-all到类路径
[DEBUG]添加项目依赖工件:log4j-api到类路径
[DEBUG]添加项目依赖构件:log4j-core到类路径
[调试]join on thread thread [test.java._tools.BuildTestEnvironment.main(),5,test.java._tools.BuildTestEnvironment]
(警告)java.lang.ClassNotFoundException: test.java._tools.BuildTestEnvironment
在java.net.URLClassLoader 1.美元运行(URLClassLoader.java: 366)
在java.net.URLClassLoader 1.美元运行(URLClassLoader.java: 355)
在java.security.AccessController。doPrivileged(本地方法)
java.net.URLClassLoader.findClass (URLClassLoader.java: 354)
java.lang.ClassLoader.loadClass (ClassLoader.java: 424)
java.lang.ClassLoader.loadClass (ClassLoader.java: 357)
在org.codehaus.mojo.exec.ExecJavaMojo 1.美元运行(ExecJavaMojo.java: 281)
java.lang.Thread.run (Thread.java: 724)
(信息 ] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
(信息 ] ------------------------------------------------------------------------
[信息]总用时:2.602秒
[INFO]完成时间:2014-05-15T14:38:50-05:00
[INFO]终端内存:12M/152M
(信息 ] ------------------------------------------------------------------------

我想把这个作为评论来回应Rebzie的评论,但是我没有这个声誉。

然后在主配置中有测试配置

Exec Maven插件支持更改类路径范围,这样您就可以使用测试范围的资源,而无需将它们移出测试包,如下所示:

<configuration>
    <mainClass>src.test.java._tools.BuildTestEnvironment</mainClass>
    <classpathScope>test</classpathScope>
</configuration>

这提供了一个干净的解决方案,您的测试设置代码保留在您的测试资源中。

尝试将BuildTestEnvironment.javasrc.test.java._tools移到src.main.java._tools也就是说,你的类将是src.main.java._tools.BuildTestEnvironment

我尝试运行您提供的场景。它像你说的那样失败了,但是我把Java文件从测试....移到mainit RAN:)

CHEERS:)

我正在尝试一些非常相似的东西,如果有人偶然发现,我只是把我的发现留在这里。我计划在测试中创建一个类,创建一些测试资源,然后运行实际的测试。

核心问题是maven阶段test-compilegenerate-test-resources之后运行。当执行这个命令时,测试分支中的代码还没有编译,因此exec-plugin没有找到编译后的类。

我的临时解决方案是将exec-plugin附加到阶段process-test-classes

最新更新