programing

Maven의 종속성 jar 파일 목록

nasanasas 2020. 12. 4. 08:25
반응형

Maven의 종속성 jar 파일 목록


Maven 2를 사용하여 jar 종속성을 파일 이름으로 나열 할 수있는 방법이 있습니까?

mvn dependency:build-classpath 

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

그래서 내가 필요한 목록은 다음과 같을 것입니다.

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

이상적으로는 maven 속성이지만 build-classpath와 같은 파일이 생성 할 수 있다고 생각합니다.

내가 달성하려는 Bundle-ClassPath것은 OSGi 번들에 대해 수동으로 유지 관리되는 MANIFEST.MF 파일에를 쓰는 것 입니다. (질문에 답하기 위해이 부분을 이해할 필요는 없습니다.)

명확히하기 위해 : 문제는 jar의 MANIFEST.MF 파일에 매니페스트 헤더를 작성하는 방법에 관한 것이 아닙니다 (쉽게 googleble). 내가 쓰고 싶은 데이터, 즉 위에 표시된 목록을 얻는 방법에 대해 묻습니다.


이 명령은 Maven 프로젝트의 종속성 트리를 생성합니다.

$ mvn dependency:tree

나는 당신이 결과를 좋아할 것이라고 확신합니다 :-)


내가 말할 수있는 한, 쉼표와 공백없이 정확하게 출력을 얻을 수는 없습니다. 명령 줄과 pom.xml 파일을 통해 maven-dependency-plugin 또는 CLI를 사용하면 공백이나 ''(빈 문자열)을 pathSeparator또는 fileSeparator. 따라서 타협점에 도달해야 할 수도 있습니다. 당신은 할 수 있습니다

    mvn 종속성 : build-classpath -Dmdep.pathSeparator = ":"-Dmdep.prefix = ''-Dmdep.fileSeparator = ":"-Dmdep.outputFile = classpath

그러나 이렇게하면 전체 목록이 표시되고으로 구분되어 '::'표시 ','되지만 작동합니다. 실행하는 경우 :

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

받는이를 부착 generate-resources단계 이후의 정확한 특성 설정하여 자원 것을 필터 process-resources수명주기의 단계, 당신은 해야 그냥 쉼표를 얻을 수.

다음에서 전체 옵션 목록을 볼 수 있습니다. http://maven.apache.org/plugins/maven-dependency-plugin/build-classpath-mojo.html


요청하는 명령은 다음과 같습니다.

$ mvn dependency:tree

대규모 프로젝트의 경우 많은 텍스트를 출력 할 수 있습니다. 종속성 트리에 특정 종속성이 포함되어 있는지 확인하려는 것으로 가정하므로 전체 목록이 필요하지 않습니다.

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

$ mvn dependency:tree | findstr javax.persistence

Linux에서 수행하는 방법은 다음과 같습니다.

$ mvn dependency:tree | grep javax.persistence

종속성 트리필터링하는 Maven 방법 (Windows cmd, MacOS 및 Linux 셸에서 작동) :

$ mvn dependency:tree -Dincludes=javax.persistence:*

Maven 방식 (Windows PowerShell) :

$ mvn dependency:tree '-Dincludes=javax.persistence:*'

실제로 항아리의 최종 목록을 보려면 간단히

mvn dependency:list

세부적인 전이 트리와 충돌 해결 (상세 포함)을 보여주기 때문에 단순히 최종 목록을 얻는 데 과잉 인 dependency : tree보다 훨씬 더 간단합니다.


Apache Felix 프로젝트를 보셨습니까 ? 원하는 작업을 수행해야하는 번들 플러그인포함하여 플러그인 전체가 엉망입니다 .

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

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

여기에 뭔가 빠졌을 수 있지만 이미 복사 종속성을 사용했기 때문에 실제로 원하는 것은 지정된 디렉토리의 파일 목록 인 것처럼 들립니다.

Ant는 쉘 스크립트처럼 문제없이이를 수행 할 수 있습니다.


Maven은 매니페스트에서 클래스 경로를 자동으로 빌드 할 수 있습니다. http://maven.apache.org/guides/mini/guide-manifest.html

Maven 아카이브 플러그인의 구성입니다.


To add a notch to the existing answers, the current maven-dependency-plugin allows saving the classpath to a property with the outputProperty parameter.


Here is an awk script to pipe mvn dependency:list:

mvn dependency:list | awk -f mvnfmt.awk

You can | sort if you want to sort by name, or | tr '\n' ':' to format it to a classpath.

mvnfmt.awk is:

BEGIN {
    found = 0
}

/The following files have been resolved/ {
    found = 1
    next
}

/^\[INFO\] \$/ {
    print "Empty " found
    if (found != 0) found = 0
}

{
    if (!found) next
    n = split($0, a, " ")
    if (n != 2) {
        found = 0
        next
    }
    split(a[2], a, ":")
    print a[2] "-" a[4] "." a[3]
}   

참고URL : https://stackoverflow.com/questions/278596/list-of-dependency-jar-files-in-maven

반응형