Mavenは、単純なコマンドラインでサードパーティの依存関係をインストールして展開する
質問
どこにもホストされていないサードパーティの依存関係が多数あります。これらのそれぞれに、リポジトリにインストールおよび/または展開できるようにするJARファイルがあります。一部のJARファイルには独自の依存関係があり、これらを宣言する必要があります。
GroupID、ArtifactID、依存関係などを宣言する各JARファイルのpom.xmlファイルを作成しました。これらのpom.xmlファイルにはすべて、共通情報の一部を宣言する共通の親pomがあります(例: <repositories>
と <distributionManagement>
).
これらの依存関係を単純なものでインストールまたは展開できるようにしたい mvn install
と mvn deploy
(または多分 mvn install:install-file
と mvn deploy:deploy-file
)そして、これらのコマンドに必要なすべてのプロパティを持っています(artifactId
, repositoryId
, 、など)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
すべての子供ポンアーティファクトを展開します。おそらく、私は取得するように似たようなことをすることができます mvn install:install-file
働くために。
しかし、このアプローチでは、親POMをリリースすることができません(子供のPOMがそれに依存しているので、これをしなければなりません)、そして私がしようとするなら mvn release:perform
親pomで、次のようなエラーがあります。
Cannot override read-only parameter: pomFile
私はおそらくこれについて間違った方法で行っているように感じます。私が本当にやりたいのは:
- すべてのサードパーティの瓶の共通コードを1つの共有親POMに入れます
- サードパーティごとに追加の最小POMを書くjar
- のようなものを実行できるようになります
mvn install
またmvn deploy
これらすべての複雑なコマンドラインプロパティを指定する必要がありません
どうすればそれを最もよく達成できますか?
編集: 理想的には、私が単純なものと同じくらい単純なものを実行できるようにしたいと思っていることを明確にしました mvn install
また mvn deploy
コマンドラインにプロパティを指定する必要はありません。
解決 2
わかりました、私はただ実行できるソリューションを見つけました mvn install
また mvn deploy
JARファイルをローカルまたはリモートリポジトリにインストールします。に触発された Maven-Usersリストへの投稿 とを使用します ビルドヘルパープラグイン, 、親のpomで、私は持っています:
<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>
そして、子供のポンズに、私は持っています:
<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>
最初に私をつまずかせたこの部分のいくつか:
-
attach-artifact
実行は下にある必要があります<pluginManagement>
したがって、あなたが実行されない場合は実行されませんmvn install
またmvn deploy
親pom。 - 子供は指定する必要があります
build-helper-maven-plugin
親からのコードをビルドプラグインの下に<pluginManagement>
実行されます。 - 子どもたちは持っていると宣言されなければなりません
<packaging>pom</packaging>
アーティファクトと同じ名前がある場合、jarをアーティファクトに追加できないためです。
このアプローチに見られる唯一の欠点は、アーティファクトがタイプとして展開されることです pom
タイプの代わりに jar
. 。しかし、私はその本当の結果を見ていません。
他のヒント
Mavenが依存関係を逃している場合、リモートリポジトリにJARを追加するために発行するコマンドラインを含む出力にエラーが発生します。そのコマンドラインは、自動的にPOMを作成し、2つを一緒にアップロードします。それはあなたのニーズに十分ではありませんか?
この施設を使用して、リモートリポジトリ表現がない依存関係があることがわかっている場合は、通常、ビルドでビルドでそれを定義し、ビルドを一度実行してから、ビルドエラーを見てください。展開のコマンドをコピーしてから、そのコマンドを実行します。あなたはあなたが持っていることを確認する必要があります <repository>
PARNPOM Plusで適切にセットアップされた要素も対応するセットアップ <server>
あなたの要素 settings.xml
リポジトリアップロードパスワードを使用して。それ以外は、行くのがいいはずです。
遠くに行く前に、ネクサスをチェックする必要があると付け加えます。今セットアップするのは面倒です! :-)
私は私の仕事でこの問題に会います:
今、私はターゲットを持っています。jar(依存関係リストがあります:A.jar、b.jar、c.jar ...)、私は使いたいです
mvn install:install-file
それを私のローカルレポジトリに入れますが、コマンドブローを実行するとき
mvn install:install-file -Dfile=/Users/username/.../target.jar -DgroupId=com.cnetwork.relevance -DartifactId=target -Dversion=1.0.0
しかし、私がそれを使用するとき、私は多くのエラーがあることがわかりました、ターゲットを使用するjarはjarが見つかりません a.jar
, b.jar
, c.jar
, 、 そのような:
com.cnetwork.a does not exist
com.cnetwork.b does not exist
com.cnetwork.c does not exist
それから私は行きました ~/.m2/repository/.../target/1.0.0/target.pom
ターゲットのPOMファイルを見つけるが、何もない!
...
<groupId>com.cnetwork.relevance</groupId>
<artifactId>target</artifactId>
<version>1.0.0</version>
....
# no dependencies about a/b/c.jar !!!
これが何が悪いのかです install:file -Dfile -DgroupId -D..
POMに依存関係を追加しません、私はこの方法で答えを修正します
すでにあなたがいれば
have this maven project source
, 、ローカルリポジトリにインストールするだけですmvn clean install
もし、あんたが
have the jar and the pom of it
, 、POMでJARを取り付けますmvn install:install-file -Dfile=/.../.../target.jar -DpomFile=/.../../target.pom
もし、あんたが
don't have a pom with target jar
, 、1つを書き、上部コマンドを使用します。POMファイルを回復できない場合は、あきらめる必要があります。