메이븐 아티팩트 및 groupId 이름 지정


291

현재 일부 프로젝트를 Ant에서 Maven으로 옮기는 중입니다. 컨 포머 스트로서 나는 groupId과 를 찾기 위해 잘 설정된 컨벤션을 사용하고 싶지만 artifactId자세한 컨벤션을 찾을 수는 없습니다 (일부는 있지만 궁금한 점은 다루지 않습니다).

이 프로젝트를 예로 들어 보면, 먼저 Java 패키지입니다. com.mycompany.teatimer

티 타이머 는 실제로 두 단어이지만 Java 패키지 명명 규칙은 밑줄이나 하이픈을 삽입하는 것을 금지하므로 모두 함께 작성합니다.

나는 groupId그것이 좋은 생각이라고 생각하기 때문에 패키지 ID 와 동일한 것을 선택했습니다 . 그렇습니까?

마지막으로, 나는를 선택해야 artifactId나는 현재에 갔다, teatimer. 그러나 다른 Maven 프로젝트를 볼 때 하이픈을 사용하여 단어를 artifactIds 로 나눕니다 tea-timer. 받는 사람 연결될 때 그것은 이상한 보입니까 groupId: com.mycompany.teatimer.tea-timer.

어떻게 하시겠습니까?

다른 예시:

패키지 이름 : com.mycompany.awesomeinhouseframework

groupId: com.mycompany.awesomeinhouseframework(?)

artifactId: awesome-inhouse-framework(?)


1
artifactId와 연결된 groupId는 어디에 있습니까? 나는 당신이 진술 한 규칙이 올바른 것이라고 생각합니다.
Abhinav Sarkar

2
실제로 밑줄은 Java 패키지 이름으로 허용됩니다. docs.oracle.com/javase/tutorial/java/package/namingpkgs.html
Adriaan Koster

답변:


146

당신의 컨벤션은 합리적입니다. Maven 저장소에서 프레임 워크를 검색하는 경우 그룹 디렉토리 awesome-inhouse-framework-x.y.jar에서 찾으십시오 com.mycompany.awesomeinhouseframework. 그리고 나는 당신의 협약에 따라 거기에서 찾을 것입니다.

두 가지 간단한 규칙이 나를 위해 작동합니다.

  • Java 패키지 이름과 관련된 모든 제약 조건 이있는 groupId의 역 도메인 패키지 (매우 고유하기 때문에)
  • 프로젝트 이름을 artifactId로 지정하십시오 (jar 이름과 친숙해야 함을 명심하십시오. 즉 파일 이름에 유효하지 않거나 이상하게 보일 수있는 문자를 포함하지 않아야 함)

좋아, 당신과 abhin4v가 정상이라고 생각한다면, 나는 그렇게 할 것입니다, 감사합니다!
Noarth

하이픈이 아닌 (awesomeinhouseframework)과 하이픈 (awesome-house-framework)의 철자가 약간 이상하다는 것을 알았습니다. groupid는 하이픈을 허용하지 않기 때문에 artifactid에 대해서도 하이픈이 아닌 철자를 사용합니다.
Michael Küller

3
"jar-name friendly"는 무슨 뜻입니까?
vikramvi

1
답변에서 명확 해졌습니다 :).
Henryk Konsek

241

괴상함은 매우 주관적이며 공식 권장 사항을 따르는 것이 좋습니다.

groupId, artifactId 및 버전에 대한 명명 규칙 안내서

  • groupId모든 프로젝트에서 프로젝트를 고유하게 식별하므로 명명 스키마를 적용해야합니다. 패키지 이름 규칙을 따라야합니다. 즉, 최소한 제어하는 ​​도메인 이름이어야하며 원하는 수의 하위 그룹을 만들 수 있습니다. 패키지 이름에 대한 추가 정보를보십시오 .

    예. org.apache.maven,org.apache.commons

    groupId의 단위를 결정하는 좋은 방법은 프로젝트 구조를 사용하는 것입니다. 즉, 현재 프로젝트가 다중 모듈 프로젝트 인 경우 부모의 groupId에 새 식별자를 추가해야합니다.

    예. org.apache.maven, org.apache.maven.plugins, org.apache.maven.reporting

  • artifactId버전이없는 jar의 이름입니다. 작성한 경우 소문자와 이상한 기호없이 원하는 이름을 선택할 수 있습니다. 제 3 자 항아리 인 경우 배포 된 항아리의 이름을 사용해야합니다.

    예. maven,commons-math

  • version배포하면 숫자와 점이있는 일반적인 버전 (1.0, 1.1, 1.0.1, ...)을 선택할 수 있습니다. 날짜는 일반적으로 SNAPSHOT (야간) 빌드와 연관되므로 사용하지 마십시오. 타사 아티팩트 인 경우 버전 번호를 그대로 사용하고 보이는대로 이상하게 사용해야합니다.

    예. 2.0, 2.0.1,1.3.1


