1つのコマンドラインで特定のMavenアーティファクトをダウンロードするにはどうすればよいですか?


168

でアーティファクトをインストールinstall:install-fileできますが、アーティファクトをダウンロードするにはどうすればよいですか?

例えば:

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

11
ドキュメントに「repositoryUrl」と書かれているにもかかわらず、プラグインが「repoUrl」を必要とすることに注意してください。それは私と同じようにあなたを狂わせることができます!
zakmck 2011

ドキュメント(maven.apache.org/plugins/maven-dependency-plugin/get-mojo.html)は、xml params(<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)
マイケル・

回答:


182

バージョン2.1以降、素晴らしい目標を持つmaven依存プラグインを使用できます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:get、Mavenのコピーに特定のバージョンのプラグインを使用するように強制することにより、(完全修飾名とバージョンを使用せずに)正常に実行できます。

これは次のように実行できます。

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ではもう機能しないようです。実際、Introduction to the Plugin Registryによると、の機能はplugin-registry.xml(移植性のために)再設計されており、プラグインレジストリは現在、Maven 2内で半休止状態になっています。だから私は今のところ長い名前を使用する必要があると思います(pomなしでプラグインを使用する場合、これは背後にある考えですdependency:get)。


1
はい、私はdependency:getゴールを使用して同じ解決策を得ました。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には触れていません。ありがとう。
謝Jìléi

2
この「取得」の目標は再び「うまくいく」ようです(追加の構成/ハッキングは不要です。プラグイン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:アリ:1.8.1 -Ddest = ANT-1.8.1.jar
マイケル・

取得とインストールの違いは何ですか?彼らは両方ともあなたの地元のmavenリポジトリにフェッチしませんか?--edit:待って、いいえ、私は今それを取得します。installはローカルのdepをローカルのm2リポジトリにコピーし、リモートから取得するためのものです。
Chris2048 14年

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依存プラグインの最新バージョン(2.8)では、Mavenセントラルリポジトリからアーティファクトをダウンロードするのは次のように簡単です。

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に感謝します。コメントに収まらず、編集するには広すぎるため、別の答えを追加します。)


これを使用してmavenアーキタイプをダウンロードしました。これは、プロキシの背後にあり、Eclipseを使用していて、設定xmlでプロキシを構成していても、Mavenアーチタイプを特定するための登録に失敗した場合に適切に機能します。
Acewin 2016

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

どのようなjar:sources意味/ ことを説明できますか?なぜ「jar」を指定する必要があるのですか?「ソース」は、アーティファクトに必要な追加の依存関係をダウンロードすることを意味しますか?
red888

「jar」はパッケージタイプ、「sources」は分類子です。1つの依存関係(たとえばhibernate-core)が与えられた場合、複数のアーティファクトが存在する可能性があります。1.バイナリのみのライブラリ2. sourcesJavaソースのみを含むJARファイル3. javadocAPIドキュメントのみを含むJARファイル 参照:Mavenのデフォルトのアーティファクトハンドラ
Danilo Piazzalunga

[:classifier]ダウンロードしたいassemlbyプラグインで作成したzipファイルがある場合、正しく使用する方法を明確にしていただきありがとうございます。
jonashackt

43

最後に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 \

まことにありがとうございます!私はイベントを必要としませんでした-DrepoUrl、とにかくそれは私のポンから暗示されていたと思います。また、私は使用しませんでした-Ddest私は実際にようやった、正規にダウンロードし、それをしたい.m2ディレクトリ。
yair

15
destパラメータは廃止されました、とのinvokationに置き換えることができcopyた後にgetそのような:mvn dependency:copy -Dartifact=com.foo.something:component:LATEST:jar -DoutputDirectory=.(作業ディレクトリにjarファイルを置くこの場合)。
Jacob Raihle 16

@JacobRaihle次に、pom.xmlがないとファイルをダウンロードできず、次のエラーが発生しますGoal requires a project to execute but there is no POM in this directory
アスラン

2
@Athlan No-pomサポートは新しい機能かもしれません。今日私はmvn dependency:copydependency:get最初なしで)ただ走ることができます。
ジェイコブライレ

26

アーティファクトバイナリを取得する方法に関して、Pascal Thiventの答えはそれですが、アーティファクトソースjarも取得するには、以下を使用できます。

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]。ただ、パッケージ分類器はオプションです。

パッケージ化し、として分類器、Mavenの依存関係のプラグインは、我々はソースの瓶、ないアーティファクトジャーのために求めている理解しています。jarsources

残念ながら、現時点ではソースのjarファイルを推移的にダウンロードすることはできませんdownloadSources


17

プラグイン構成セクションで定義されたアーティファクトのリストを取得して、指定された場所にコピーするdependency:copy(http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html)を使用できます、必要に応じて、名前を変更するか、バージョンを削除します。この目標は、リモートリポジトリのアーティファクトがローカルリポジトリまたはリアクタのいずれにも存在しない場合に、それらを解決できます。

プラグインのすべてのプロパティをMaven CLIで使用できるわけではありません。「ユーザープロパティ:」プロパティが定義されているプロパティを指定できます。以下の例では、junitを一時フォルダーにダウンロードし、jarファイルからバージョンを削除しています。

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アーティファクトをダウンロードする1つのライナー:

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
反対投票。このソリューションは、特定のリポジトリ製品でのみ機能するようです。
マルティン・ストラウス

1
Nexus 2.xではうまく機能しましたが、3.xではまだ機能しません(まだ)
HDave

curl:オプション-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」を使用してダウンロードしたアーティファクトを宛先ディレクトリ「-DoutputDirectory」にコピーします


1

以下は、Maven 3.6を使用してASM-7を取得する例です。

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

または、ここから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.