У меня есть проект 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;
Используя этот ответ Я получил эту строку:
[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>
Учитывая, что у меня есть эти libs в Java Build Path
:
![enter image description here](https://i.stack.imgur.com/rf89j.png)
и
![enter image description here](https://i.stack.imgur.com/yuEF7.png)
Как я могу решить эту проблему?Где я могу быть уверен, что сравнивать мои run и compile libs?
EDIT
это вывод 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
?
ВТОРОЕ РЕДАКТИРОВАНИЕ
После добавления <exclusion>
к commons-lang
при business
зависимости я запускаю дерево зависимостей 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
, как указано здесь иDateUtils
по-прежнему загружается из версии 2.0 Jar.Что можно сделать?