8

内部リポジトリと中央リポジトリを使用するプロジェクトがあります。1 つだけではなく両方を使用できるように settings.xml を構成する方法はありますか? 追加したところ

<mirrors>
    <mirror>
        <id>MY ID</id>
        <url>MY URL</url>
        <mirrorOf>*</mirrorOf>
    </mirror>
</mirrors>

settings.xml で、自分の内部リポジトリを調べることができますが、中央リポジトリをオーバーライドします。

これは、Maven を初めて使用する人がよく遭遇する問題だと確信しています。

4

4 に答える 4

8

これを行うにはいくつかの方法があります。

IMO の最良の方法は、ローカル リポジトリ サーバーを Maven Central のプロキシとして機能させることです。Nexus と Artifactory はどちらもこれをすぐに実行できます。Apache または別の Web サーバーを使用している場合は、切り替える必要があります。

設定を更新して、ミラーからターゲット サーバーを除外することもできます。

<mirrorOf>*,!MyOtherRepository</mirrorOf>

これは、複数のローカル リポジトリ サーバーがある場合に機能しますが、この方法で中央を除外することはできないと思います。デフォルトでは、Maven は中央でアーティファクトを探し、サーバーはその代役として機能します。

これにより、ローカル リポジトリを参照する明示的なリポジトリ エントリが POMS に残ります。ローカル リポジトリが成果物を提供するだけの場合、これは 2 番目に簡単な方法かもしれません (特に、リポジトリ仕様を保持する親 POM を使用する場合)。

于 2012-10-11T17:00:44.513 に答える
4

mirror ディレクティブは現在、すべてをミラーリングしています。次のようにして、名前付きリポジトリを除外できます。

<mirrorOf>!myExcludedRepo,*</mirrorOf>

上記は、という名前のリポジトリを除くすべてをミラーリングしますmyExcludedRepo

ミラーリングのMaven ガイドは次のとおりです。特にAdvancedとマークされたセクションに注意してください。そこにはたくさんの能力があります。

于 2012-10-11T16:58:07.297 に答える
0

このリンクの指示に従って、代わりに pom.xml を変更し、その場でリモートリポジトリを追加するという実用的な答えを見つけました

回答ありがとうございます。皆さんの提案は、より多くのリポジトリと複雑な構成を備えたより複雑なシナリオに役立つと思います。

于 2012-10-11T19:01:34.600 に答える
0

私は 3 つのリポジトリ (Nexus を使用) を使用します。最初のリポジトリは、すべての外部リポジトリを追加するプロキシ リポジトリです。残りの 2 つは、リリースとスナップショットをデプロイするための内部リポジトリです。ここに私の .m2/settings.xml があります:

<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
    <!-- http://maven.apache.org/ref/3.0.4/maven-settings/settings.html -->

    <interactiveMode>true</interactiveMode>
    <offline>false</offline>

    <mirrors>
    <mirror>
        <id>nexus</id>
        <mirrorOf>external:*</mirrorOf>
        <url>http://localhost:3129/nexus/content/groups/public</url>
    </mirror>
    </mirrors>

    <profiles>
    <profile>
        <id>nexus</id>
        <repositories>
            <repository>
                <id>central</id>
                <url>http://central</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>

            <repository>
                <id>internal.releases</id>
                <url>http://localhost:3129/nexus/content/repositories/releases</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>        

            <repository>
                <id>internal.snapshots</id>
                <url>http://localhost:3129/nexus/content/repositories/snapshots</url>
                <releases>
                    <enabled>false</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>        
        </repositories>

        <pluginRepositories>
            <pluginRepository>
                <id>central</id>
                <url>http://central</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </pluginRepository>
        </pluginRepositories>
        <properties>
            <downloadSources>true</downloadSources>
            <downloadJavadocs>true</downloadJavadocs>           
        </properties>
    </profile>
    </profiles>

    <activeProfiles>
    <activeProfile>nexus</activeProfile>
    </activeProfiles>  

    <servers>
    <server>
        <id>internal.releases</id>
        <username>admin</username>
        <password>XXX</password>
    </server>
    <server>
        <id>internal.snapshots</id>
        <username>admin</username>
        <password>XXX</password>
    </server>
    </servers>

</settings>

Maven はそれらをすべて使用するため、Nexus のルーティング機能を使用して「^/my/private/packages/.*」をブロックし、外部リポジトリから内部パッケージを取得しようとしないようにすることができます。内部リポジトリをプロキシ リポジトリに追加していません。

それが機能するために pom.xml ファイルを調整する必要はありません。「mvn deploy」と入力するだけです。

于 2014-03-16T13:21:59.083 に答える