【问题标题】:Cant find required class org/apache/commons/lang3/ArrayUtils while building on Jenkins在 Jenkins 上构建时找不到所需的类 org/apache/commons/lang3/ArrayUtils
【发布时间】:2022-06-14 23:11:09
【问题描述】:

操作系统 Java8 jdk1.8

在 Jenkins 上使用 mvn clean install -P TestExecutor 运行我的构建时,出现以下错误:

[ERROR] Failed to execute goal net.masterthought:maven-cucumber-reporting:5.7.0:generate (generate-cucumber-reports) on project testing: Execution generate-cucumber-reports of goal net.masterthought:maven-cucumber-reporting:5.7.0:generate failed: A required class was missing while executing net.masterthought:maven-cucumber-reporting:5.7.0:generate: org/apache/commons/lang3/ArrayUtils

在本地它正在运行并且很好。问题是:我在本地 m2 存储库中找不到 org/apache/commons/lang3/(我确实有 commons-lang3),它也没有出现在 mvn dependency:tree 列表中。

所以 Jenkins 似乎特别需要 lang3 jar? 所以我像这样在我的 POM 中添加最新版本的依赖项

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>lang3</artifactId>
    <version>3.4</version>
</dependency>

但是编译时出现以下错误

Could not find artifact org.apache.commons:lang3:pom:3.4 in central (https://repo.maven.apache.org/maven2)

所以我不确定我做错了什么

这是我的 POM

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.xxx</groupId>
    <artifactId>testing</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>

        <cucumber.version>7.3.3</cucumber.version>
        <selenium.version>4.1.4</selenium.version>
        <awaitility.version>4.2.0</awaitility.version>
        <assertj.version>3.22.0</assertj.version>
        <commonsmodel.version>5.3.3</commonsmodel.version>
        <maven.compiler.version>3.10.1</maven.compiler.version>
        <maven.surefire.version>3.0.0-M6</maven.surefire.version>
        <commons-lang3.version>3.4</commons-lang3.version>
        <junit-jupiter-engine.version>5.8.2</junit-jupiter-engine.version>
        <maven-cucumber-reporting.version>5.7.0</maven-cucumber-reporting.version>
    </properties>

    <dependencies>


        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>${cucumber.version}</version>
        </dependency>

        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-junit-platform-engine</artifactId>
            <version>${cucumber.version}</version>
        </dependency>

        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <version>1.8.2</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit-jupiter-engine.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>net.jodah</groupId>
            <artifactId>failsafe</artifactId>
            <version>2.4.4</version>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>${selenium.version}</version>
        </dependency>

        <dependency>
            <groupId>org.awaitility</groupId>
            <artifactId>awaitility</artifactId>
            <version>${awaitility.version}</version>
        </dependency>

        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <version>${assertj.version}</version>
        </dependency>

        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-picocontainer</artifactId>
            <version>${cucumber.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons-lang3.version}</version>
        </dependency>

        <dependency>
            <groupId>net.masterthought</groupId>
            <artifactId>maven-cucumber-reporting</artifactId>
            <version>${maven-cucumber-reporting.version}</version>
        </dependency>

    </dependencies>

    <profiles>
        <profile>
            <id>TestExecutor</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>${maven.compiler.version}</version>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>${maven.surefire.version}</version>
<!--                        <dependencies>-->
<!--                            <dependency>-->
<!--                                <groupId>org.junit.jupiter</groupId>-->
<!--                                <artifactId>junit-jupiter-engine</artifactId>-->
<!--                                <version>${junit-jupiter-engine.version}</version>-->
<!--                            </dependency>-->
<!--                        </dependencies>-->
                        <configuration>
                            <includes>
                                <includes>**/ExecutorTest.java</includes>
                            </includes>
                        </configuration>
                    </plugin>
                    <!--cucumber report plugin-->
                    <plugin>
                        <groupId>net.masterthought</groupId>
                        <artifactId>maven-cucumber-reporting</artifactId>
                        <version>${maven-cucumber-reporting.version}</version>
                        <executions>
                            <execution>
                                <id>generate-cucumber-reports</id>
                                <phase>test</phase>
                                <goals>
                                    <goal>generate</goal>
                                </goals>
                                <configuration>
                                    <projectName>Automation report</projectName>
                                    <outputDirectory>${project.build.directory}/cucumber-reports</outputDirectory>
                                    <inputDirectory>${project.build.directory}/</inputDirectory>
                                    <jsonFiles>
                                        <param>**/*.json</param>
                                    </jsonFiles>
                                    <checkBuildResult>false</checkBuildResult>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>


</project>

编辑: 完整的错误日志是这样的

[ERROR] -----------------------------------------------------
[ERROR] realm =    plugin>net.masterthought:maven-cucumber-reporting:5.7.0
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
[ERROR] urls[0] = file:/appl/xxx/maven/repo/net/masterthought/maven-cucumber-reporting/5.7.0/maven-cucumber-reporting-5.7.0.jar
[ERROR] urls[1] = file:/appl/xxx/maven/repo/net/masterthought/cucumber-reporting/5.7.0/cucumber-reporting-5.7.0.jar
[ERROR] urls[2] = file:/appl/xxx/maven/repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar
[ERROR] Number of foreign imports: 1
[ERROR] import: Entry[import  from realm ClassRealm[maven.api, parent: null]]
[ERROR] 
[ERROR] -----------------------------------------------------: org.apache.commons.lang3.ArrayUtils
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[JENKINS] Archiving /appl/xxx/jenkins/workspace/Customer_Portal/web-full-suite/pom.xml to com.xxx/testing/1.0-SNAPSHOT/testing-1.0-SNAPSHOT.pom
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginContainerException```

【问题讨论】:

  • This 是最新的 Lang 3。跳过3.4(它有漏洞)
  • 嗨 @g00se 我在我的 pom.xml 中设置了最新的 commons-lang3 依赖项。问题是 lang3,而不是 commons-lang3
  • 您能分享一下您使用的是哪个 Maven 版本吗?还有您使用的是哪个操作系统以及您使用的是哪个 JDK?您还可以发布更多错误输出...
  • JAVA8 jdk 1.8 上面贴出了完整的错误

标签: java maven compilation


【解决方案1】:

如果你像这样添加依赖:

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version> 
</dependency>

有效吗? artifactid 应该是 commons-lang3。 Jenkins 只是运行 maven 构建并下载所需的内容。

【讨论】:

  • 嗨 @Dan Chirita 正如你在我附加的 pom 中看到的那样,我的依赖项是这样添加的,但仅限于较新的版本。它抱怨 lang3,而不是 commons-lang3
  • 好的,所以,如前所述,artifactId 没有正确写入:它应该是commons-lang3,而不是lang3,如果你想要版本 3.12.0,你的依赖应该看起来像这个:&lt;dependency&gt; &lt;groupId&gt;org.apache.commons&lt;/groupId&gt; &lt;artifactId&gt;commons-lang3&lt;/artifactId&gt; &lt;version&gt;${commons-lang3.version}&lt;/version&gt; &lt;/dependency&gt;
  • 就如我的 pom 中所说的那样?
  • 您可以将 pom 中的依赖项替换为我上面评论中的依赖项。那么,你应该摆脱这个问题
  • 感谢您的帮助,但实际上我的依赖项已按您说的设置...我将再次粘贴到这里:&lt;commons-lang3.version&gt;3.12.0&lt;/commons-lang3.version&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.commons&lt;/groupId&gt; &lt;artifactId&gt;commons-lang3&lt;/artifactId&gt; &lt;version&gt;${commons-lang3.version}&lt;/version&gt; &lt;/dependency&gt; 这是使用上面提到的 3.12.0 .对于您的 og 评论,我也尝试了 3.4 但同样的错误
【解决方案2】:

您在 artifactId 中缺少公用项,请尝试使用以下方法:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.4</version>
</dependency>

【讨论】:

  • 嗨@Rishi 我已经在我的pom 中设置了最新的commons-lang3 依赖项(见上文)。问题是我认为是 lang3,而不是 commons-lang3
【解决方案3】:

artifactId 在您的依赖项中有错误。如下图所示

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.4</version>
</dependency>

参考这里:https://mvnrepository.com/artifact/org.apache.commons/commons-lang3/3.4

【讨论】:

  • 嗨 @Nitika 我在我的 pom 中已经设置了最新的 commons-lang3 依赖项(见上文)。我使用的是最新版本,而不是 3.4。问题是我认为是 lang3,而不是 commons-lang3
  • @Thomarkey 但如果您检查mvnrepository.com,则不存在任何作为 lang3 的 artifactId,其中 groupId 为 org.apache.commons。所以如果你添加你的依赖,它会给你错误 - 找不到工件。
  • @Thomarkey 删除 lang3 依赖,你已经添加了 commons-lang3 依赖,然后构建项目?
  • 正如错误所述,它没有找到 org.apache.commons:lang3 工件。这与org.apache.commons-lang3 不一样吗?
  • @Thomarkey: 是的
猜你喜欢
  • 2021-05-20
  • 2016-05-17
  • 2018-04-03
  • 2018-05-02
  • 1970-01-01
  • 2018-04-04
  • 2018-10-17
  • 1970-01-01
  • 2013-12-07
相关资源
最近更新 更多