Как использовать или злоупотреблять классификаторами артефактов в maven?

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

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

Спасибо

from: http://maven.apache.org/pom.html

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

и

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

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

Ответы

Ответ 1

Я думаю, что правильный вопрос будет 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.

Ответ 2

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

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

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

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

Ответ 3

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

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

Ответ 4

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

Здесь используется прецедент:

Я использую их в сочетании со свойствами в pom. У 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.

Ответ 5

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

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