簡體   English   中英

在maven依賴項升級后,Jenkin構建失敗

[英]Jenkin build fails after maven dependencies upgrade

最近,我正在努力升級我的團隊項目之一的依賴關系。 更改后,項目在我的筆記本電腦上成功構建。 但是相同的代碼更改引發了Jenkins的編譯錯誤。

我遇到的錯誤與class file for xxx.xxx.xxx. not found class file for xxx.xxx.xxx. not found在powermockito包。 附上一些相關的代碼片段以供參考。

使用過去的pom版本:

... some lines above it ...   

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <!--dropwizard versions-->
    <dropwizard.version>1.3.5</dropwizard.version>
    <dropwizard.swagger.version>1.0.0-2-auth-SNAPSHOT</dropwizard.swagger.version>
    <dropwizard.bundle.version>1.3.5-1</dropwizard.bundle.version>
    <dropwizard.requestinfo>1.3.5-3</dropwizard.requestinfo>
    <dropwizard.rosey.data.provider.version>1.3.5-3</dropwizard.rosey.data.provider.version>
    <dropwizard.service.discovery>1.3.5-0</dropwizard.service.discovery>
    <dropwizard.rmq.actor.version>1.2.2-1</dropwizard.rmq.actor.version>
    <dropwizard.riemann.version>1.3.5-4</dropwizard.riemann.version>

    <!--hystrix versions-->
    <hystrix.dropwizard.version>0.4</hystrix.dropwizard.version>
    <hystrix.configurator.version>0.0.6</hystrix.configurator.version>
    <hystrix.version>1.5.3</hystrix.version>
    <hystrix.wrapper.version>1.0-SNAPSHOT</hystrix.wrapper.version>

    <!--internal clients-->
    <user-service-model.version>1.7.91</user-service-model.version>
    <kratos.version>0.8.2-SNAPSHOT</kratos.version>
    <rosey.dropwizard.config>1.14</rosey.dropwizard.config>

    <!--others-->
    <mysql.driver.version>5.1.38</mysql.driver.version>
    <okhttp3.version>3.4.1</okhttp3.version>
    <lombok.version>1.18.8</lombok.version>
    <junit.version>4.12</junit.version>
    <powemock.version>1.7.3</powemock.version>
    <h2.version>1.4.191</h2.version>
    <square.okhttp.version>3.4.1</square.okhttp.version>
    <rmq.version>4.1.0</rmq.version>
    <zookeeper.version>3.4.13</zookeeper.version>
    <curator.version>4.0.1</curator.version>
</properties>

... some lines below it ...

目前使用的pom版本:

... some lines above it ...

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <!--dropwizard versions-->
    <dropwizard.version>1.3.12</dropwizard.version>
    <dropwizard.swagger.version>1.3.7-1</dropwizard.swagger.version>
    <dropwizard.bundle.version>1.3.5-1</dropwizard.bundle.version>
    <dropwizard.requestinfo>1.3.5-8</dropwizard.requestinfo>
    <dropwizard.rosey.data.provider.version>1.3.5-6</dropwizard.rosey.data.provider.version>
    <dropwizard.service.discovery>1.3.12-3</dropwizard.service.discovery>
    <dropwizard.rmq.actor.version>1.3.12-1</dropwizard.rmq.actor.version>
    <dropwizard.db.sharding.bundle.version>1.3.12-3</dropwizard.db.sharding.bundle.version>
    <dropwizard.riemann.version>1.3.12-1</dropwizard.riemann.version>

    <!--hystrix versions-->
    <hystrix.dropwizard.version>0.4</hystrix.dropwizard.version>
    <hystrix.configurator.version>0.0.6</hystrix.configurator.version>
    <hystrix.version>1.5.3</hystrix.version>

    <!--internal clients-->
    <user-service-model.version>1.7.96-STAGE-SNAPSHOT</user-service-model.version>
    <kratos.version>0.9.6</kratos.version>
    <rosey.dropwizard.config>1.15</rosey.dropwizard.config>

    <!-- storage -->
    <aerospike.version>3.3.0</aerospike.version>
    <mock.aerospike.version>0.0.4</mock.aerospike.version>

    <!--others-->
    <okhttp3.version>3.4.1</okhttp3.version>
    <lombok.version>1.18.8</lombok.version>
    <junit.version>4.12</junit.version>
    <powemock.version>1.7.3</powemock.version>
    <guava.version>28.0-jre</guava.version>
    <h2.version>1.4.199</h2.version>
    <rmq.version>5.7.2</rmq.version>
    <zookeeper.version>3.4.13</zookeeper.version>
    <curator.version>4.2.0</curator.version>
    <sentinel.model.version>1.0-SNAPSHOT</sentinel.model.version>
</properties>

... some lines below it ...

短期錯誤日志:

... some code above it ...  

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /var/lib/jenkins/jobs/UserService_Develop/workspace/src/test/java/com/xxxxxxx/userservice/resources/MerchantResourceTest.java:[19,1] cannot access org.powermock.api.support.membermodification.MemberModifier
  class file for org.powermock.api.support.membermodification.MemberModifier not found
