13

私は現在、多くの人のルールを定義する環境で働いています。現在、Hudson と Artifactory を使用していますが、Jenkins と Nexus への切り替えが移行コストに見合うかどうかを評価したいと思います (ただし、これは問題ではありません)。

それを評価するために、Maven、Jenkins、Nexus をローカルでセットアップし、ソリューションを比較できるように、以前のセットアップをできるだけ多く使用するセットアップを見つけようとしました。ここでの問題は次のとおりです。

  • 既存の POM を使用してビルドし、Jenkins を介してデプロイすると、古い環境に自動的にデプロイされます。
  • その後、Maven でファイルのdeploymentManagementセクションを定義しようとしましたが、これは許可されていません (Mavenの構成を参照してください。.settings

    注: インストールおよびユーザー構成を使用して、共有プロジェクト情報を追加することはできません (設定や会社全体など)。

  • もちろん、全体をコピーして、各 POM 内の distributionManagement を変更することもできますが、異なるインストールで同じ (コピーされていない) 例を使用したいと考えています。

現在のルート POM には、次のセクションが含まれています。

<distributionManagement>
    <repository>
      <uniqueVersion>false</uniqueVersion>
      <id>company-central</id>
      <name>Company central maven respository</name>
      <url>https://company.com/artifactory/libs-releases</url>
    </repository>
    <snapshotRepository>
      <id>company-snaps</id>
      <name>company-snapshots</name>
      <url>https://company.com/artifactory/libs-snapshots</url>
    </snapshotRepository>
    <downloadUrl>https://company.com/artifactory/libs-releases</downloadUrl>
  </distributionManagement>

同じ POM を使用し、異なるリポジトリ マネージャーにデプロイする最も簡単な方法は何ですか?

PS:さまざまな展開シナリオ用に maven pom ファイルのセットアップを読みましたが、(私のコンテキストでは) 好きではありません。異なる設定で複数のリポジトリに Maven アーティファクトを展開することは、実際には別の問題です。Maven での複数のデプロイは興味深いアプローチですが、この目的のためだけに多くの POM を変更する必要があります。

4

1 に答える 1

21

私は同様のチームに所属しており、他の人にツールを提供しています。親 POM ( ではない)をsettings.xml以下のように設定します。-DuseTestRepo=true私のチーム メンバーの 1 人がmvn コマンド ラインに追加しない限り、prod バージョンはアクティブです。アクティベーションを変更して、Jenkins サーバーにのみ存在する特定のファイルを探すことを試すことができます (たとえば)。また、Maven がリポジトリ URL のプロパティを補間するかどうかも疑問に思っています。その場合は、 settings.xml で実行<url>${my.remote.repo}/releases</url>および定義できmy.remote.repoます。それは試していません。

<profiles>
    <profile>
        <id>test-repository</id>
        <activation>
            <property>
                <name>useTestRepo</name>
                <value>true</value>
            </property>
        </activation>
        <properties>
        </properties>
        <distributionManagement>
            <repository>
                 <!-- ... -->
            </repository>
            <snapshotRepository>
                 <!-- ... -->
            </snapshotRepository>
        </distributionManagement>
    </profile>

    <profile>
        <id>prod-repository</id>
        <activation>
            <property>
                <name>!useTestRepo</name>
            </property>
        </activation>
        <properties>
        </properties>
        <distributionManagement>
            <repository>
                 <!-- ... -->
            </repository>
            <snapshotRepository>
                 <!-- ... -->
            </snapshotRepository>
        </distributionManagement>
    </profile>

実験的な親 POM の配信 (展開) に関しては、テスト用の Nexus リポジトリに展開することになりますよね? そして、あなたの開発者は誰もそれにアクセスしていません。あなただけです。したがって、Artifactory には実際のcom.company:corporate-parent:1.0POM が含まれ、Nexus にはcom.company:corporate-parent:1.0テストに必要な変更が含まれます。

また、2 つのリモート リポジトリのアーティファクトが混在しないように、settings.xml のローカル リポジトリを変更することも検討します。

于 2013-05-02T16:52:33.577 に答える