원격 maven2 아티팩트를 로컬 저장소에 다운로드하는 간단한 명령 줄?


122

maven 2를 사용하여 배포하는 라이브러리가 있습니다.이 라이브러리의 일반적인 사용자는 응용 프로그램을 빌드하는 데 maven을 사용하지 않지만 maven에 다소 익숙하고 설치했을 가능성이 높습니다.

~/.m2/repositorypom.xml을 설정하지 않고도 내 라이브러리의 아티팩트를 로컬로 다운로드하는 데 사용할 수있는 "간단한"한 줄 명령을 문서화하고 싶습니다 .

이 작업을 수행하는 방법이 있다고 생각했지만 install:install-filedependency플러그인 문서를 살펴본 후 찾을 수없는 것 같습니다 . 나는 다음과 같은 것을 시도했다.

mvn install:install-file -DrepositoryId=java.net -Durl=http://download.java.net/maven/2/ -Dfile=robo-guice-0.4-20091121.174618-1.jar -DpomFile=robo-guice-0.4-20091121.174618-1.pom -DgroupId=robo-guice -DartifactId=robo-guice -Dversion=0.4-SNAPSHOT -Dpackaging=jar

하지만 원격 아티팩트를 로컬 저장소에 다운로드하는 대신 설치 플러그인이 로컬 저장소에 로컬 저장소에 복사하는 데 사용되는 것처럼 보이기 때문에 잘못된 트리를 짖는 것 같습니다.

이것은 제가 설치하고 싶은 아티팩트입니다 : http://download.java.net/maven/2/robo-guice/robo-guice/0.4-SNAPSHOT/

Maven을 사용하여 가능합니까?



답변:


168

의 버전 2.1 이후 메이븐 종속성 플러그인 하는이 가져 오기 : 의존성 이 목적을 위해 목표. 올바른 버전의 플러그인을 사용하고 있는지 확인하려면 "정규화 된 이름"을 사용해야합니다.

mvn org.apache.maven.plugins : maven-dependency-plugin : 2.1 : get \
    -DrepoUrl = http : //download.java.net/maven/2/ \
    -Dartifact = robo-guice : robo-guice : 0.4-SNAPSHOT

종속성 플러그인 자체를 설치하는 방법을 보여주는 데 특히 유용합니다.
Sergio Acosta

2
파스칼, 저장소에 도달하기 위해 사용자 + 비밀번호를 정의하는 방법을 알려주시겠습니까? user : password @ repourl 의 트릭이 작동하지 않았습니다.
Gábor Lipták

4
목표는 좋지만 파일을 복사 할 대상 디렉토리를 어떻게 정의 할 수 있습니까? (및 파일 이름)
domi

9
@domi (후손에 대한 뒤늦은 대답) : "-Ddest = path / to / my.jar"를 사용하십시오. 그렇지 않으면 로컬 ~ / .m2 / repository에 복사됩니다 (아무 일도 일어나지 않은 것처럼 보입니다). maven.apache.org/plugins/maven-dependency-plugin/… 참조 = example => mvn org.apache.maven.plugins : maven-dependency-plugin : 2.5.1 : get -DremoteRepositories = repo.maven.apache.org -Dartifact = org.apache.ant : ant : 1.8.1 -Ddest = ant-1.8.1.jar (결과 : 현재 디렉토리의 ant-1.8.1.jar)
michael

3
감사! 하지만, 당신이 게시 된 문서의 링크, 거기 Deprecated. Use remoteRepositories에 대해 repoUrl. 아마도 답변을 업데이트하십시오 :)
주말

46

종속성 및 실행 지침으로 나열된 이러한 jar를 사용하여 간단한 pom을 제공하십시오.

mvn dependency:go-offline

그러면 종속성이 로컬 저장소로 가져옵니다.

보다 직접적인 솔루션은 dependency : get 이지만 입력 할 인수가 많습니다.

mvn dependency:get -DrepoUrl=something -Dartifact=group:artifact:version

좋은 생각이지만 명령 줄을 복사하여 붙여 넣는 것이 더 쉬울 것입니다
emmby

내가 생각할 수 있다면 게시 할 것입니다. 나는 필요한 것을 수행하는 플러그인을 모릅니다. 나는 하나를 쓰는 법을 안다 ...
bmargulies

get모조 실제로 기대하고 -DrepoUrl, 존재하지 않는 것으로 -DrepositoryUrl. 유형에 대한 인수와 관련하여 마법은 없습니다. 이러한 정보를 어떤 방식 으로든 제공해야합니다.
Pascal Thivent

내 첫 번째 체계에서 최종 사용자는 mvn이라는 세 문자 만 입력합니다. 다른 모든 입력은 op에 의해 수행됩니다.
bmargulies

22

Maven 종속성 플러그인 버전 2.4 부터는 -Ddest 플래그를 사용하여 아티팩트의 대상 대상을 정의 할 수도 있습니다. 대상 아티팩트의 파일 이름 (디렉토리가 아님)을 가리켜 야합니다. 사용할 수있는 추가 매개 변수 는 매개 변수 페이지 를 참조하십시오.

mvn org.apache.maven.plugins:maven-dependency-plugin:2.4:get \
    -DremoteRepositories=http://download.java.net/maven/2 \
    -Dartifact=robo-guice:robo-guice:0.4-SNAPSHOT \
    -Ddest=c:\temp\robo-guice.jar

2
감사! -Ddest는 더 이상 사용되지 않는 것으로 표시됩니다. 새로운 솔루션이 있습니까?
Dimath

1
대신 dependency : copy 목표를 사용하십시오. maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html
Eric B.

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