하나의 명령 줄에서 특정 Maven 아티팩트를 어떻게 다운로드 할 수 있습니까?


168

로 아티팩트를 설치할 수 install:install-file있지만 아티팩트를 어떻게 다운로드 할 수 있습니까?

예를 들면 다음과 같습니다.

mvn download:download-file -DgroupId=.. -DartifactId=.. -Dversion=LATEST

11
'repositoryUrl'이라는 문서에도 불구하고 플러그인이 'repoUrl'을 원한다는 점에 유의하십시오. 그것은 나에게했던 것처럼 당신을 미치게 할 수 있습니다!
zakmck

문서 ( maven.apache.org/plugins/maven-dependency-plugin/get-mojo.html )는 xml 매개 변수 (<repositoryUrl> ... </ repositoryUrl>)와 명령 줄 사용자 속성 (mvn .. -DrepoUrl = "..."). 이 특정 예제는 더 이상 사용되지 않으므로 걱정할 필요가 없습니다. 이제는 균일하게 remoteRepositories입니다 (두 용도 모두). 그러나 "destination"매개 변수는 사용자 특성 "-Ddest = ..."입니다. 예 : 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

답변:


182

2.1 버전부터 좋은 목표 를 가진 maven dependency plugin 을 사용할 수 있습니다 dependency:get. pom이 필요하지 않으며 모든 것이 명령 행에서 발생합니다.

dependency:get목표 를 찾으려면 버전 2.1을 사용하도록 maven에 명시 적으로 알려야합니다. 즉, 버전을 포함하여 완전한 플러그인 이름을 사용해야합니다.

mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:get \
    -DrepoUrl=url \
    -Dartifact=groupId:artifactId:version

업데이트 : 이전 버전의 Maven (2.1 이전)에서는 dependency:getmaven 사본이 지정된 버전의 플러그인을 사용하도록하여 정규화 된 이름과 버전을 사용하지 않고 정상적으로 실행할 수 있습니다.

다음과 같이 수행 할 수 있습니다.

1. 파일 <settings>요소 내에 다음 줄을 추가 ~/.m2/settings.xml하십시오.

<usePluginRegistry>true</usePluginRegistry>

2. ~/.m2/plugin-registry.xml다음 내용으로 파일 을 추가하십시오 .

<?xml version="1.0" encoding="UTF-8"?>
<pluginRegistry xsi:schemaLocation="http://maven.apache.org/PLUGIN_REGISTRY/1.0.0 http://maven.apache.org/xsd/plugin-registry-1.0.0.xsd"
xmlns="http://maven.apache.org/PLUGIN_REGISTRY/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-dependency-plugin</artifactId>
      <useVersion>2.1</useVersion>
      <rejectedVersions/>
    </plugin>
  </plugins>
</pluginRegistry>

그러나 이것은 maven 2.1 / 2.2에서 더 이상 작동하지 않는 것 같습니다. 실제로, 플러그인 레지스트리 소개 에 따르면 , 기능은 plugin-registry.xml(휴대 성을 위해) 재 설계되었으며 플러그인 레지스트리는 현재 Maven 2 내에서 반 휴면 상태 입니다. 그래서 우리는 지금 긴 이름을 사용해야한다고 생각합니다 (pom없이 플러그인을 사용할 때 뒤에 아이디어입니다 dependency:get).


1
예, 나는 dependency : get goal을 사용하여 동일한 해상도를 얻었습니다. mvn dependency : get -Dartifact = org.apache.archiva : archiva-webapp : LATEST : war -DrepoUrl = repository.sonatype.org/content/repositories/central 유일한 불편은 repoUrl 옵션을 제공해야한다는 것입니다. 귀하의 정보가 실제로 도움이됩니다 .mvn 2.2.1 (rdebian-1)을 사용하고 있으며 pluginRegistry를 만지지 않았습니다. 감사.
Xiè Jìléi 2009

2
이 "get"목표는 "다시 작동"하는 것 같습니다 (추가 구성 / 해킹이 필요하지 않음; 플러그인 2.5.1, mvn 3.0.4) : = 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
michael

get과 install의 차이점은 무엇입니까? 둘 다 현지 메이븐 리포지토리로 가져 오지 않습니까? -편집 : 잠깐만, 지금 당장 얻는다. 을위한 설치 하여 지역 deps 로컬 m2의의 repo에 복사, 원격에서 페치에게 그들을 얻을.
Chris2048

4
그것은 단지 APPEND 발견 :jar:sources받는 유물 을 참조 stackoverflow.com/a/31109185/537554
ryenus

