注:私myapp-server
はDropWizard アプリですが、これは厳密にはGradleに関する質問です。適切な測定のために、DropWizard についてのみ言及します。
Gradle でビルドしているマルチプロジェクト ビルドがあります。
myapp/
myapp-client/
myapp-shared/
myapp-server/
build.gradle
settings.gradle
次settings.gradle
のようになります。
include ':myapp-shared'
include ':myapp-client'
include ':myapp-server'
Gradle で Groovy ソース コードをコンパイルし、単体テストを実行し、GroovyDocs を生成し、3 つのサブプロジェクトすべてのバイナリ JAR とソース JAR の両方をパッケージ化することに成功しました。ビルドの呼び出し: gradle clean build groovydoc sourcesJar -Pversion=<whatever version I specify>
.
myapp-server
実際には、Shadow JAR プラグインを実行する必要があるプロジェクトであり、通常はを介して実行されgradle clean build shadowJar
ます。
これが私のものmyapp-server/build.gradle
です:
import com.github.jengelman.gradle.plugins.shadow.transformers.ServiceFileTransformer
apply plugin: 'application'
apply plugin: 'shadow'
mainClassName = 'com.me.myapp.server.MyAppServer'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:0.8'
}
}
dependencies {
compile project(':myapp-shared')
compile (
'io.dropwizard:dropwizard-core:0.7.1'
)
}
shadow {
outputFile new File(destinationDir, "${outputJarBaseName}.${extension}")
transformer(ServiceFileTransformer)
exclude 'META-INF/*.DSA'
exclude 'META-INF/*.RSA'
}
jar {
manifest {
attributes 'Main-Class': mainClassName
}
}
run {
args 'server', 'config.json'
if (System.getProperty('debug', 'false') == 'true') {
jvmArgs '-Xdebug', '-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005'
}
}
artifacts {
shadowJar
}
私の質問:サブプロジェクトでのみタスクを実行し、他のプロジェクトでは実行しないように Gradle を構成するにはどうすればよいですか? shadowJar
myapp-server
理想的には、ビルド呼び出しを次のようにすることができます。
gradle clean build groovyDoc sourceJar shadowJar -Pversion=<blah>
そして、どういうわけか、Gradle を除くshadowJar
すべての実行を無視するように構成します。アイデア? myapp-server
アップデート
実行するgradle clean build groovyDoc sourceJar shadowJar -Pversion=0.1.3
と、次で終わる一連の Gradle 出力が表示されます。
:myapp-shared:groovydoc
:myapp-client:sourcesJar
:myapp-server:sourcesJar
:myapp-shared:sourcesJar
:myapp-server:copySignedLibs UP-TO-DATE
:myapp-server:shadowJar
BUILD SUCCESSFUL
Total time: 16.315 secs
ただし、ドリルダウンしmyapp-server/build/libs/myapp-server-0.1.3.jar
て開くと (ZIP のように抽出します)、コンパイルされたクラスのみが表示され、依存するすべての JAR のすべてのクラスは表示されません (「Fat JAR」である必要があります)。たとえば、myapp-server
DropWizard に依存します。すべての DropWizard クラスは、この JAR 内にある必要があります。DropWizard のすべての推移的な依存関係には、この JAR 内にクラス ファイルが含まれている必要があります。