Подтвердить что ты не робот

Проблемы с заказами класса Maven

Кто-нибудь знает, как установить определенный порядок пути к классам в Maven2, а не случайное упорядочение, которое я, кажется, испытываю на данный момент?

Существует ряд законных причин для этого:

  • Поставщик предоставил патч-патч, который содержит переопределяющие классы для ранее выпущенной банки, и поэтому патч-пат должен сначала отображаться в порядке сортировки по классам.
  • Два контейнера, найденные в пути к классам, обнаруженном путем пересечения зависимостей pom, содержат один и тот же класс в одном пакете с разными значениями. Например:

jboss jbossall-клиент 4.2.0.GA

       org.hibernate        зимовать        3.1

оба содержат: org.hibernate.util.ReflectHelper.class, но в версии jbossall-client отсутствует метод getFastClass.

Из googling я вижу, что это, пожалуй, точка раздора между энтузиастами maven и людьми, стоящими перед этой конкретной проблемой, но, безусловно, есть законные причины для упорядочения классов.

Любые советы любого, кто решил это конкретное затруднение, были бы очень благодарны!

Спасибо

4b9b3361

Ответ 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 в верхнюю часть зависимостей.

Надеюсь, настоящая версия этого кода выйдет в ближайшее время, но в то же время это исправление сработало для меня в моем проекте, и я надеюсь, что он может помочь и другим.