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




apache homepage (7)

다음은 마지막으로 Maven 3.1.1을 사용하여 "component.jar"라는 이슈의 최신 버전을 다운로드하는 방법입니다 (다른 제안은 대부분 내가 생각한 maven 버전 변경 때문이 아닙니다)

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

bash에서 :

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

install:install-file 사용하여 이슈를 install:install-file 수 있지만 어떻게 이슈를 다운로드 할 수 있습니까?

예 :

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

명령 :

mvn install:install-file 

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

또한 POM에 dependency 을 추가하면 프로젝트를 빌드 할 때 필요한 타사 이슈가 자동으로 반입됩니다. 즉 중앙 저장소에서 이슈를 다운로드합니다.


하나는 의존성을 사용할 수 있습니다 : copy ( copy ) 이것은 플러그인 설정 섹션에 정의 된 아티팩트의 목록을 가져 와서 지정된 위치에 복사합니다 원하는 경우 이름을 바꾸거나 버전을 제거 할 수 있습니다. 이 목표는 로컬 리포지토리 또는 리액터에 존재하지 않는 원격 리포지토리의 아티팩트를 해결할 수 있습니다.

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

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

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

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


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"

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

여기서 groupId:artifactId:version 등은 Maven 좌표입니다.

예를 들어, 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

(첫 번째 장소에서 멋진 답변 을 제공 한 Pascal Thivent에게 감사드립니다. 다른 답변을 추가하고 있습니다. 주석에 맞지 않아 편집하기에 너무 광범위하기 때문입니다.)


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

dependency:get 을 찾으려면 dependency:get 목표를 dependency:get 버전 2.1을 사용하도록 명시 적으로 지정해야합니다. 즉, 버전을 포함하여 플러그인의 정규화 된 이름을 사용해야합니다.

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

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

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

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

<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 에 대한 소개 에 따르면, plugin-registry.xml 기능은 (이식성을 위해) 재 설계되었으며 Plugin 레지스트리는 Maven 2 내에서 현재 semi-dormant 상태에있다 . 그래서 우리는 지금 긴 이름을 사용해야한다고 생각합니다 (pom없이 플러그인을 사용할 때 dependency:get 뒤에있는 아이디어입니다 dependency:get ).


나를 위해 일한 것은 :

  <plugin>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
      <execution>
        <id>unpack-dependencies</id>
        <phase>prepare-package</phase>
        <goals>
          <goal>unpack-dependencies</goal>
        </goals>
        <configuration>
          <outputDirectory>${project.build.directory}/classes</outputDirectory>
        </configuration>
      </execution>

    </executions>
  </plugin>


  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <executions>
      <execution>
        <id>unpack-dependencies</id>
        <phase>package</phase>
      </execution>
    </executions>
    <configuration>
      <archive>
        <manifest>
          <addClasspath>true</addClasspath>
          <classpathPrefix>lib/</classpathPrefix>
          <mainClass>SimpleKeyLogger</mainClass>
        </manifest>
      </archive>
    </configuration>
  </plugin>

내 의존성이 시스템 1 이었기 때문에 나는 특별한 사건을 겪었습니다.

<dependency>
  ..
  <scope>system</scope>
  <systemPath>${project.basedir}/lib/myjar.jar</systemPath>
</dependency>

나는 @ user189057이 제공하는 코드를 변경했다. 1) maven-dependency-plugin은 "prepare-package"단계에서 실행된다. 2) "target / classes"에 직접 압축을 푼 클래스를 추출하고있다.





maven-2