如何在 Eclipse 中使用相同的库进行编译和 运行?
How to use same lib for compile and run at Eclipse?
我有一个导入为 java 项目的 Maven 项目。当我 运行 它时,我得到
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
:
有这个库
和
我该如何解决这个问题?我在哪里可以确定比较我的 运行 与编译库?
编辑
这是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
所以webapp
依赖于business
,依赖于companyName-commons-utils
,依赖于softdes-all
,依赖于commons-lang
版本2。但是webapp
必须使用 commons-lang
版本 2.6.
我可以通过更改 pom.xml
处的依赖顺序来完成此操作吗?
第二次编辑
在 business
依赖添加 <exclusion>
到 commons-lang
之后,我 运行 依赖树 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>
我发现 commons-lang
依赖项在 dependencyManagement
中,如 here 所述,并且 DateUtils
仍然从 2.0 版本 Jar 加载。可以做什么?
正如@LuisMuñoz 在评论中所述,我使用较旧的依赖项向所有可能的库添加了排除项。即使有了这个 Eclipse 也坚持使用它的旧版本。我去了项目属性 > Java 构建路径 > 订购和导出,并优先考虑我较新的依赖版本 2.6 的所有其他内容。在此之后它起作用了。听起来 pom 定义根本不重要,如果 Eclipse 配置有最终决定权。
我有一个导入为 java 项目的 Maven 项目。当我 运行 它时,我得到
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
:
和
我该如何解决这个问题?我在哪里可以确定比较我的 运行 与编译库?
编辑
这是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
所以webapp
依赖于business
,依赖于companyName-commons-utils
,依赖于softdes-all
,依赖于commons-lang
版本2。但是webapp
必须使用 commons-lang
版本 2.6.
我可以通过更改 pom.xml
处的依赖顺序来完成此操作吗?
第二次编辑
在 business
依赖添加 <exclusion>
到 commons-lang
之后,我 运行 依赖树 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>
我发现 commons-lang
依赖项在 dependencyManagement
中,如 here 所述,并且 DateUtils
仍然从 2.0 版本 Jar 加载。可以做什么?
正如@LuisMuñoz 在评论中所述,我使用较旧的依赖项向所有可能的库添加了排除项。即使有了这个 Eclipse 也坚持使用它的旧版本。我去了项目属性 > Java 构建路径 > 订购和导出,并优先考虑我较新的依赖版本 2.6 的所有其他内容。在此之后它起作用了。听起来 pom 定义根本不重要,如果 Eclipse 配置有最终决定权。