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

Какова цель свойства классификатора зависимостей зависимостей Mavens?

У меня есть файл pom.xml, и я вижу, что они имеют 3 зависимости, на которые ссылаются те же <artifactId>, разница в тегах

<classifier>sources</classifier>
<classifier>javadoc</classifier>

Я удалил зависимости, которые имели SOURCES/JAVADOC, и сохранял только одну зависимость. Я тестировал свое приложение, и все прекрасно работает.

Какова цель использования этого тега классификатора? и почему мне нужно дважды дублировать зависимости для добавления тега <classifier> с помощью SOURCES/JAVADOC.

<dependency>
   <groupId>oauth.signpost</groupId>
   <artifactId>signpost-commonshttp4</artifactId>
   <version>1.2.1.2</version>
   <type>jar</type>
   <scope>compile</scope>
</dependency>
  <dependency>
   <groupId>oauth.signpost</groupId>
   <artifactId>signpost-commonshttp4</artifactId>
   <version>1.2.1.2</version>
   <type>jar</type>
      ***<classifier>javadoc</classifier>***
   <scope>compile</scope>
</dependency>
<dependency>
   <groupId>oauth.signpost</groupId>
   <artifactId>signpost-commonshttp4</artifactId>
   <version>1.2.1.2</version>
   <type>jar</type>
   ***<classifier>sources</classifier>***
   <scope>compile</scope>
</dependency> 
4b9b3361

Ответ 1

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

Источник

Ответ 2

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

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

Ответ 3

Еще один более прагматичный ответ на примере, чтобы лучше понять полезность classifier.

Предположим, что вам нужна две версии артефакта: для openjpa и для eclipselink - скажем, потому что в jar содержатся объекты, которые необходимы для конкретной реализации JPA.

У вас может быть некоторая разная обработка для этих сборок, определенных в профилях Maven, и используемые профили также имеют свойство <classifier />.

Чтобы построить разные классифицированные версии, в pom maven-jar-plugin будет затем настроен следующим образом

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-jar-plugin</artifactId>
   <version>3.0.2</version>
   <configuration>
       <classifier>${classifier}</classifier>
   </configuration>
</plugin>

Установка обоих приведет к тому, что файлы в репо будут выглядеть примерно так:

орг/пример/данные/1.0.0/данных 1.0.0.pom
орг/пример/данные/1.0.0/данных 1.0.0-openjpa.jar
org/example/data/1.0.0/data-1.0.0-eclipselink.jar

Теперь будет только вопрос classifier, который будет использоваться, поэтому

<dependency>
   <groupId>org.example</groupId>
   <artifactId>data</artifactId>
   <version>1.0.0</version>
   <classifier>[openjpa|eclipselink]</classifier>
</dependency>

Ответ 4

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

Например, если у вас есть другие артефакты в вашем репозитории (документы, источники...), вы можете ссылаться на них и добавлять их в свой проект как зависимость. в этом коде, добавив <classifier>sources</classifier>, мы получаем source.jar из репозитория.

    <dependency>
    <groupId>oauth.signpost</groupId>
    <artifactId>signpost-commonshttp4</artifactId>
    <version>1.2.1.2</version>
    <type>jar</type>
    ***<classifier>sources</classifier>***
    <scope>compile</scope>
    </dependency> 

Фактически Это позволяет вам находить ваши зависимости с дальнейшим уровнем детализации.

Ответ 5

В соответствии со следующим: https://blog.packagecloud.io/eng/2017/03/09/how-does-a-maven-repository-work/ в теге классификатора подразумевается "Вторичный артефакт", который будет отключен "транзитивной зависимостью"! Таким образом, тег классификатора не только меняет "Maven Coordinate" на $artifactId- $version- $classifier.jar!