2009-02-20 5 views
47

난 그냥 Maven을 사용하기 시작했습니다. (정말 평가하고 있습니다.) 응용 프로그램과 모든 종속성이있는 디렉토리 (예 : lib)를위한 JAR 파일을 신속하게 생성 할 수 있어야합니다. 그 둘은 독립적 인 방식으로 운영됩니다. 적절한 목록을 사용하여 JAR 파일을 생성하는 것은 쉽지만 Maven에게 현재 프로젝트의 종속성을 배포 할 수있는 lib 디렉토리로 복사하는 방법을 모르겠습니다.Maven은 애플리케이션 배포에 도움이되는 프로젝트의 모든 종속 JAR을 수집 할 수 있습니까?

독립 실행 형 Java 응용 프로그램 용이므로이 아니며 Maven 리포지토리에 배포하는 데 관심이 없습니다. 이는 매우 사소하거나 적어도 쉽게 googleable입니다.

을 제외하고는을 제외하고는 종속 JAR 파일을 지정된 디렉토리에 복사합니다. 에 관계없이 내 $CLASSPATH의 "그냥 작동"해야 JAR 파일로 installLocation에서 myApp.jar를 실행 다음

$ mvn clean 
$ mvn package 
$ cp -r target/{lib,myApp.jar} installLocation 

: 이것은 내가 찾고 있어요 워크 플로우입니다.

시도하고 몇 가지 답변을 선점하려면

  • 내가 메인 클래스가 않습니다 세트를, 그리고 그것을 잘 작동합니다.
  • 또한 MANIFEST.MF에서 classpath를 설정했는데 제대로 작동합니다.
  • <classpathPrefix><classpathMavenRepositoryLayout>을 사용하여이 작업을 수행하는 방법을 알아 냈지만 컴퓨터에서만 사용했습니다. (통해 : <classpathPrefix>${settings.localRepository}</classpathPrefix>)

답변

73

조사하려는 내용은 Maven's dependency plugin입니다.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <configuration> 
     <outputDirectory> 
      ${project.build.directory} 
     </outputDirectory> 
    </configuration> 
</plugin> 

그런 다음 복사를 수행 복사 mvn clean dependency:copy-dependencies을 실행 pom.xml 파일에 다음과 유사한를 추가합니다. 이것을 assembly plugin과 결합하면 배포 용으로 자체 보관함에 모든 것을 패키지화 할 수 있습니다.

+0

추가 된이 이클립스 안에 내 pom.xml 파일에. 아무 일도 일어나지 않습니다 –

+0

이클립스 외부에서 maven을 다운로드하고/bin 폴더를 내 경로에 추가 한 다음'mvn dependency : copy-dependencies'를 실행했습니다. 예! 이제 작동합니다. Maven이해야 할 일을합니다! 이제 모든 * .jar 파일을 내 프로젝트에 복사하고 빌드 경로에 추가하는 것입니다. –

3

확실히 할 수 있습니다. shade plugin을 사용해야합니다.이 작업은 프로젝트에

 <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>1.3-SNAPSHOT</version> 
     <configuration> 
      <!-- put your configurations here --> 
     </configuration> 
     </plugin> 

을 추가하여 수행 할 수 있습니다.

6

는 또 다른 하나는 내가 그것에 대해 좋아하는 것은 그것이 내가 그늘 플러그인 이후에 대한 관심이 없었어요

7

(예 .BAT 파일 ANS로) 사용할 준비 형태로 응용 프로그램을 패키지이다 appassembler plugin
입니다 그것은 모든 항아리에서 모든 포장을 함께 구른다.

외부 라이브러리를 모두 포함하려면 위와 같이 종속성 플러그인을 사용할 수 있습니다.

이 예제는 "패키지"단계 전에 "대상/클래스"아래에 "lib"디렉토리를 만듭니다.

 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.6</version> 
    <executions> 
    <execution> 
     <id>copy-dependencies</id> 
     <phase>prepare-package</phase> 
     <goals> 
     <goal>copy-dependencies</goal> 
     </goals> 
     <configuration> 
     <outputDirectory>target/classes/lib</outputDirectory> 
     <overWriteIfNewer>true</overWriteIfNewer> 
     <excludeGroupIds> 
      junit,org.hamcrest,org.mockito,org.powermock,${project.groupId} 
     </excludeGroupIds> 
     </configuration> 
    </execution> 
    <execution> 
     <phase>generate-sources</phase> 
     <goals> 
     <goal>sources</goal> 
     </goals> 
    </execution> 
    </executions> 
    <configuration> 
    <verbose>true</verbose> 
    <detail>true</detail> 
    <outputDirectory>${project.build.directory}</outputDirectory> 
    </configuration> 
</plugin> 
2

maven의 의존성 플러그인, 특히 복사 의존성 목표를 살펴보십시오. 사용법 섹션에서는 원하는 것을 정확하게 수행하는 방법에 대해 설명합니다.명령 줄에서 그것을 할

은 수행 그들이 받는다는 계층이있는 디렉토리에 수집, 이 maven.repo.local 한 모든 항아리를 수집 할 수 있습니다 사용

$ mvn dependency:copy-dependencies -DoutputDirectory=OUTPUT_DIR 
-1

하지만 (.m2) .

mvn install -Dmaven.repo.local=./pick/some/folder 

그러면 (리눅스)를 수집 할 수 있습니다

mkdir flat-repo 
find ./pick/some/folder -type f -name "*.jar" | xargs -I'{}' cp '{}' flat-repo/