1
최신 버전의 Maven (예 : 3.6.0)을 사용하면 여전히 그렇게 할 수 있습니다mvn dependency:get -Dartifact=group-id:artefact-id:version
scrutari

93

Maven Dependency Plugin 최신 버전 (2.8)을 사용 하면 Maven Central Repository에서 아티팩트를 다운로드하는 것이 다음과 같이 간단합니다.

mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -Dartifact=groupId:artifactId:version[:packaging[:classifier]]

여기서 Maven 좌표groupId:artifactId:version 등은

예를 들어 Maven 2.0.9, Maven 2.2.1 및 Maven 3.0.4로 테스트했습니다.

mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -Dartifact=org.hibernate:hibernate-entitymanager:3.4.0.GA:jar:sources

(자신의 제공 파스칼 Thivent 덕분에 멋진 대답을 처음부터.이 코멘트에 맞지 않을 것하고 편집을 위해 너무 광범위한 것 때문에 내가 다른 대답을 추가하고 있습니다.)


이것을 사용하여 maven archetype을 다운로드했습니다. 프록시 뒤에 있고 설정 xml에서 프록시를 구성했지만 maven archtypes를 식별하기 위해 등록하지 못하는 Eclipse를 사용하는 경우에 효과적입니다.
Acewin

mvn org.apache.maven.plugins : maven-dependency-plugin : 2.8 : get -Dartifact = org.apache.maven.archetypes : maven-archetype-webapp : 1.0 : jar
Acewin

무엇을 jar:sources의미 하는지 설명 할 수 있습니까 ? 왜 "jar"을 지정해야합니까? "소스"는 아티팩트에 필요한 추가 종속성을 다운로드한다는 의미입니까?
red888

"jar"은 패키징 유형이고 "sources"는 분류기입니다. 하나의 종속성 (예 : hibernate-core )이 주어지면 둘 이상의 아티팩트가있을 수 있습니다. 이진 전용 라이브러리 2. sourcesJava 소스 만 포함하는 JAR 파일 3. javadocAPI 문서 만있는 JAR 파일 Maven 기본 아티팩트 처리기 도 참조하십시오 .
Danilo Piazzalunga 20시 48 분

[:classifier]다운로드하려는 assemlby 플러그인으로 생성 된 zip 파일이있는 경우 올바르게 사용하는 방법에 대해 설명해 주셔서 감사 합니다.
jonashackt

43

다음은 Maven 3.1.1과 함께 "component.jar"라는 최신 버전의 아티팩트를 다운로드하는 데 도움이 된 것입니다.

실제로 파일을 다운로드하여 로컬 작업 디렉토리에 복사합니다.

bash에서 :

mvn dependency:get \
    -DrepoUrl=http://.../ \
        -Dartifact=com.foo.something:component:LATEST:jar \
        -Dtransitive=false \
        -Ddest=component.jar \

감사합니다! 이벤트가 필요하지 않았습니다 -DrepoUrl. 어쨌든 내 폼에서 암시 된 것 같습니다. 또한 나는 사용하지 않은 -Ddest내가 사실대로 했다 가 일반에 다운로드 할을 .m2디렉토리.
yair

15
dest매개 변수 는 더 이상 사용되지 않으며copy 다음 get과 같이 호출로 대체 될 수 있습니다 mvn dependency:copy -Dartifact=com.foo.something:component:LATEST:jar -DoutputDirectory=.(이 경우 jar을 작업 디렉토리에 배치).
Jacob Raihle

@JacobRaihle 그런 다음 pom.xml없이 파일을 다운로드 할 수 없으며 다음 오류가 발생 Goal requires a project to execute but there is no POM in this directory합니다.
Athlan

2
@Athlan No-pom 지원은 새로운 기능 일 수 있습니다. 요즘 나는 mvn dependency:copy( dependency:get첫 번째 없이 ) 그냥 달릴 수 있습니다 .
Jacob Raihle

26

이슈 바이너리를 얻는 방법과 관련하여 Pascal Thivent의 대답 은 그것이지만, 이슈 소스 항아리를 얻으려면 다음을 사용할 수 있습니다.

mvn dependency:get -Dartifact=groupId:artifactId:version:jar:sources

예 :

mvn dependency:get -Dartifact=junit:junit:4.12:jar:sources

artifact매개 변수가 실제로로 구성되어 있기 때문에 작동합니다 groupId:artifactId:version[:packaging][:classifier]. 그냥 포장분류는 선택 사항입니다.

jar같이 포장sources같이 분류 , 받는다는 종속성 플러그인은 우리가 소스 항아리가 아닌 유물 항아리를 요청하고 이해한다.

