2013-07-25 1 views
6

모든 도움말 또는 포인터가 실제로 많이 감사하겠습니다. 빌드 할 때 내 프로젝트의 모든 종속성 JAR 매니페스트 파일에 두 개의 필드를 주입해야합니다.Maven : 종속성 JAR의 매니페스트 파일 수정

종속성 병은 이미 빌드되어 있으며 저장소에서 가져옵니다. JAR의 Manifest 파일을 가져 와서 현재 pom 파일의 변수로 수정하는 방법을 찾아야합니다. 이 작업을 수행하는 방법을 알기 전에이 작업을 수행 한 사람이 있습니까? 미리 시간과 답변을 보내 주셔서 감사합니다.

+6

왜 그런 짓을하고 싶습니까? 그 인공물은 이미 만들어져 있습니다. 다시 말해서 불변의 것을 의미합니다. 당신은 maven-dependency-plugin과 maven-assembly-plugin의 조합을 통해 해당 아티팩트를 변경할 수 있지만 정말 큰 pom 파일을 생성합니다. 다른 한편으로는 Maven에 반대되는 이미 만들어진 인공물을 바꾸고 있습니다. – khmarbaise

+0

@ Wimpie 해결책을 찾았습니까? –

+0

'maven-assembly-plugin'은 매니페스트 설정을 지정할 수있게 해주지 만, 현재 [manifest] (http://jira.codehaus.org/browse/MASSEMBLY-450)는 기존의 매니페스트를 병합하지 못하게합니다. 추가 매니 페스트 항목이 있습니다. 나는 똑같은 일을 시도하고 실패했기 때문에 이것을 발견했다. – user944849

답변

0

이것은 Maven에서 할 수있는 것이 아닙니다. Maven의 관점에서, 특정 이름을 가진 모든 JAR은 같은 이름을 가진 다른 모든 JAR과 정확히 동일해야합니다.

예를 들어, 내 프로젝트가 abc-1.0.jar에 달려 있다고 가정 해 봅시다. Alphabet 팀이 1.0 버전에 대해 지정된 API를 사용하여 abc 라이브러리를 게시했기 때문에이 종속성을 지정합니다. 필자는 세계의 모든 저장소에서이 jar 파일을 가져올 수 있어야합니다. 내 인터넷이 꺼져 수동으로 내 로컬 저장소에 설치 될 때까지 내 이웃의 거리에서 파일을 가져올 수 있어야하며 정확히 동일한 파일이어야합니다. 동일한 파일이 아니라면, jar 파일 내부에있는 .class 파일이 오류없이 빌드를 성공시키는 데 필요한 라이브러리 코드를 포함한다는 보장을하지 못합니다.

당신이 인 경우 실제로이 작업을하도록 동기 부여를 받았다면 이론적으로 가능합니다.

  1. properties 섹션의 POM의 XML을 구문 분석하고 거기에서 개별 속성뿐만 아니라 종속성 항아리의 이름이 분류 자와 모든 종속 항아리를 들어
  2. 을 "구문 분석 : 당신이하는 스크립트를 작성할 수 있습니다 manifest_injected ", 로컬 저장소에서 찾으십시오. 존재하지 않는 경우, 종속성이있는 빈 Maven 프로젝트 (manifest_injected 분류 자 ​​없음)를 실행하고 mvn validate을 실행하여 종속성이 다운로드되어 로컬 저장소에 있는지 확인하십시오.
  3. 복제본 모든 JAR 파일을 열고, 클론을 열고, 이전에 구문 분석 한 속성으로 필요한 매니페스트 주입을 수행하고, 주입 된 jar를 Maven 저장소의 적절한 위치에 저장합니다.
  4. 스크립트에 전달 된 Maven 빌드를 논증.

행운을 빌어 요!

0

바이너리 저장소에서 쉽게 할 수 있습니다. 예를 들어 Artifactory에서는 a user plugin that will be triggered on any download을 쓸 수 있습니다. 이 청취자에서 자신 만의 코드를 작성할 수 있습니다. 항아리를 열고 매니페스트를 변경하고 원본 대신 변경된 항아리를 제공합니다 (그리고 다음 번에 캐시합니다).