4
나는이 규칙을 알고 있지만 실제로 아티팩트 이름을 구성하는 방법 (JAR 이름 지정 규칙은 없음)과 groupId와 동일 할 경우 어떻게해야합니까? 단일 POM을 보지 못했습니다. 그 경우는 어디입니까?
Noarth

@Noarth 1. 아티팩트 이름은 재량에 따라 다릅니다 (그러나 이름에 하이픈을 사용하는 것이 일반적입니다). 2. 당신은 존재하지 않는 절대적인 "규칙"을 찾고 있습니다 ( 멋진 사내 프레임 워크 가 여러 모듈로 구성되어 있다면 어떨까요?). 예를 들어 Spring, Maven, Hibernate 등의 아티팩트를 참조하십시오.
Pascal Thivent

아니요, 아니요 모듈이없고 간단한 프로젝트 만 있습니다. 실제로, 우리는 "멋진 사내 프레임 워크"라는 프로젝트를 가지고 있지 않습니다 :)
Noarth

11
무엇에 대해 package? groupId와의 차이점은 무엇입니까?
KonstantinK

1
artifactId에 숫자가 허용됩니까?
theonlygusti

100

기본 첫 Maven 애플리케이션 을 빌드 할 때 다음을 고려하십시오 .

groupId

  • com.companyname.project

artifactId

  • 계획

version

  • 0.0.1

고용 작업 com.my.company.project으로 groupId또는로 사용해야 com.client.company.project합니까?
Giacomo Alzetta

@GiacomoAlzetta 당신은 당신에게 더 잘 맞는 형식을 사용할 수 있습니다. 일부 예는 'com.companyName.hirePortal'또는 'org.compnayName.hirePortal'입니다.
Manwal

3
의 groupId는 com.companyname이 com.companyname.project되지해야한다
카밀 Nekanowicz

1

그러나 groupId, artifactId 및 version에 대한 명명 규칙에 대한 Guide 의 공식 정의에 동의하지 않습니다. 는 groupId가 사용자가 제어하는 ​​역 도메인 이름으로 시작해야한다고 제안합니다.

com이 프로젝트는 회사에 org속하고이 프로젝트는 사회 조직에 속함을 의미합니다. 이것들은 괜찮지 만 xxx.tv, xxx.uk, xxx.cn과 같은 이상한 도메인의 경우 "tv.", "cn."으로 시작하는 groupId의 이름을 지정하는 것은 의미가 없습니다. groupId는 기본 정보를 제공해야합니다. 도메인이 아닌 프로젝트의


2
이 규칙은 아티팩트를 중앙 maven 저장소에 배치하기 전에 도메인을 소유해야하기 때문에 maven을 사용하는 개발자를 방지합니다. 말도 안됩니다. 도메인을 소유하는 것은 해마다 꽤 많은 비용이들 수 있습니다.
Tommy.Tang

1
해당 도메인 이름에 대한 등록을 실제로 소유 필요없습니다 . 유일한 요구 사항은 Java 패키지 이름 인 그룹 ID가 배치시 다른 이름과 충돌하지 않아야한다는 것입니다. 이 규칙은 개발자가 Maven을 사용하는 것을 확실히 막지 는 않습니다 .
바질 부르 케

저장소 URL에서 패키지 이름을 파생시키는 것이 좋습니다. GitHub를 사용하는 경우 계정이 호출 myuser되고 리포지토리가 호출 된 myrepo다음 패키지 이름을 사용하십시오 com.github.myuser.myrepo. 그것은 무료이며 여전히 독특합니다.
fxnn

-14

완전히 고유 한 jar 파일을 얻으려면 다음을 고려하십시오.

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