불행히도 현재 소스 jar 파일은 전 이적으로 다운로드 할 수 없으므로 의미가 있지만 이상적으로 downloadSources는 maven eclipse 플러그인과 마찬가지로 옵션을 존중 할 수 있다고 생각합니다 .


17

플러그인 구성 섹션에 정의 된 아티팩트 목록을 가져와 지정된 위치에 복사하는 dependency : copy ( http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html )를 사용할 수 있습니다. 원하는 경우 이름을 바꾸거나 버전을 제거합니다. 이 목표는 로컬 저장소 또는 리액터에 원격 저장소가없는 경우 원격 저장소의 아티팩트를 해결할 수 있습니다.

플러그인의 모든 속성을 maven CLI에서 사용할 수있는 것은 아닙니다. "사용자 속성 :"속성이 정의 된 속성을 지정할 수 있습니다. 아래 예제에서 junit을 temp 폴더에 다운로드하고 jar 파일에서 vesion을 제거합니다.

mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:copy -Dartifact=junit:junit:4.11 -DoutputDirectory=/tmp -Dmdep.stripVersion=true

여기서 artifact = junit : junit : 4.11은 maven 좌표입니다. 그리고 artifcat을 groupId : artifactId : version [: packaging [: classifier]]로 지정합니다

( 처음에 https://stackoverflow.com/a/18632876/2509415 를 제공해 주신 Pascal Thivent에게 감사드립니다 . 다른 답변을 추가하고 있습니다)


11

mvn없이 최신 maven 아티팩트를 다운로드하는 하나의 라이너 :

curl -O -J -L  "https://repository.sonatype.org/service/local/artifact/maven/content?r=central-proxy&g=io.staticcdn.sdk&a=staticcdn-sdk-standalone-optimizer&e=zip&v=LATEST"

3
공감. 이 솔루션은 특정 리포지토리 제품에서만 작동하는 것 같습니다.
Martín Straus

1
Nexus 2.x와 잘 작동하지만 3.x
와는

컬 : 옵션 -J를 알
xuehui

2

공식 문서의 사용법 :

https://maven.apache.org/plugins/maven-dependency-plugin/usage.html#dependency:get

내 경우에는 아래 답변을 참조하십시오.

mvn dependency:get -Dartifact=$2:$3:$4:$5 -DremoteRepositories=$1 -Dtransitive=false
mvn dependency:copy -Dartifact=$2:$3:$4:$5 -DremoteRepositories=$1 -Dtransitive=false -DoutputDirectory=$6

#mvn dependency:get -Dartifact=com.huya.mtp:hynswup:1.0.88-SNAPSHOT:jar -DremoteRepositories=http://nexus.google.com:8081/repository/maven-snapshots/ -Dtransitive=false
#mvn dependency:copy -Dartifact=com.huya.mtp:hynswup:1.0.88-SNAPSHOT:jar -DremoteRepositories=http://nexus.google.com:8081/repository/maven-snapshots/ -Dtransitive=false -DoutputDirectory=.

"mvn dependency : get"명령을 사용하여 특정 속성을 다운로드하고 "mvn dependency : copy"명령을 사용하여 다운로드 한 아티팩트를 dest dir "-DoutputDirectory"에 복사하십시오.


1

Maven 3.6을 사용하여 ASM-7을 얻는 예는 다음과 같습니다.

mvn dependency:get -DremoteRepositories=maven.apache.org -Dartifact=org.ow2.asm:7.0:sources:jar

: 또는 당신은에서 여기에 단지를 다운로드 할 수 있습니다 https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm 다음

mvn install:install-file -DgroupId=org.ow2.asm -DartifactId=asm -Dversion=7.0 -Dclassifier=sources -Dpackaging=jar -Dfile=/path/to/asm-7.0.jar

0

명령 :

mvn install:install-file 

일반적으로 로컬 저장소에 아티팩트를 설치 하므로이를 다운로드 할 필요가 없습니다. 그러나 아티팩트를 다른 사용자와 공유하려면 아티팩트를 중앙 저장소에 배치해야합니다 . 자세한 내용 은 배치 플러그인 을 참조하십시오.

또한 POM에 종속성 을 추가하면 프로젝트를 빌드 할 때 필요한 타사 아티팩트를 자동으로 가져옵니다. 즉, 중앙 저장소에서 아티팩트를 다운로드합니다.


0

LATEST 더 이상 사용되지 않습니다. 범위로 시도하십시오. [,)

./mvnw org.apache.maven.plugins:maven-dependency-plugin:3.1.1:get \  
-DremoteRepositories=repoId::default::https://nexus/repository/maven-releases/ \
"-Dartifact=com.acme:foo:[,)"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.