Maven と Gradle が同じ柔軟性を提供して、プロジェクトごとに複数のソース フォルダーの複数の jar ファイルを生成できるかどうかを調査する必要があります。
これが一般的に推奨されないことはわかっていますが、この要件に関しては、2 つのビルド ツールの機能/柔軟性を比較する必要があります (マルチモジュール Maven プロジェクト構造は現在オプションではありません)。
グラドル
Gradle では、これは非常に単純です。
sourceSets {
main {
java {
srcDir 'src'
}
}
other {
java {
srcDir 'other'
}
}
}
task otherJar(type: Jar) {
from sourceSets.other.output
classifier = 'other'
customName = 'other.jar'
}
これを gradle でビルドすると、クラスファイルは次のように編成されます。
build
> classes
> main
> com
> other
> com
対応するクラスがどのソース フォルダから発生したかを「バックトラック」できるため、これは非常に便利です。その結果、各 sourceSet に同一のパッケージ名を付けても、正しいクラスを持つ個別の jar ファイルを取得できます。
メイヴン
Mavenでは、これは不可能のようです。build-helper-maven-plugin (複数のソース フォルダーを指定するため) とmaven-jar-plugin (複数の jar ファイルを構築するため)の組み合わせを使用することは可能ですが、パッケージ レベルでソースを分割することしかできません。除外を参照し、maven-jar-pluginに含めます。
私が理解しているように、これは、コンパイルされたクラスが、maven の元のソースフォルダーに基づいてターゲット/クラスフォルダーに編成されていないという事実に由来します。
したがって、次のことが必要な場合:
- プロジェクトに複数のソース フォルダーを用意し、ソース フォルダー間に同じ名前のパッケージを含めることができます。
- ソースフォルダーごとに jar ファイルを生成します。
gradle (またはこの柔軟性を提供する他のビルド ツール) を使用する必要があります。または、同じ柔軟性を提供する maven の秘密のバックドアを見逃したことがありますか?