Как использовать одну и ту же библиотеку для компиляции и запуска на Eclipse? - PullRequest
0 голосов
/ 17 мая 2018

У меня есть проект 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

и

enter image description here

Как я могу решить эту проблему?Где я могу быть уверен, что сравнивать мои 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.Что можно сделать?

1 Ответ

0 голосов
/ 17 мая 2018

Как отметил @ LuisMuñoz в комментариях, я добавил исключения во все возможные библиотеки, используя более старые зависимости. Даже с этим Eclipse настаивал на использовании его старых версий. Я выбрал «Свойства проекта»> «Путь компоновки Java»> «Порядок и экспорт» и установил приоритеты над всеми остальными, моя новая версия зависимости 2.6. После этого это сработало. Похоже, определения pom вообще не имеют значения, если есть конфиги Eclipse с последним словом.

...