Проблемы с заказами класса Maven
Кто-нибудь знает, как установить определенный порядок пути к классам в Maven2, а не случайное упорядочение, которое я, кажется, испытываю на данный момент?
Существует ряд законных причин для этого:
- Поставщик предоставил патч-патч, который содержит переопределяющие классы для ранее выпущенной банки, и поэтому патч-пат должен сначала отображаться в порядке сортировки по классам.
- Два контейнера, найденные в пути к классам, обнаруженном путем пересечения зависимостей pom, содержат один и тот же класс в одном пакете с разными значениями. Например:
jboss jbossall-клиент 4.2.0.GA
org.hibernate зимовать 3.1
оба содержат:
org.hibernate.util.ReflectHelper.class, но в версии jbossall-client отсутствует метод getFastClass.
Из googling я вижу, что это, пожалуй, точка раздора между энтузиастами maven и людьми, стоящими перед этой конкретной проблемой, но, безусловно, есть законные причины для упорядочения классов.
Любые советы любого, кто решил это конкретное затруднение, были бы очень благодарны!
Спасибо
Ответы
Ответ 1
Начиная с версии 2.0.9, maven использует порядок pom для пути к классам, поэтому теперь вы можете манипулировать им. Мы в основном подавляем переходные зависимости к внешним библиотекам, которые мы также включаем напрямую.
Из примечаний к выпуску maven 2.0.9:
MNG-1412/MNG-3111 ввел детерминированное упорядочение зависимостей от пути к классам. Раньше использовалось естественное упорядочение, что приводило к нечетным результатам. Теперь заказ сохраняется из вашего pom, а зависимости добавляются добавлением, добавленным последним. В сборках с конфликтующими или дублирующимися зависимостями это может привести к изменению вывода. Короче говоря, если у вас есть странные проблемы с 2.0.9, посмотрите на зависимости, чтобы увидеть, есть ли у вас конфликты где-то.
Ответ 2
Maven 2.0.9 добавляет правильный порядок, поэтому вам абсолютно необходимо, чтобы эта версия или выше работала ниже.
Во-вторых, вам нужен обновленный плагин. Ребята из Maven работают над исправлением, его в их джире исправить, но это то, что мне срочно нужно. Так что пока я исправил это сам, и вы можете вытащить Измененный исходный код плагина из github.
Изменить: см. http://jira.codehaus.org/browse/MECLIPSE-388
Есть два способа установить его: либо потяните мой модифицированный код, либо установите его, либо загрузите предварительно собранную банку и просто добавьте ее.
Построение плагина
Запустите maven install
из выпадающего каталога плагина и добавьте следующее в раздел ваших плагинов ваших проектов pom:
<build>
</plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.8-cpfix</version>
</plugin>
</plugins>
</build>
Загрузите банку
В качестве альтернативы, если вы не хотите загружать и компилировать себя, вы можете просто получить файл jar и установить его самостоятельно.
После запуска файла
mvn install:install-file -Dfile=<path-to-file> -DgroupId=org.apache.maven.plugins \
-DartifactId=maven-eclipse-plugin -Dversion=2.8-cpfix -Dpackaging=jar
Независимо от того, как вы установили его сейчас, когда вы запустите mvn eclipse:eclipse
, он подберет модифицированный код и закажет зависимости на основе заказа, определенного вами в файле pom, без алфавитного порядка. Он также помещает контейнер JRE в верхнюю часть зависимостей.
Надеюсь, настоящая версия этого кода выйдет в ближайшее время, но в то же время это исправление сработало для меня в моем проекте, и я надеюсь, что он может помочь и другим.