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

时间:2014-05-14 16:07:28

标签: java maven jenkins exec-maven-plugin

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

看起来像exec-maven-plugin是要走的路,但是我无法让它运行起来。有什么指针吗?虽然有很多例子,但mojo网站上的文档非常简洁。

我目前需要参加的课程是:

  

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

我的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中运行构建:没有任何事情发生。该项目构建并开始运行测试,但我的课程没有运行。

  2. 在本地运行构建:与Jenkins中的结果相同。这并不奇怪。

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

      

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

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

  5. 更新

    在阅读@ ppuskar的评论之后,我尝试了一下我的buildxxx类。将它移动到src.main.java._tools.BuildTestEnvironment后,我仍然收到类似的消息。这是我的构建日志,如果有帮助:

      

    [DEBUG]调用:test.java._tools.BuildTestEnvironment.main()
      [DEBUG]将排除插件依赖关系   [DEBUG]项目依赖性将包括在内   [DEBUG]收集的项目工件[joda-time:joda-time:jar:2.3:compile,net.sf.jt400:jt400:jar:6.7:compile,junit:junit:jar:4.11:compile,org.hamcrest:hamcrest -core:jar:1.3:compile,com.fasterxml.jackson.core:jackson-core:jar:2.3.0:compile,com.fasterxml.jackson.core:jackson-databind:jar:2.3.0:compile,com .fasterxml.jackson.core:jackson-annotations:jar:2.3.0:compile,org.hamcrest:hamcrest-all:jar:1.3:compile,org.apache.logging.log4j:log4j-api:jar:2.0-rc1 :compile,org.apache.logging.log4j:log4j-core:jar:2.0-rc1:compile]
      [DEBUG]收集的项目类路径[C:\ workspace \ VSP_UnitTest \ target \ classes]
      [DEBUG]添加到类路径:file:/ C:/ workspace / VSP_UnitTest / target / classes /
      [DEBUG]添加项目依赖项工件:joda-time到类路径
      [DEBUG]添加项目依赖项工件:jt400到类路径
      [DEBUG]添加项目依赖项工件:junit到类路径
      [DEBUG]添加项目依赖项工件:hamcrest-core到类路径
      [DEBUG]添加项目依赖项工件:jackson-core到类路径
      [DEBUG]添加项目依赖项工件:jackson-databind到类路径
      [DEBUG]添加项目依赖项工件:jackson-annotations到类路径
      [DEBUG]添加项目依赖项工件:hamcrest-all到类路径
      [DEBUG]添加项目依赖项工件:log4j-api到类路径
      [DEBUG]添加项目依赖项工件:log4j-core到类路径
      [DEBUG]加入线程Thread [test.java._tools.BuildTestEnvironment.main(),5,test.java._tools.BuildTestEnvironment]
      [警告]   java.lang.ClassNotFoundException:test.java._tools.BuildTestEnvironment
      在java.net.URLClassLoader $ 1.run(URLClassLoader.java:366)
      在java.net.URLClassLoader $ 1.run(URLClassLoader.java:355)
      at java.security.AccessController.doPrivileged(Native Method)
      在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.run(ExecJavaMojo.java:281)
      在java.lang.Thread.run(Thread.java:724)
      [INFO] ----------------------------------------------- -------------------------
      [INFO]建立失败
      [INFO] ----------------------------------------------- -------------------------
      [INFO]总时间:2.602秒   [INFO]完成时间:2014-05-15T14:38:50-05:00
      [INFO]最终记忆:12M / 152M
      [INFO] ----------------------------------------------- -------------------------

3 个答案:

答案 0 :(得分:8)

我想留下这个评论来解决Rebzie的评论,但我没有声誉。

  

但是您在主配置中有测试配置

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

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

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

答案 1 :(得分:4)

尝试将BuildTestEnvironment.javasrc.test.java._tools移至src.main.java._tools 即您的课程将为src.main.java._tools.BuildTestEnvironment

我尝试运行您提供的方案。它像你说的那样失败,但是我将java文件从test中移动到main ....它RAN:)

CHEERS:)

答案 2 :(得分:1)

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

核心问题是maven阶段test-compilegenerate-test-resources之后运行。测试分支中的代码在执行时尚未编译,因此exec-plugin找不到编译的类。

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