Я сталкиваюсь с проблемой с наличием, несколько классифицируют с тем же путем (т.е. то же имя, тот же пакет!!!). По некоторым причинам gwt-dev идет со своей собственной версией org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
и javax.xml.parsers.DocumentBuilderFactory
.
В то же время пружина также зависит от этих классов, но от другой банки. Я не знаю то, что должно быть, но быть похожим xalan
& xml-api
эти две зависимости, той пружиной зависит от (они, зависимость является дополнительной),
Забавная вещь состоит в том, что затмение может выполнить тот же код (это - модульный тест) без проблемы, но безошибочный не может. Таким образом, я предполагаю, что проблема происходит из-за способа, которым каждый бегун рассматривает приоритет каждой банки.
Теперь придите к вопросу: Как я могу установить своего АНГЛИЧАНИНА так, чтобы я мог уверенный это, когда когда-нибудь какой-либо код, работающий в моем приложении, затем класс от банки, будет выбран по классу из другой банки?
Спасибо.
Теперь переходим к вопросу: как мне настроить свой POM так, чтобы я мог быть уверен, что когда-либо любой код, запущенный внутри моего приложения, тогда класс из jar будет выбран над классом из другого jar?
Начиная с Maven 2.0 .9 Maven использует порядок зависимостей в POM для построения пути к классам, так что вы можете манипулировать им. Просто сначала объявите «правильную» банку, и ваше приложение выберет из нее класс.
Из примечаний к выпуску maven 2.0.9:
MNG-1412 / MNG-3111 вводит детерминированный порядок зависимостей в пути к классам. Раньше использовался естественный порядок наборов, что приводило к странным результатам. Теперь порядок сохраняется из вашего pom, а зависимости, добавленные по наследству, добавляются последними. В сборках с конфликтующими или повторяющимися зависимостями это может привести к изменению вывода. Короче говоря, если у вас есть странные проблемы с 2.0.9, посмотрите зависимости, чтобы увидеть, есть ли у вас где-то конфликты.
зависимости в проектах maven могут быть проблемой при устранении неполадок. то, что я обычно делаю, это ...
надеюсь, что это поможет!
Чтобы узнать, какой jar-файл вызывает у вас проблемы: запустите Maven с флагом -X.
Чтобы настроить POM так, чтобы исключить соответствующие банки:
<yourproject.deployment.excludes>
artifactId1,artifactId2,...
</yourproject.deployment.excludes>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${your.lib.for.example}</outputDirectory>
<overWriteSnapshots>true</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
<excludeTransitive>false</excludeTransitive>
<excludeArtifactIds>${yourproject.deployment.excludes}</excludeArtifactIds>
<includeScope>compile</includeScope>
</configuration>
</execution>
</executions>
</plugin>