Как использовать или злоупотреблять классификаторами артефактов в Maven? - PullRequest
15 голосов
/ 07 ноября 2011

В настоящее время мы пытаемся портировать очень (очень) большой проект, созданный с помощью ant, на maven (и в то же время переходить на svn).В настоящее время изучаются все возможности для перестройки структуры проекта для наилучшего соответствия парадигме maven.

Теперь, чтобы быть более конкретным, я натолкнулся на классификаторы и хотел бы знать, как я мог бы использовать их в своих интересах, воздерживаясь от «анти-паттернов классификатора».

Спасибо

от: http://maven.apache.org/pom.html

классификатор: Вы можете иногда найти пятый элементпо координате, и это классификатор.Мы посетим классификатор позже, но пока достаточно знать, что проекты такого типа отображаются в виде groupId: artifactId: packaging: classifier: version.

и

Классификатор позволяет различать артефакты, которые были созданы из одного и того же POM, но различаются по своему содержанию.Это некоторая необязательная и произвольная строка, которая - если присутствует - добавляется к имени артефакта сразу после номера версии.В качестве мотивации для этого элемента рассмотрим, например, проект, который предлагает артефакт, нацеленный на JRE 1.5, но в то же время также и артефакт, который все еще поддерживает JRE 1.4.Первый артефакт может быть снабжен классификатором jdk15, а второй - jdk14, чтобы клиенты могли выбирать, какой из них использовать.

Другим распространенным вариантом использования классификаторов является необходимость присоединения вторичных артефактов к основному артефакту проекта.,Просматривая центральный репозиторий Maven, вы заметите, что источники классификатора и javadoc используются для развертывания исходного кода проекта и документов API вместе с упакованными файлами классов.

Ответы [ 5 ]

9 голосов
/ 31 декабря 2013

Я думаю, что правильный вопрос будет How to use or abuse attached artifacts maven? Поскольку по сути именно поэтому и введены классификаторы - чтобы вы могли публиковать прикрепленные артефакты.

Что ж, в проектах Maven часто используются прикрепленные артефакты, например, используя maven-javadoc-plugin или maven-source-plugin. maven-javadoc-plugin публикует прикрепленный артефакт, который содержит сгенерированную документацию с использованием классификатора javadoc, а maven-source-plugin публикует источники с использованием sources классификатора.

А как насчет явного использования прикрепленных артефактов? Я использую прикрепленные артефакты для публикации скриптов оболочки (start.sh и Co). Также неплохо публиковать сценарии SQL в прикрепленном артефакте с классификатором sql или чем-то в этом роде.

Как вы можете прикрепить произвольный артефакт к вашему классификатору? - это можно сделать с помощью build-helper-maven-plugin.

5 голосов
/ 07 ноября 2011

... Я хотел бы знать, как я мог бы использовать их в своих интересах ...

Не используйте их. Они необязательны и произвольны .

Если вы находитесь в процессе переноса проекта на maven, сделайте все просто и делайте только то, что необходимо (сначала), чтобы все работало так, как вы хотите. Затем, после того, как все заработает так, как вы хотите, вы можете изучить более продвинутые функции maven, чтобы делать классные вещи.

Этот ответ основан на том, что ваш вопрос звучит как "Эта функция звучит аккуратно, как я могу ее использовать, даже если она мне не нужна?" такой вопрос Если вам нужна эта функция, обновите свой вопрос, добавив дополнительную информацию о как вы думали об использовании функции классификатора, и мы все будем более информированы, чтобы помочь вам.

4 голосов
/ 07 ноября 2014

В отличие от ответа Джесси Веба, полезно узнать о классификаторах, чтобы вы могли использовать их и избежать необходимости рефакторинга кода в дополнение к переносу на maven. Мы прошли через тот же процесс год или два назад. Раньше у нас все было в одной кодовой базе и собиралось вместе с муравьем. При переходе на Maven мы также обнаружили необходимость разделения различных компонентов на собственные проекты Maven. Некоторые из этих проектов действительно были библиотеками, но имели некоторые веб-ресурсы (jsp, js, images и т. Д.). Конечным результатом было то, что мы создали прикрепленный артефакт (как упомянуто @Male) с веб-ресурсами, используя классификатор «веб-ресурсы» и тип «война» (для использования в качестве оверлея). Это было тогда, и до сих пор помогает лучше понять maven, лучшее решение для переноса старого связанного проекта. В конечном итоге мы хотим выделить эти веб-ресурсы, поскольку они не принадлежат этой библиотеке, но, по крайней мере, это можно сделать как отдельную задачу.

Как правило, вы хотите избежать прикрепления артефактов. Обычно это признак того, что для создания этого артефакта необходимо создать отдельный проект. Я предлагаю посмотреть на это в любое время, когда у вас возникает желание прикрепить артефакт с помощью отдельного классификатора.

2 голосов
/ 13 ноября 2012

Я использую классификаторы, чтобы определить вспомогательные артефакты для основного артефакта.

Например, у меня есть com.bar | foo-1.0.war и у меня есть некоторый связанный конфиг с именем com.bar | foo-1.0-properties.zip

1 голос
/ 27 января 2012

Вы можете использовать классификаторы, если у вас есть разные версии одного и того же артефакта, который вы хотите развернуть в своем хранилище.

Вот пример использования:

Я использую их в сочетании со свойствами в пом. POM имеет значения по умолчанию, которые могут быть переопределены через командную строку. При запуске без параметров используется значение свойства по умолчанию. Если я создаю версию артефакта с другими значениями свойств, я могу развернуть его в репозитории с помощью классификатора.

Например, команда:

mvn -DmyProperty=specialValue package install:install-file -Dfile=target/my-ear.ear -DpomFile=my-ear/pom.xml -Dclassifier=specialVersion

Создает версию ушного артефакта со специальными свойствами и развертывает артефакт в моем репо с помощью классификатора specialVersion.

Итак, в моем репо могут быть my-ear-1.0.0.ear и my-ear-1.0.0-specialVersion.ear.

...