代码之家  ›  专栏  ›  技术社区  ›  gabriel119435

如何在Eclipse上使用相同的库进行编译和运行?

  •  2
  • gabriel119435  · 技术社区  · 6 年前

    我有一个maven项目,作为java项目导入。当我运行它时

    Handling error: NestedServletException, Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: org.apache.commons.lang.time.DateUtils.addDays(Ljava/util/Date;I)Ljava/util/Date;
    

    使用 this answer 我有一句话:

    [Loaded org.apache.commons.lang.time.DateUtils from file:/C:/Users/user/.m2/repository/commons-lang/commons-lang/2.0/commons-lang-2.0.jar]
    

    但至少 pom.xml 它是:

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

    考虑到我现在有这个自由裁量权 Java Build Path :

    enter image description here

    enter image description here

    如何解决此问题?在哪里可以比较我的运行库和编译库?

    编辑

    这是 mvn dependency:tree -Dverbose -Dincludes=commons-lang :

        [INFO] com.companyName.gestao.projectName:projectName-webapp:war:1.0.0-SNAPSHOT
        [INFO] \- com.companyName.gestao.projectName:projectName-business:jar:1.0.0-SNAPSHOT:compile
        [INFO]    +- com.companyName.commons.utils:companyName-commons-utils:jar:1.14.5:compile
        [INFO]    |  \- softdes:softdes-all:jar:1.6.23:compile
        [INFO]    |     \- commons-lang:commons-lang:jar:2.6:compile (version managed from 2.0)
        [INFO]    \- net.sf.jasperreports:jasperreports:jar:companyName-6.4.0.4:compile
        [INFO]       \- org.codehaus.castor:castor-xml:jar:1.3.3:compile
        [INFO]          +- org.codehaus.castor:castor-core:jar:1.3.3:compile
        [INFO]          |  \- (commons-lang:commons-lang:jar:2.6:compile - version managed from 2.0; omitted for duplicate)
        [INFO]          \- (commons-lang:commons-lang:jar:2.6:compile - version managed from 2.0; omitted for duplicate)
    

    在运行相同的命令 business 子项目(与 webapp 项目):

    [INFO] com.companyName.gestao.projectName:projectName-business:jar:1.0.0-SNAPSHOT
    [INFO] +- com.companyName.commons.utils:companyName-commons-utils:jar:1.14.5:compile
    [INFO] |  \- softdes:softdes-all:jar:1.6.23:compile
    [INFO] |     \- commons-lang:commons-lang:jar:2.0:compile
    

    所以 网络应用 取决于 商业 这取决于 companyName-commons-utils 这取决于 softdes-all 这取决于 commons-lang 第二版。但是 网络应用 必须使用 朗格公地酒店 版本2.6。

    我可以通过在以下位置更改依赖项顺序来实现此目的: 波姆。xml ?

    第二次编辑

    加上 <exclusion> 朗格公地酒店 商业 依赖,我运行依赖树maven,如上所述。现在,除此之外 BUILD SUCCESS ,maven没有打印任何树,如下所示:

            PS C:\workspace\projectName-dev\webapp> mvn dependency:tree -Dverbose -Dincludes=commons-lang
        [INFO] Scanning for projects...
        [INFO]
        [INFO] ------------------------------------------------------------------------
        [INFO] Building Conciliador - webapp 1.0.0-SNAPSHOT
        [INFO] ------------------------------------------------------------------------
        [INFO]
        [INFO] --- maven-dependency-plugin:2.10:tree (default-cli) @ conciliador-webapp ---
        [WARNING] Using Maven 2 dependency tree to get verbose output, which may be inconsistent with actual Maven 3 resolution
        [INFO] ------------------------------------------------------------------------
        [INFO] BUILD SUCCESS
        [INFO] ------------------------------------------------------------------------
        [INFO] Total time: 8.629s
        [INFO] Finished at: Thu May 17 13:21:08 BRT 2018
        [INFO] Final Memory: 29M/494M
        [INFO] ------------------------------------------------------------------------
        PS C:\workspace\projectName-dev\webapp>
    

    我发现 朗格公地酒店 依赖是内在的 dependencyManagement 如上所述 here DateUtils 仍从2.0版本Jar加载。我们能做些什么?

    1 回复  |  直到 6 年前
        1
  •  0
  •   gabriel119435    6 年前

    正如@LuisMu±oz在评论中所述,我使用旧的依赖项为所有可能的LIB添加了排除项。即使有了这个Eclipse,也坚持使用它的旧版本。我去了project Properties>Java构建路径>订购和导出,并优先于我更新的依赖项版本2.6。在这之后,它起了作用。听起来pom定义根本不重要,如果Eclipse配置有最后一个单词。