私はgradleプロジェクトを持っています。2 つのサブプロジェクト (common と application) を持つルート Gradle フォルダーがあります。
| -common/
-build-gradle
| -application/
| -build.gradle
|build.gradle
|settings.gradle
一般
- ShadowJar を介して、すべての jar 依存関係を含む JAR ファイルを出力します。
- Maven 中央リポジトリからの依存関係のみがあり、他の依存関係はありません
応用
- WARファイルを出力
- 依存関係として Common の shadowJar があります。
- Maven 中央リポジトリからの追加の依存関係があります
達成したいこと
アプリケーションでgradle warを実行するとき、すべての Maven 依存関係と Common プロジェクトの ShadowJar を含む jar を作成したいと考えています。
問題は ShadowJar 部分にあります。Application でgradle warを実行すると Common にアーティファクトがビルドされません。shadowJar をビルドして戦争に含めたいと思います。
現在のソリューション これをルートのbuild.gradleに追加しました
subprojects{
tasks.jar.enabled = false
artifacts{
shadowJar
}
build.dependsOn(shadowJar);
}
Application/build.gradle には、もう 1 行あります。
compile files('../common/build/libs/common.jar')
次に、ルートでビルド タスクを実行します。どういうわけか、共通プロジェクトが最初にビルドされ、ShadowJar がアプリケーションの WAR に含まれます。
これは最適とは言えません。固定ファイル名を指すのではなく、コンパイル プロジェクト (':common') として定義された Common へのアプリケーションの依存関係を持ちたいと思います。ただし、「プロジェクトをコンパイルする」ステートメントは、明らかに Common モジュールで shadowJar を生成せず、それを Application モジュールの WAR に含めません。