簡體   English   中英

Maven在測試階段之前運行類:exec-maven-plugin exec:java不執行類

[英]Maven run class before test phase: exec-maven-plugin exec:java not executing class

我在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中。

更新:

在閱讀@ 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]添加到classpath:file:/ C:/ workspace / VSP_UnitTest / target / classes /
[DEBUG]添加項目依賴項工件:joda-time到classpath
[DEBUG]添加項目依賴項工件:jt400到classpath
[DEBUG]添加項目依賴項工件:junit到classpath
[DEBUG]添加項目依賴項工件:hamcrest-core到classpath
[DEBUG]添加項目依賴項工件:jackson-core到classpath
[DEBUG]添加項目依賴項工件:jackson-databind到classpath
[DEBUG]添加項目依賴項工件:jackson-annotations到classpath
[DEBUG]添加項目依賴項工件:hamcrest-all到classpath
[DEBUG]添加項目依賴項工件:log4j-api到classpath
[DEBUG]添加項目依賴項工件:log4j-core到classpath
[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)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at 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] ----------------------------------------------- -------------------------

我想留下這個評論來解決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文件從測試中移動到main ....它RAN :)

CHEERS :)

我正在嘗試一些非常相似的東西,如果有人偶然發現,我只是把我的發現留在這里。 我打算在測試中創建一個類來創建一些測試資源,然后運行實際的測試。

核心問題是maven階段test-compile generate-test-resources 之后運行。 測試分支中的代碼在執行時尚未編譯,因此exec-plugin沒有找到編譯的類。

我的臨時解決方案是將exec-plugin附加到階段process-test-classes

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM