0

次のようなマルチモジュールのmavenプロジェクトがあります。

upsilon-node (packaging: pom)
|--- upsilon-jar (contains the actual source code - .java files, produces a .jar)
|--- upsilon-node-rpm-fedora (produces a Fedora RPM, from the upsilon-jar's .jar)
|--- upsilon-node-rpm-debian (products a Debian DEB, from the upsilon-jar's .jar)
|--- upsilon-node-nsis (produces a .exe installer, from the upsilon-jar's .jar)
|--- (various other packages)

2 つの質問があります。

1) 私にとって、.java ソース コードは論理的には親の upsilon-node プロジェクトに配置する必要がありますが、packaing が .jar に設定されている場合、サブモジュールを使用できないようです。サブモジュールは、package:pom プロジェクトからのみ可能です。

2) これは正常に見えますか? ここでのベスト プラクティスに従っていますか? 1 つのプロジェクトで正確に 1 つのアーティファクトを生成する必要があることをどこかで読みました。

あなたの考えを聞くのを楽しみにしています、ありがとう!


プロジェクトは GitHub にあることに注意してください: https://github.com/upsilonproject/upsilon/tree/master/upsilon-node

私が現在ベストプラクティスに従っているように見えるものは何でも、それを聞きたいと思っています。

4

1 に答える 1

0

Maven では、ベスト プラクティスであり、もちろん Maven 自体によってサポートされています (これは要件を意味します) はupsilon-node、ケースの親にコードを含めないことです (maven は packging を定義することを強制しますpom)。通常、プラグイン (適切なバージョンなど)、すべてのモジュールの依存関係、構成 (エンコーディングなど) を定義します。

たとえば、親でエンコーディングを定義したとします。

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

子モジュールでそれを繰り返す必要がない場合は、子モジュールに継承されるためです。

ビルド内のそれとは別に、必要と思われるモジュール間の依存関係を定義していませんでした。これにより、予期しないビルド結果が生じる可能性があります。たとえば、tgz を生成するモジュールがありますが、使用されたアーティファクトが以前にビルドされたことを確認できません。そのため、モジュール間の依存関係を定義して、maven リアクターが実行順序を定義できるようにします。

したがって、rule1つのpomに加えて、1つのアーティファクトは多かれ少なかれ真実であると言えます。これは、単に複数のアーティファクトを作成できるルール(node-tgz)に「違反」するモジュールをすでに使用しているためです。

于 2013-11-09T12:01:42.163 に答える