web-dev-qa-db-ja.com

コマンドラインでMavenリポジトリを追加できますか?

〜/ .m2/settings.xmlで依存関係を取得するためにMavenリポジトリを追加できることを知っています。しかし、次のようなコマンドラインを使用してリポジトリを追加することは可能ですか?

mvn install -Dmaven.repository=http://example.com/maven2

私がこれをしたい理由は、Mavenを呼び出すために使用するコマンドラインオプションを完全に制御できる連続統合ツールを使用しているが、統合ツールを実行するユーザーのsettings.xmlを管理するためです手間がかかります。

62

これを行うことはできますが、おそらく他の人が言ったように、POMで行う方が良いでしょう。

コマンドラインで、ローカルリポジトリのプロパティと、リモートリポジトリの別のリポジトリを指定できます。ただし、リモートリポジトリにはすべてのデフォルト設定があります

以下の例では、2つのリモートリポジトリと1つのカスタムローカルリポジトリを指定しています。

mvn package -Dmaven.repo.remote=http://www.ibiblio.org/maven/,http://myrepo 
  -Dmaven.repo.local="c:\test\repo"
69
Rich Seller

Maven't Project Object Model(POM)の目標の1つは、成果物を確実に再現するために必要なすべての情報をキャプチャすることです。

目標を達成するには、各プロジェクトでユーザーレベルのsettings.xmlファイルをチェックインし、-s(または--settings)オプションを使用してビルドに渡します。

6
ddimitrov

コマンドラインを使用して実行できるかどうかはわかりません。一方、次の例のようにpom.xmlにリポジトリを追加できます。このアプローチを使用すると、〜/ .m2/settings.xmlファイルを変更する必要はありません。

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.Apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
    ...
    <repositories>
            <repository>
                <id>MavenCentral</id>
                <name>Maven repository</name>
                <url>http://repo1.maven.org/maven2</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
...
            <repository>
                <id>Codehaus Snapshots</id>
                <url>http://snapshots.repository.codehaus.org/</url>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
                <releases>
                    <enabled>false</enabled>
                </releases>
            </repository>
        </repositories>

    ...

        <pluginRepositories>
            <pluginRepository>
                <id>Apache.snapshots</id>
                <name>Apache Snapshot Repository</name>
                <url>
                    http://people.Apache.org/repo/m2-snapshot-repository
                </url>
                <releases>
                    <enabled>false</enabled>
                </releases>
            </pluginRepository>
            <pluginRepository>
                <id>Codehaus Snapshots</id>
                <url>http://snapshots.repository.codehaus.org/</url>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
                <releases>
                    <enabled>false</enabled>
                </releases>
            </pluginRepository>
        </pluginRepositories>

    ...

    </project>
5
Jorge Ferreira

ここでは、ビルドに新しいサードパーティリポジトリを追加したい場合があるため、これを求めていると仮定します。私はもちろん間違っているかもしれません... :)

この場合の最善の策は、アーティファクトやネクサスなどの管理プロキシを使用することです。次に、settings.xmlを一度変更して、これを世界のミラーとして設定します。

その時点から追加する必要があるサードパーティのレポジトリは、プロキシ経由で処理できます。

3
Kevin Wright

@Jorge Ferreiraが既に言ったように、リポジトリ定義をpom.xmlに入れます。 profiles を使用して、コマンドライン経由で使用するリポジトリを選択します。

mvn deploy -P MyRepo2

mvn deploy -P MyRepo1
3
Eduard Wirch

私は以前にMaven 2を実際に使用したことがありません。Maven2に問題があるため、システムはまだMaven 1.xで動作しています。

ただし、Maven 2のドキュメントを見ると、そのような特定のシステムプロパティはないようです。ただし、おそらくシステムプロパティを使用して、poms/settingsに組み込むことができます。このシステムプロパティの一部を参照してください http://maven.Apache.org/settings.html

したがって、設定ファイルに$ {maven.repository}があり、上記のように-Dmaven.repositoryを使用します。

これがうまくいくかどうかはわかりませんが、少し調整することで何かを思いつくことができると確信しています。

2
Henry B

必要なリポジトリ設定を持つPOMを作成し、プロジェクトPOMで親要素を使用して追加のリポジトリを継承します。プロジェクトのグループが1つのチームに属している場合、「組織」POMの使用には他にもいくつかの利点があります。

1
Steve Moyer