6

どこにもホストされていないサードパーティの依存関係が多数あります。これらのそれぞれについて、リポジトリにインストールおよび/またはデプロイできるようにしたいjarファイルがあります。一部の jar ファイルには独自の依存関係があり、これらも宣言する必要があります。

groupId、artifactId、依存関係などを宣言する各 jar ファイルの pom.xml ファイルを作成しました。これらの pom.xml ファイルにはすべて、共通の情報 (<repositories>および など<distributionManagement>) を宣言する共通の親 pom があります。

mvn installこれらの依存関係をand mvn deploy(またはおそらくmvn install:install-fileand )のような単純なものでインストールまたはデプロイしmvn deploy:deploy-file、これらのコマンドに必要なすべてのプロパティ ( artifactIdrepositoryIdなど) を pom.xml ファイルから読み取れるようにしたいと考えています。

これを機能させるために、少なくとも展開のために、親のpomに次を入れてみました:

<build>
  <plugins>
    <plugin>
      <artifactId>maven-deploy-plugin</artifactId>
      <version>2.4</version>
      <configuration>
        <file>${jarfile}</file>
        <pomFile>pom.xml</pomFile>
        <repositoryId>our-id</repositoryId>
        <url>our-url</url>
      </configuration>
    </plugin>
  </plugins>
</build>

次に、各子 pom でjarfileプロパティを定義します。これにより、実行mvn deploy:deploy-fileしてすべての子 pom アーティファクトをデプロイできます。おそらく、私はmvn install:install-file仕事に就くために同様のことをすることができます。

しかし、このアプローチでは、親の pom を解放できません (子の pom がそれに依存しているため、これを行う必要があります)。親の pom を解放しようとするとmvn release:perform、次のようなエラーが発生します。

Cannot override read-only parameter: pomFile

私はおそらくこれについて間違った方法で進んでいるような気がします。私が本当にやりたいことは次のとおりです。

  • すべてのサードパーティ jar の共通コードを 1 つの共有親 pom に入れる
  • サードパーティの jar ごとに追加の最小限の pom を書き込む
  • 複雑なコマンド ライン プロパティをすべて指定する必要なく、mvn installまたはのようなものを実行できるmvn deploy

どうすればそれを達成できますか?

編集:理想的には、コマンドラインでプロパティを指定する必要がないmvn installか、同じくらい単純なものを実行できるようにしたいということを明確にしました。mvn deploy

4

3 に答える 3

2

mvn installわかりました。またはmvn deploy、jarファイルをローカルまたはリモートリポジトリにインストールするだけで実行できるソリューションを見つけました。maven-usersリストへの投稿に触発され、親pomでbuild-helperプラグインを使用すると、次のようになります。

<pluginManagement>
    <plugins>
        <!-- Attach the jar file to the artifact -->
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>1.5</version>
            <executions>
                <execution>
                    <id>attach-artifacts</id>
                    <phase>package</phase>
                    <goals>
                        <goal>attach-artifact</goal>
                    </goals>
                    <configuration>
                        <artifacts>
                            <artifact>
                                <file>${artifactId}-${version}.jar</file>
                                <type>jar</type>
                            </artifact>
                        </artifacts>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</pluginManagement>

そして、子pomsで、私は持っています:

<packaging>pom</packaging>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
...
<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

最初に私をつまずかせたこの部分のいくつか:

  • あなたまたは親pomが実行されないように、実行attach-artifactは下にある必要があります。<pluginManagement>mvn installmvn deploy
  • build-helper-maven-plugin親からのコードが実行されるように、子はビルドプラグインの下を指定する必要があります<pluginManagement>
  • <packaging>pom</packaging>アーティファクトと同じ名前のjarをアーティファクトに追加できないため、子は持っていると宣言する必要があります。

このアプローチの唯一の欠点は、アーティファクトがタイプpomではなくタイプとしてデプロイされることjarです。しかし、私はその実際の結果を見たことがありません。

于 2011-01-09T16:53:40.747 に答える
2

Maven に依存関係がない場合、リモート リポジトリに jar を追加するために発行するコマンド ラインを含む出力にエラーが表示されます。そのコマンド ラインは自動的に POM を作成し、2 つを一緒にアップロードします。それはあなたのニーズに十分ではありませんか?

この機能を使用して、リモート リポジトリ表現のない依存関係があることがわかっている場合は、通常、必要な GAV を使用してビルドで定義し、ビルドを 1 回実行してから、ビルド エラーを確認します。デプロイ用のコマンドをコピーして、そのコマンドを実行します。<repository>親POMで要素が適切に設定されていることを確認し、リポジトリアップロードパスワードを使用して対応する<server>要素も設定する必要があります。settings.xmlそれ以外は、準備万端です。

遠くに行く前に、Nexusをチェックする必要があることを付け加えておきます. 面倒な設定を今すぐ行う価値があります。:-)

于 2011-01-08T14:23:15.727 に答える