Mavens 종속성 선언 분류 자 ​​속성의 목적은 무엇입니까?


81

나는 pom.xml 파일을 가지고 있으며 <artifactId>그 차이가 태그 에있는 것과 동일하게 참조되는 3 개의 종속성임을 알 수 있습니다.

<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> 

답변:


65

분류기는 동일한 POM에서 빌드되었지만 내용이 다른 아티팩트를 구별합니다. 존재하는 경우 버전 번호 바로 뒤에 아티팩트 이름에 추가되는 선택적 임의의 문자열입니다.

출처


1
문서에 따르면 '분류 자 소스와 javadoc은 패키지 된 클래스 파일과 함께 프로젝트 소스 코드와 API 문서를 배포하는 데 사용된다'는 것이 무슨 의미입니까? 그것이 내 pom.xml이 그것을 사용하는 이유라고 생각합니다. 패키지 클래스와 함께 API 문서 및 소스 코드를 배포해야하는 이유는 무엇입니까? 패키지 클래스 배포가 충분하지 않습니까?
pushya 2014 년

6
@pushya는 일반적으로 Maven central과 같은 공용 저장소에 아티팩트를 배포 할 때 Maven을 지원하는 IDE가 적절한 코드 완성 및 JavaDoc 팝업을 수행하고 디버깅 할 때 라이브러리 코드를 실행할 수 있도록 javadocs 및 소스를 포함합니다.
Ian Roberts

@IanRoberts 지금 의미가 있습니다. 즉, "SOURCE / JAVADOC"이있는 종속성을 제거 할 수 있으며 선택 사항이며 주로 코딩 할 때 개발자 친화적 인 목적을 제공합니까?
pushya 2014 년

1
@pushya 아마도 그렇습니다. 그것을 시도하고 무슨 일이 일어나는지보십시오.
Ian Roberts

15

classifier더 나은 유용성을 이해하는 데 도움이되는 예제에 의한 또 다른 실용적인 대답 .

두 가지 버전의 아티팩트가 필요하다고 가정하십시오. for openjpa및 for eclipselink-jar가 특별히 향상된 JPA 구현에 필요한 엔티티를 포함하기 때문입니다.

Maven 프로필에 정의 된 이러한 빌드에 대해 약간 다른 처리가있을 수 있으며 사용 된 프로필에는 property도 있습니다 <classifier />.

에서 다르게 분류 버전을 빌드하려면 pom(가) maven-jar-plugin다음 followingly 구성 할 것

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

둘 다 설치하면 다음과 같은 repo 파일이 생성됩니다.

org / example / data / 1.0.0 / data-1.0.0.pom
org / example / data / 1.0.0 / data-1.0.0-openjpa.jar
org / example / data / 1.0.0 / data-1.0. 0-eclipselink.jar

이제 classifier어느 하나를 사용하는 것이 중요 하므로 OpenJPA의 경우 예를 들면 다음과 같습니다.

<dependency>
   <groupId>org.example</groupId>
   <artifactId>data</artifactId>
   <version>1.0.0</version>       
   <classifier>openjpa</classifier>
</dependency>

EclipseLink의 경우 분류자를 다음과 같이 전환합니다.

<classifier>eclipselink</classifier>

이 구문에 대한 설명은 어디에서 찾을 수 있습니까? <classifier> [openjpa | eclipselink] </ classifier>
Alan Snyder

@AlanSnyder 실제로 작동하는 구문이 아닌 "게으른 코더 바로 가기"였습니다. 나는 그것을 더 명확하게하기 위해 그 부분을 편집했다. [openjpa|eclipselink]둘 중 하나를 선택하기위한 "선택자"일뿐입니다.
pirho

7

분류기
의 예이 요소에 대한 동기로 JRE 1.8을 대상으로하는 아티팩트를 제공하는 동시에 JRE 1.7을 계속 지원하는 아티팩트도 제공하는 프로젝트를 고려하십시오. 첫 번째 아티팩트에는 분류 자 ​​jdk18이 장착되고 두 번째 아티팩트에는 jdk14가 장착되어 클라이언트가 사용할 항목을 선택할 수 있습니다.

분류 자의 또 다른 일반적인 사용 사례는 프로젝트의 주요 아티팩트에 보조 아티팩트를 첨부해야한다는 것입니다. Maven 중앙 저장소를 탐색하면 분류 자 ​​소스 및 javadoc이 패키지 된 클래스 파일과 함께 프로젝트 소스 코드 및 API 문서를 배포하는 데 사용된다는 것을 알 수 있습니다.


3

동일한 POM에 속하지만 다르게 빌드되고 버전 뒤에 파일 이름에 추가되는 두 개의 아티팩트를 구별 할 수 있습니다.

예를 들어 저장소에 다른 아티팩트 (문서, 소스 ...)가있는 경우이를 참조하고 프로젝트에 종속성으로 추가 할 수 있습니다. 이 코드에서를 추가하여 <classifier>sources</classifier>저장소에서 sources.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> 

실제로 더 세분화 된 수준으로 종속성을 찾을 수 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.