[ERROR] /var/lib/jenkins/jobs/UserService_Develop/workspace/src/test/java/com/xxxxxxx/userservice/resources/VPAResourceTest.java:[29,1] static import only from classes and interfaces
[ERROR] /var/lib/jenkins/jobs/UserService_Develop/workspace/src/test/java/com/xxxxxxx/userservice/resources/VPAResourceTest.java:[30,1] static import only from classes and interfaces
[ERROR] /var/lib/jenkins/jobs/UserService_Develop/workspace/src/test/java/com/xxxxxxx/userservice/services/PrimerServiceTest.java:[28,1] static import only from classes and interfaces
[ERROR] /var/lib/jenkins/jobs/UserService_Develop/workspace/src/test/java/com/xxxxxxx/userservice/services/PrimerServiceTest.java:[29,1] static import only from classes and interfaces
[ERROR] /var/lib/jenkins/jobs/UserService_Develop/workspace/src/test/java/com/xxxxxxx/userservice/resources/AddressResourceTest.java:[22,1] static import only from classes and interfaces
[ERROR] /var/lib/jenkins/jobs/UserService_Develop/workspace/src/test/java/com/xxxxxxx/userservice/resources/AddressResourceTest.java:[23,1] static import only from classes and interfaces
[ERROR] /var/lib/jenkins/jobs/UserService_Develop/workspace/src/test/java/com/xxxxxxx/userservice/services/WalletServiceTest.java:[27,1] static import only from classes and interfaces
[ERROR] /var/lib/jenkins/jobs/UserService_Develop/workspace/src/test/java/com/xxxxxxx/userservice/services/WalletServiceTest.java:[28,1] static import only from classes and interfaces
[ERROR] /var/lib/jenkins/jobs/UserService_Develop/workspace/src/test/java/com/xxxxxxx/userservice/resources/MerchantResourceTest.java:[24,25] cannot access org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner
  class file for org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner not found
[ERROR] /var/lib/jenkins/jobs/UserService_Develop/workspace/src/test/java/com/xxxxxxx/userservice/resources/VPAResourceTest.java:[37,25] incompatible types: java.lang.Class<org.powermock.modules.junit4.PowerMockRunner> cannot be converted to java.lang.Class<? extends org.junit.runner.Runner>
[ERROR] /var/lib/jenkins/jobs/UserService_Develop/workspace/src/test/java/com/xxxxxxx/userservice/resources/BaseResourceTest.java:[26,19] package org.mockito does not exist
[ERROR] /var/lib/jenkins/jobs/UserService_Develop/workspace/src/test/java/com/xxxxxxx/userservice/resources/BaseResourceTest.java:[30,26] package org.mockito does not exist
[ERROR] /var/lib/jenkins/jobs/UserService_Develop/workspace/src/test/java/com/xxxxxxx/userservice/resources/BaseResourceTest.java:[30,1] static import only from classes and interfaces

... some code below it ...

我做過的實驗 :當我從powermockito依賴項中刪除測試范圍時,一切都像魅力一樣。

    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-api-mockito</artifactId>
        <version>${powemock.version}</version>
        <scope>test</scope>          <- This line
    </dependency>
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-module-junit4</artifactId>
        <version>${powemock.version}</version>
        <scope>test</scope>          <- This line
    </dependency>

在下面粘貼mockito的maven依賴樹

... some line above it ...

[INFO] +- org.powermock:powermock-api-mockito:jar:1.7.3:test
[INFO] |  +- org.powermock:powermock-api-mockito-common:jar:1.7.3:test
[INFO] |  |  \- org.powermock:powermock-api-support:jar:1.7.3:test
[INFO] |  \- org.mockito:mockito-core:jar:1.10.19:test
[INFO] +- org.powermock:powermock-module-junit4:jar:1.7.3:test
[INFO] |  +- org.powermock:powermock-module-junit4-common:jar:1.7.3:test
[INFO] |  |  +- org.powermock:powermock-reflect:jar:1.7.3:test
[INFO] |  |  \- org.powermock:powermock-core:jar:1.7.3:test
[INFO] |  \- org.hamcrest:hamcrest-core:jar:1.3:test

... some lines below it ...

在Jenkins上執行的Maven命令, 下面的示例來自控制台日志:

Executing Maven:  -B -f /var/lib/jenkins/jobs/UserService_Develop/workspace/pom.xml -U clean package cobertura:cobertura docker:build docker:push -Pdocker -Dproject.version=1.8.23-SNAPSHOT -Dbuild.number=1501 -Dbuild.revision=9d8d00591c23b061b07e1a08c00ff024db8ba318 -Dmaven.test.failure.ignore=true -DskipTests -DargLine=-Xmx512m

理想情況下,它不應該發生。 我用谷歌搜索了幾天發現這個博客為什么你的測試可能會在本地傳遞但在Jenkins中失敗 不幸的是,似乎沒有什么對我有用。 這里需要一些幫助。 謝謝!

您的實驗表明依賴樹不是問題。 問題在於依賴的范圍。 測試范圍僅將依賴項添加到類路徑以進行測試編譯和測試執行。

這里可能出現的問題是您的測試類實際上是在編譯階段編譯的,而不是在測試編譯階段編譯的。 您可以執行的檢查是將示波器作為test並嘗試使用mvn compile構建項目,如果一切配置正確,則不應構建測試源。

除此之外,如果沒有看到完整的pom.xml,很難猜出你的確在做什么以及它可能出錯的地方,但我希望這給你一個起點。

以下是關於為什么在刪除test范圍時編譯代碼的假設:

在范圍方面, Maven文檔建議如下:

這是默認范圍,如果未指定,則使用此范圍。 編譯依賴項在項目的所有類路徑中都可用。 此外,這些依賴項將傳播到依賴項目。

測試

此范圍表示正常使用應用程序不需要依賴關系,並且僅可用於測試編譯和執行階段。 此范圍不具有傳遞性。

現在,這可能意味着classpath的范圍test編譯可能潛在地從不同的classpath的范圍compile

當您刪除測試范圍時,會發現mockito jar,因為默認范圍是compile

暫無
暫無

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

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