【问题标题】:Maven build failsMaven 构建失败
【发布时间】:2016-07-11 16:26:05
【问题描述】:

我导入了以下包:

import org.apache.commons.lang.ArrayUtils;

因此我在我的 POM 中添加了这个依赖项:

<dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.4</version>
    </dependency>

然后我的 Maven 构建失败,这是我在 Jenkins 中的错误消息:

11:07:45 INFO: [INFO] 2 errors
11:07:45 INFO: [INFO] BUILD FAILURE
11:07:45 INFO: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project stripe: Compilation failure: Compilation failure:
11:07:45 INFO: [ERROR] /mnt/jenkinsSlaveWorkspace/xmakeProdSlave/workspace/somepath/util/MappingHelper.java:[7,32] package org.apache.commons.lang3 does not exist
11:07:45 INFO: [ERROR] /mnt/jenkinsSlaveWorkspace/xmakeProdSlave/workspace/somepath/gen/tmp/src/src/main/java/somepath/util/MappingHelper.java:[25,37] cannot find symbol
11:07:45 INFO: [ERROR] symbol:   variable ArrayUtils
11:07:45 INFO: [ERROR] location: class

我读到了一些我可能有错误的版本或由于下载的版本而冲突的版本,所以我尝试了 3.0、2.6 和最后的 2.4,但没有任何帮助。几年前我在 StackOverflow 上发现了一个问题,他们谈到在 Maven 中执行一些命令。关键是我在 Eclipse 中使用了一个 Maven 插件,所以我不能使用那里提出的建议,有人遇到同样的问题吗?

【问题讨论】:

标签: java maven


【解决方案1】:

如果您的导入语句与上面粘贴的完全一样,则使用此依赖项:

<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.6</version>
</dependency>

但是,如果您想使用commons-lang 的最新版本,则导入必须是:

import org.apache.commons.lang3.ArrayUtils;

最新的依赖是:

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

背景:从版本 3 开始,commons-lang 依赖于 Java 5(或更高版本)并破坏了向后兼容性。因此,该项目重命名了所有包,以便遗留代码不会停止工作,同时使开发人员能够并排使用添加的功能。同时,该项目决定使 maven 坐标适应约定。

在此处阅读更多信息:What's new in Commons Lang 3.0?

【讨论】:

    【解决方案2】:

    该工件似乎已移至不同的存储库 here。 maven 依赖项是:

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

    另外,如果您需要执行特定的目标,请在 eclipse 中右键单击您的项目,将鼠标悬停在“Run as”上,然后单击“Maven Build...”。在“目标”字段中,您可以输入您在旧帖子中看到的目标。您可以尝试“clean install -U”来删除旧的东西,安装新的依赖项和最后一个强制更新。

    【讨论】:

      【解决方案3】:

      显示的依赖关系对于显示的import 是正确的。当然,除非它被定义了两次。

      但是,编译器错误与另一个 import 相关,具体来自 package org.apache.commons.lang3。该特定导入需要不同的依赖definition

      带有&lt;artifactId&gt;commons-lang3&lt;/artifactId&gt; 的commons-lang 版本的API 略有不同——使用JDK 1.5 特性,例如泛型和可变参数——而Apache 开发人员renamed package&lt;artifactId&gt; 是为了不破坏现有的依赖旧 API 的代码。

      【讨论】:

        【解决方案4】:

        我认为您对 Maven 导入有点困惑。为什么你导入了两次相同的东西?

        依赖项的导入需要在括号中

        尝试导入这个:

        <dependencies>
            <dependency>
                <groupId>commons-lang</groupId>
                <artifactId>commons-lang</artifactId>
                <version>2.4</version>
            </dependency>
        </dependencies>
        

        编辑:并且您的 groupId 等于工件 id,这肯定是错误的!

        【讨论】:

        • Re "你的 groupId 等于工件 id,这肯定是错误的!" – 对于versions up to 2.6,它不是。
        猜你喜欢
        • 1970-01-01
        • 2010-11-26
        • 1970-01-01
        • 2021-07-02
        • 2014-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多