모든 maven 의존성을 저장소에없는 디렉토리로 다운로드 하시겠습니까?


127

나는 maven에만 바이너리 형식으로 배포 된 라이브러리를 사용해야하기 때문에 프로젝트를 maven으로 변환하기 시작했지만 너무 오랫동안 벽에 머리를 부딪친 후 나 자신을 아프게하고 사용하기로 결정했습니다. 개미. 항아리와 모든 전이 종속성을 선택한 디렉토리에 다운로드하여 정상적으로 즐기면서 행복한 개발자로 다시 SCM에 체크인 할 수 있기를 원합니다.
그것을 쉽게하는 방법에 대한 아이디어가 있습니까?


2
Ivy 사용을 고려하고 신뢰할 수있는 Ant를 사용하여 필요한 전이 종속성 관리를 받으십시오. 또는 총알을 물고 Maven 디렉토리 구조를 사용하십시오.
Dave Newton

아이비 를 사용해 보셨습니까 ?
Tomasz Nurkiewicz

5
아니요,하지만이 시점에서 모든 인내심을 전환하는 데 보냈습니다. 아마 다음 번에. 코딩으로 돌아가고 싶습니다. maven으로 할 수 있습니까?
chubbsondubs

답변:


260

받는다는 종속성 플러그인은 잠재적으로 문제를 해결할 수 있습니다.

pom모든 프로젝트 종속성이 지정된 을 가지고 있으면 실행하기 만하면됩니다.

mvn dependency:copy-dependencies

target/dependencies전이를 포함하여 모든 종속성으로 채워진 폴더를 찾을 수 있습니다.

아래에서 Gustavo의 답변 추가 : 종속성 소스 를 다운로드하려면 다음을 사용할 수 있습니다

mvn dependency:copy-dependencies -Dclassifier=sources

( Apache Maven Dependency Plugin doc을 통해 ).


1
Thx @Raghuram, 나는 이것을 오랫동안 찾고 있습니다.
eskalera

그러나 모든 종속성을 로컬 리포지토리에 복사하려면 어떻게해야합니까? 이것이 사용되어야합니까? 로컬 리포지토리에 이미있을 경우 왜 복사합니까? 어쨌든 현지입니다.
ses

1
@ses 표준 maven 빌드 (예 : 컴파일, 테스트, 패키지, 설치 등, 유효성 검사에 대한 확신이 없음)는 기본적으로 모든 종속성을 로컬 리포지토리에 이미 복사합니다. 이것은 아닙니다. 대신 어떤 이유로 든 앱의 종속성이 필요한 상황을위한 것입니다. 중복 API 정의에 대해 종속 라이브러리를 검사하기 위해 지금 사용하고 있습니다 (예 : 일부 라이브러리에는 동일한 API의 다른 버전과 충돌 할 수있는 Javax API가 포함되어 있음). 배포 또는 무엇이든.
Spanky Quigman

1
명확하고 간결하며 유용한 답변을 얻으려면 +1 방금 OP와 동일한 Maven 댄스를 겪고 JAR 파일 종속성을 검색하려고했습니다. 감사! +10 가능
Brandon

@Raghuram 기술적으로 는 "대상 / 종속성"의 모든 (해결 된) 아티팩트 로 끝납니다 . 또한 종속성의 "groupId"좌표가 무시되므로 이름 충돌의 잠재적 인 문제가 있습니다. 즉, "dependency : copy-dependencies"는 레이아웃 구조를 유지하지 않습니다.
whaefelinger

8

@Raghuram 답변을 바탕으로 프로젝트 종속성 복사에 대한 자습서를 찾을 수 있습니다 .

  1. 프로젝트 pom.xml파일을 열고 다음을 찾으십시오.

    <project>
      [...]
      <build>
        <plugins>
          ...
        </plugins>
      </build>
      [...]
    </project>
  2. 로 바꾸는 것보다 <plugins> ... </plugins>:

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
          <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
              <goal>copy-dependencies</goal>
            </goals>
            <configuration>
              <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
              <overWriteReleases>false</overWriteReleases>
              <overWriteSnapshots>false</overWriteSnapshots>
              <overWriteIfNewer>true</overWriteIfNewer>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  3. 그리고 커맨드 라인 내에서 maven을 호출하십시오. mvn dependency:copy-dependencies

완료되면, 현재 디렉토리의 target/dependency모든 jar의존성 내에 폴더가 생성됩니다 pom.xml.


"mvn"명령은 어디에 입력합니까? maven-project-> Maven-> .. ??를 마우스 오른쪽 버튼으로 클릭하십시오. ??
Baked Inhalf

pom.xml파일이 있는 폴더의 터미널 명령 줄에서
사용자

1
작동하지 않았다. Maven은 플러그인으로 만 설치된 것 같습니다. Maven도 수동으로 다운로드해야했습니다. 그런 다음 mvn dependency:copy-dependencies일했다!
Baked Inhalf

8

마침내 Maven을 사용하는 방법을 알아 냈습니다. Eclipse 내에서 새 Maven 프로젝트를 작성하십시오.

Maven을 다운로드하고 아카이브를 추출한 다음 /bin경로에 폴더를 추가하십시오 .

다음을 실행하여 명령 줄에서 설치를 확인하십시오 mvn -v(버전 및 Java 설치 경로를 인쇄합니다).

프로젝트 루트 폴더 ( pom.xml위치)를 변경하고 다음을 실행하십시오.

mvn dependency:copy-dependencies

모든 jar 파일이에 다운로드됩니다 /target/dependency.

다른 출력 디렉토리를 설정하려면

mvn dependency:copy-dependencies -DoutputDirectory="c:\temp"

이제 pom.xml을 변경하여 모든 종속성 다운로드에이 Maven 프로젝트를 재사용 할 수 있습니다.

빌드 경로-> 빌드 경로 구성-> 라이브러리-> JAR 추가로 Java 프로젝트에 jar을 추가하십시오.


1
반드시 이클립스 프로젝트 일 필요는 없습니다. Java Decompiler에서 jar 파일을 열고 pom.xml을 빈 폴더에 복사했습니다. mvn dependency:copy-dependencies해당 폴더에서 설명 한대로 전화 하여 모든 종속 jar 파일을 하나의 단일 폴더에 멋지게 복사했습니다.
Bernhard Döbler


2

${MAVEN_HOME}/conf같은 디렉토리에 구성 파일이 있는지 확인하십시오 settings.xml. 이러한 파일은 .m2폴더의 설정을 무시 하며 그 때문에 저장소 폴더의 .m2표시가 보이지 않거나 버려 질 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.