首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >maven依赖项升级后Jenkin构建失败

maven依赖项升级后Jenkin构建失败
EN

Stack Overflow用户
提问于 2019-07-26 10:18:10
回答 2查看 620关注 0票数 5

最近,我正在升级我的团队的一个项目的依赖项。更改后,项目在我的笔记本电脑上成功地在本地构建。但是,相同的代码更改给Jenkins带来了编译错误。

我遇到的错误与powermockito包中的class file for xxx.xxx.xxx. not found有关。附加一些相关代码以供参考。

所使用的透水pom版本:

代码语言:javascript
复制
... 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版本:

代码语言:javascript
复制
... 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 ...

短程序错误日志:

代码语言:javascript
复制
... 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依赖项中移除测试范围时,一切都像魅力一样工作。

代码语言:javascript
复制
    <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依赖树

代码语言:javascript
复制
... 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 ...

Maven命令是在Jenkins上执行的,示例下面的是从控制台日志中获取的:

代码语言:javascript
复制
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失败?。不幸的是,似乎没有什么对我有用。这里需要一些帮助。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2019-08-08 07:22:00

您的实验表明,依赖树不是问题。问题在于依赖的范围。测试范围只将依赖项添加到用于测试编译和测试执行的类路径中。

这里可能出错的是,您的测试类实际上是在编译阶段编译的,而不是测试编译阶段。您可以进行的测试是将范围保留为test,并尝试使用mvn compile构建项目,如果所有配置都正确,则不应该构建测试源。

除此之外,很难猜出您到底在做什么,如果没有看到完整的pom.xml,它可能会出错,但我希望这能给您一个起点。

票数 4
EN

Stack Overflow用户

发布于 2019-08-09 21:54:57

下面是关于删除test作用域时为什么编译代码的假设:

就范围而言,Maven文档建议如下:

编译 这是默认作用域,如果没有指定,则使用。编译依赖项在项目的所有类路径中都可用。此外,这些依赖项被传播到依赖项目。 测试 此范围表示正常使用应用程序不需要依赖项,并且仅在测试编译和执行阶段可用。此范围不是传递性的。

现在,这可能意味着用于范围classpath test编译的classpath可能与用于范围compileclasspath有所不同。

当您移除测试范围时,会发现mockito jar默认作用域是compile

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57217968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档