2009-11-20 7 views
4

Maven을 사용하여 빌드하고 릴리스 한 아티팩트가 있습니다. 인공물의 원래 pom.xml은 일반적인 프로젝트 정보 (artifactId, 이름 등)와 종속성을 포함합니다. 괜찮아. 그러나 pom.xml에는 SCM URL, 개발자 이름 또는 학부모와 같은 개인 정보도 포함됩니다.출시시 Anonymize pom.xml

Maven에 pom.xml을 생성하도록 지시 할 수있는 방법이 있습니까? 예를 들어, 유물은 의존성과 같은 기술적 인 정보를 파괴하지 않으면 서 공개 될 수 있습니다.

SCM URL도 개발자 목록도 아니고 부모 -pom (DepMgmt 정의 및 기타 메타 데이터에만 사용됨)도 인공물 사용자와 관련이 없으므로 해제 된 pom.xml에서 제거 될 수 있습니다.

Archiva와 같은 저장소 관리자와 artefact의 jar 파일 내에 패키지 된 pom.xml은 해당 정보를 포함합니다. Maven이 모든 것을 복사하는 것 같습니다.

은 요약하면 :

내가 가진 :

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>org.example</groupId> 
    <artifactId>my-artifact</artifactId> 
    <scm> 
     <connection>scm:svn:http://buildmachine/org.example/my-artifact/trunk</connection> 
     <developerConnection>scm:svn:http://buildmachine/org.example/my-artifact/trunk</developerConnection> 
     <url>http://buildmachine/org.example/my-artifact/trunk</url> 
    </scm> 
    <dependencies> 
     <dependency> 
      ... 
     </dependency> 
    </dependencies> 

내가 원하는 :

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>org.example</groupId> 
    <artifactId>my-artifact</artifactId> 
    <dependencies> 
     <dependency> 
      ... 
     </dependency> 
    </dependencies> 
+0

릴리스에 따라 Maven Release Plugin을 사용하고 싶습니까? –

+0

예, maven-release-plugin입니다. 제거 : 잘, 그들은 개발 서버의 호스트 이름과 같은 개발 내부 정보를 포함합니다. 고객은 내 buildserver의 호스트 이름을 알 필요가 없습니다. OSS 프로젝트에서는 이것이 중요하지 않을 수 있지만 기업 환경에서는 이것이 "보안"문제입니다. (예 ... 알고 있습니다 ...) – mhaller

+0

또 다른 질문 : 고객이 유물 종속품으로 유물을 사용합니까 (이 경우 OMG, 그들은 archiva의 호스트 이름을 알고 있습니다 : D)? –

답변

3

귀하의 문제에 대한 완벽한 해결책을 모르겠지만 몇 가지 사항을 수행 할 수 있습니다. 이것은 해킹이지만 도움이 될 수 있습니다.
먼저 pom에서 개인 정보를 외부화하십시오 (scm, 개발자 이름 등). SCM 메타 데이터는 것이다 : 프로필에 배치 settings file

<scm> 
    <connection>${my.scm.connection}</connection> 
    <developerConnection>${my.scm.developerConnection}</developerConnection> 
    <url>${my.scm.url}</url> 
</scm> 

둘째, 이동 특성. 설정 파일에서 회사 개인 저장소를 "숨길"수도 있습니다. profiles/settings.xml 파일을 다른 동료와 공유해야하는 경우 mvn -gs path_to_global_settings을 실행하는 전역 설정 파일을 사용하거나 이러한 설정을 사용하여 일반적인 Maven 설치를 준비하십시오.
학부모의 부모님 섹션은 불행히도 손길이 닿지 않아야합니다.

+0

예, 확인 : http://stackoverflow.com/questions/3683543/maven-releaseprepare-overwrites-scm-properties-with-resolved- valuesues –

0

이에 대한 자신의 원형을 만들고 대중에 공개한다. 그런 다음 사용자는 아키타 입을 검색하고 아키타 입을 기반으로 자신의 프로젝트를 설정할 수 있습니다.

아키타 입은 아주 간단한 플러그인으로 프로젝트 프로토 타입 하나를 만들고 싶습니다.

가 원형을 기반으로 새 프로젝트를 만들려면, 하나는 다음과 같이, mvn archetype:generate 목표를 호출 할 필요가 :

mvn archetype:generate        \ 
    -DarchetypeGroupId=<archetype-groupId>    \ 
    -DarchetypeArtifactId=<archetype-artifactId>  \ 
    -DarchetypeVersion=<archetype-version>    \ 
    -DgroupId=<my.groupid>        \ 
    -DartifactId=<my-artifactId> 
+0

그건 내가 요구했던 것이 아니다. 나는 공개되고있는 인공물의 pom.xml을 청소 해달라고 요청했다. – mhaller

+0

자발적으로 설명하는 Maven 설명자 파일을 배포하지 않으려면이 파일을 이슈에서 제외 시키십시오. < addMavenDescriptor> false </addMavenDescriptor> 태그를 사용하십시오. 풍경을 볼 수있는 사람이 이슈를 재구성해야하거나 완전한 설명자 파일에 액세스해야하거나 외부의 다른 사람이 다른 환경에서 같은 프로젝트를 설정하려고하므로 누군가가이 건물을 만들어야합니다. 아키타 입을 통해 기술자 파일 집합을 만들거나 일반 아티팩트 만 필요로하는 최종 사용자가 있습니다. – Tom

+0

사실, 시나리오 3 : pom.xml (의존성, 프로젝트 정보 등)을 포함하여 인공물을 갖고 싶은 최종 사용자이지만 프로젝트를 다시 작성할 필요가 없으므로 아무 것도 없습니다. pom.xml에 포함 된 빌드 정보를 게시해야합니다. – mhaller

1

릴리스 플러그인이 내장되어 있지 않습니다이 지원, 내 지식. 두 가지 가능성이 마음에 와서 :

옵션 1 :

  • 이 항아리에서 치어를 포함하지 마십시오 - 당신이이 jar 목표로 '아카이브'매개 변수를 사용하여 제어 할 수 있습니다. <archive><addMavenDescriptor>false</addMavenDescriptor></archive>
  • 게시 된 POM에서 원하지 않는 요소를 제거하는 프로그램을 작성하십시오. 당신은 release : prepare와 release : perform 사이에서 이것을해야 할 것입니다. 이것은 생성 후 태그를 수정하기위한 SCM을 지원하거나 다른 태그/브랜치에서 수정을 한 다음 release하면 수행 할 수있는 경우에만 작동 할 것입니다 : perform from 그곳에.

제 생각에는 옵션 1이 좋다고 생각합니다.

옵션 2 :

  • 시도는 릴리스 플러그인에 preparationGoals 매개 변수를 활용합니다. pom 조작을 maven 액션으로 작성할 수 있다면, 일 수도 있고, 일 수도 있습니다.

나는 옵션 2가 더 어렵다고 생각합니다.

그 중 아무 것도 작동하지 않으면 release : stage와 같은 것을 사용해야하고 수동으로 살균을 수행해야하지만 여전히 병 내용에서 POM을 제외하고 싶을 것입니다.