Mavenのすべての依存関係をリポジトリにないディレクトリにダウンロードしていますか?


127

私はmavenだけにバイナリ形式で配布されたライブラリを使用する必要があったので、プロジェクトをmavenに変換し始めましたが、頭を壁にぶつけすぎた後、自分を傷つけるのをやめ、そのまま使用することにしました蟻。私はmavenにjarとその推移的な依存関係のすべてを選択したディレクトリにダウンロードさせて、通常どおり楽しんでいるSCMにチェックインして、再び至福の開発者になりたいと思っています。
それを簡単に行う方法はありますか?


2
Ivyの使用を検討し、信頼できるAntで必要な推移的な依存関係管理を取得してください。または、弾丸をかじってMavenディレクトリ構造を使用します。
Dave Newton、

アイビーを試しましたか?
Tomasz Nurkiewicz

5
いいえ、しかし私はこの時点ですべての忍耐を切り替えに費やしてきました。また今度。コーディングに戻りたいです。それはメイベンで行うことができますか?
chubbsondubs 2011年

回答:


260

Mavenの依存関係のプラグインは、潜在的にあなたの問題を解決することができます。

あなたが持っている場合はpom指定されたすべてのプロジェクトの依存関係を、あなたがする必要があるだろうすべては、実行です

mvn dependency:copy-dependencies

そしてtarget/dependencies、推移的を含むすべての依存関係で満たされたフォルダを見つけるでしょう。

追加以下のグスタボの答え:依存関係のダウンロードへソースを、あなたが使用することができます

mvn dependency:copy-dependencies -Dclassifier=sources

Apache Maven Dependency Plugin docを介して)。


1
Thx @Raghuram、私はこれを長い間探していました。
eskalera

しかし、すべての依存関係をローカルリポジトリにコピーする場合はどうなりますか?これは使用することになっていますか?おそらくそれがすでにローカルリポジトリにある場合、なぜコピーするのですか?とにかく地元ですね。
SES

1
@ses標準のMavenビルド(コンパイル、テスト、パッケージ、インストールなど。検証については不明)では、デフォルトですべての依存関係がローカルリポジトリにすでにコピーされています。これはそのためではありません。代わりに、なんらかの理由でアプリの依存関係が必要になる状況に対応します。私は現在、依存ライブラリの冗長API定義を検査するために使用しています(たとえば、一部のライブラリにはJavax APIが含まれており、同じAPIの他のバージョンと競合する可能性があります)が、アプリにパッケージ化された依存関係が必要な場合にも適しています配布用、または何でも。
Spanky Quigman、2013

1
+1は、明確で簡潔で役立つ回答を示します。OPと同じMavenダンスを実行し、JARファイルの依存関係を取得したいと思っただけです。ありがとう!+10
Brandon

@Raghuram技術的には、「ターゲット/依存関係」のすべての(解決された)アーティファクトで終了します。さらに、依存関係の「groupId」座標が無視されるため、名前の衝突の潜在的な問題があります。つまり、「dependency:copy-dependencies」はレイアウト構造を保持しません。
whaefelinger 2014年

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-> .. ??
焼き半分

pom.xmlファイルがあるフォルダーのターミナルコマンドライン。
ユーザー

1
うまくいきませんでした。Mavenはプラグインとしてのみインストールされると思います。Mavenも手動でダウンロードする必要がありました。その後mvn dependency:copy-dependencies働いた!
15:03に焼き半分

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を追加して、jarをJavaプロジェクトに追加します。


1
必ずしも日食プロジェクトである必要はありません。Javaデコンパイラーでjarファイルを開き、pom.xmlを空のフォルダーにコピーしました。mvn dependency:copy-dependenciesあなたが説明したようにそのフォルダーから呼び出し、すべての依存jarファイルを1つのフォルダーにうまくコピーしました。
BernhardDöbler18年


2

${MAVEN_HOME}/confようなディレクトリにいくつかの設定ファイルがあるかどうかを確認してくださいsettings.xml。これらのファイルは.m2フォルダーの設定をオーバーライドし、そのため、からのリポジトリフォルダーが表示され.m2ないか、破棄される可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.