2008-11-10 4 views
47

Maven 2를 사용하면 jar 종속성을 파일 이름으로 나열 할 수 있습니까?Maven의 종속성 jar 파일 목록

mvn dependency:build-classpath 

은 jar 파일을 나열 할 수 있지만 로컬 저장소에 위치에 대한 전체 경로가 포함됩니다. 필자가 필 요로하는 것은 본질적으로 파일 이름 (또는 복사 의존성 목표가 복사 한 파일 이름)의 목록 일뿐입니다.

그래서 내가 필요로하는 목록은 받는다는 속성으로 이상적

activation-1.1.jar,antlr-2.7.6.jar,aopalliance-1.0.jar etc... 

같은 것,하지만 난 그런 할 것입니다 생성 할 수 있습니다 빌드 클래스 경로로 파일을 것 같아요.

달성하기 위해 노력하고있는 것은 Bundle-ClassPath을 수동으로 유지 관리하는 MANIFEST.MF 파일에 OSGi 번들을 작성하는 것입니다. (질문에 대답하기 위해이 비트를 이해할 필요는 없습니다.) 쉽게 설명 할 수 있습니다. 병음의 MANIFEST.MF 파일에 매니페스트 헤더를 쓰는 방법에 대한 질문은 이 아닙니다. (쉽게 googleble입니다) . 내가 쓰고 싶은 데이터, 즉 위의 목록을 얻는 방법에 대해 묻고 있습니다.

+0

은 종속성 플러그인에 대한 패치를 제출하고 나는 그것을 적용 할 수 있습니다 다음 릴리스로. 빌드 클래스 경로는 원하는 것에 가장 가깝기 때문에 원하는 출력을 얻기 위해 옵션을 조정해야합니다. –

답변

5

Apache Felix 프로젝트를 보았습니까? 그것은 당신이 원하는 것을해야 bundle plugin을 포함하여 플러그인의 모든 엉망이있다.

또한 <manifestFile>과 함께 <addClasspath> 태그를 사용해 보셨습니까? 클래스 패스를 매니페스트에 병합하는 데 필요한 효과가 있어야합니다.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    ... 
    <configuration> 
    <archive> 
     <addClasspath>true</addClasspath> 
     <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile> 
    </archive> 
    </configuration> 
    ... 
</plugin> 
+0

아파치 펠릭스 (Apache Felix)에 대해 알고 있습니다.하지만 필자가 필요로하는 것은 아니며, 이것이 내가 수동으로하고있는 이유입니다. –

+0

addClasspath는 Class-Path 매니페스트 헤더에 jar의 목록을 추가합니다. 클래스 경로를 다른 헤더에 넣을 수 있음을 언급하는 maven-jar-plugin 문서는 표시되지 않습니다. 또한 Bundle-Classpath에는 항아리 목록 이상이 필요합니다. –

16

내가 알 수있는 한 정확하게 쉼표와 공백없이 출력 할 수 없습니다. 공백이나 ''(공백 문자열)을 pathSeparator 또는 fileSeparator으로 대체하면 명령 줄을 통해 pom.xml 파일을 통해 maven-dependency-plugin이나 CLI가 꺼집니다. 그래서, 당신은 타협의 무언가에 도달하도록 강요받을 수 있습니다. 당신은

 
    mvn dependency:build-classpath -Dmdep.pathSeparator=":" -Dmdep.prefix='' -Dmdep.fileSeparator=":" -Dmdep.outputFile=classpath 

그러나, 당신에게 대신 ',''::'로 구분 전체 목록을 공급받을 수 있습니다,하지만 작동합니다. 당신이 실행하는 경우 :

 
    mvn dependency:build-classpath -Dmdep.pathSeparator="@REPLACEWITHCOMMA" -Dmdep.prefix='' -Dmdep.fileSeparator="@" -Dmdep.outputFile=classpath 

은 라이프 사이클의 process-resources 단계에서 올바른 속성을 설정하여 나중에 generate-resources 필터 해당 자원이 첨부, 당신 단지를 얻을 수 있어야합니다 콤마.

당신은 옵션의 전체 목록을 볼 수 있습니다 내가 여기서 뭔가를 누락 될 수 있습니다 http://maven.apache.org/plugins/maven-dependency-plugin/build-classpath-mojo.html

+1

좋은 답변입니다! -Dmdep.pathSeparator = ','-Dmdep.prefix = '.'를 사용하는 경우 -Dmdep.fileSeparator = '/'쉼표로 구분 된 상대적 파일 이름 목록을 가져옵니다. la ./file1.jar,./file2.jar 그러면 필터가 필요 없습니다. – Eero

2

을하지만, 이미 복사 종속성을 사용했습니다으로 그냥 목록입니다 당신이 정말로 후 것 같은 소리 지정된 디렉토리에있는 파일 중.

개미는 쉘 스크립트처럼 문제없이이 작업을 수행 할 수 있습니다.

58

하여 Maven 프로젝트의 종속성 트리 생성이 명령을

$ mvn dependency:tree 

난 당신이 기존의 답변에 노치를 추가하려면

1

:-) 결과를 같은 것입니다 확신을, 현재 maven-dependency-plugin은 클래스 경로를 outputProperty 매개 변수가있는 속성에 저장할 수 있습니다.

0

다음은이 출력 텍스트를 많이 할 수있는 대형 프로젝트의 경우

$ mvn dependency:tree 

을 요구하고있는 명령입니다. 종속성 트리에 특정 종속성이 있는지 확인하려는 경우 전체 목록이 필요하지 않습니다. 여기

는 Windows에서 출력을 필터링하는 방법은 다음과 같습니다

$ mvn dependency:tree | findstr javax.persistence 

을 그리고 여기 당신이 리눅스에 그것을 할 수있는 방법은 다음과 같습니다

$ mvn dependency:tree | grep javax.persistence