[解決済み] mavenのdistributionManagementを組織全体で指定する方法は?
質問
私は、多くの(およそ50以上の)maven2プロジェクトを整理して、それらが中央のnexusリポジトリにデプロイできるようにする方法を見つけようとしています。このような場合
mvn deploy
のように、distributionManagement タグでターゲットを指定する必要があります。
<distributionManagement>
<repository>
<id>nexus-site</id>
<url>http://central_nexus/server</url>
</repository>
</distributionManagement>
さて、(50以上のpom.xmlのうち)すべてのpom.xmlにこのブロックが何度も何度も含まれるのは困ります。まず最初に考えるのは
settings.xml
ファイルでは定義できないようです(設計上)。
そこで、まず疑問に思うのは、なぜそうなのか、ということです。もし可能であれば、すべての開発者に配布されるmaven2ディストリビューションのsettings.xmlでそれを指定することができるのですが。
私が見つけた唯一の可能な解決策は、これらの設定を含む組織全体の master-pom プロジェクトを作成し、他のすべての pom.xml を、以下の方法でこの master-pom に依存させることでした。
<parent>
タグを使用します。しかし、これはマルチモジュールビルドではちょっと変な感じです。
- master configuration POM (pm)
- Project 1 parent pom (p1 with module 1 and module 2 as modules)
- Project 1 module pom (with pm as parent)
- Project 2 module pom (with pm as parent)
通常、私はすべてのドキュメントで、モジュールのpomは別のものでなく、親のpomを使用すべきであると読みます。しかし、mavenのサイトで継承と集約について読んだ後、それは確かに可能であると書かれています。
このセットアップには問題があるようです(モジュールが直接後方参照されない場合、正しくリンクされません)。
それで、この方法は有効ですか?他にもっと明白でシンプルな問題解決方法がありますか?
解決方法は?
この問題の最良の解決策は、組織内のすべてのプロジェクトに対して、単純な親Pomファイルプロジェクト(パッケージング「pom」付き)を汎用的に作成することです。
<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>your.company</groupId>
<artifactId>company-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<distributionManagement>
<repository>
<id>nexus-site</id>
<url>http://central_nexus/server</url>
</repository>
</distributionManagement>
</project>
これはビルド、リリース、そしてローカルネクサスにデプロイすることができ、誰もがそのアーティファクトにアクセスできるようになります。
これを使用したいすべてのプロジェクトでは、このセクションを含めるだけでよいのです。
<parent>
<groupId>your.company</groupId>
<artifactId>company-parent</artifactId>
<version>1.0.0</version>
</parent>
このソリューションにより、あなたの会社のすべてのプロジェクトに、他の共通のものを簡単に追加することができます。例えば、JUnitの使い方を特定のバージョンに標準化したい場合、これはそのための完璧な場所となるでしょう。
親を持つマルチモジュール構造のプロジェクトがある場合、Mavenは連鎖継承もサポートしているので、プロジェクトの親のpomファイルを会社の親のpomを参照させ、プロジェクトの子モジュールは会社の親を意識しないようにすることも全く問題ないでしょう。
あなたのプロジェクト構造の例から、親プロジェクトをアグリゲータpomと同じレベルに置こうとしていることがわかります。プロジェクトに親が必要な場合、私が見つけた最良の方法は、残りのモジュールと同じレベルで親をインクルードし、すべてのモジュールのディレクトリが存在するルートにアグリゲータの pom.xml ファイルを配置することです。
- pom.xml (aggregator)
- project-parent
- project-module1
- project-module2
この構造で行うことは、アグリゲータに親モジュールを含め、すべてを
mvn install
をルートディレクトリから取得します。
私の組織では、まさにこの解決策を使用しており、時の試練に耐え、私たちにとって非常にうまく機能しています。
関連
-
[解決済み】Javaで無限大を実装する方法とは?
-
[解決済み】Java Error "Exception in thread "main" java.util.InputMismatchException" Array プログラムで発生。
-
[解決済み] JavaでSSLピアが正しくシャットダウンされない
-
[解決済み] Mavenを使用して、依存関係を持つ実行可能なJARを作成するにはどうすればよいですか?
-
[解決済み] MavenにおけるdependencyManagementとdependenciesの相違点
-
[解決済み] IntelliJのインスペクションで「シンボルを解決できない」と表示されたが、コードはコンパイルされる
-
[解決済み] 複数モジュールのMavenプロジェクトでモジュールのバージョン番号を更新する
-
[解決済み】Maven モジュール + 特定の単一モジュールのビルド
-
[解決済み】Mavenの親POMとモジュールPOMの比較
-
[解決済み】mavenでJavaのバージョンを指定する - プロパティとコンパイラープラグインの相違点
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] if / for / while 内で "Missing return statement" が発生する。
-
[解決済み】"実引数リストと形式引数リストの長さが異なる"
-
[解決済み】エラー「No enclosing instance of type Foo is accessible」の原因と修正方法について教えてください。
-
[解決済み】指定された子にはすでに親がいます。先に子の親に対してremoveView()を呼び出す必要がある(Android)
-
[解決済み】Eclipseがエラーメッセージ "Java was started but returned exit code = 1" を返す
-
[解決済み】破損したjarファイル
-
[解決済み】Ubuntu: OpenJDK 8 - パッケージを見つけることができません。
-
[解決済み】intがnullであるかどうかを確認する方法
-
[解決済み】javaで無効な文字定数
-
[解決済み】Eclipseで「パッケージエクスプローラー」ビューが見つからない