請注意:雖然我myapp-server
是DropWizard app,這是嚴格意義上的搖籃問題;我只提到DropWizard的好處。只在特定的子項目運行搖籃ShadowJar插件
我有我有搖籃建設多項目構建:
myapp/
myapp-client/
myapp-shared/
myapp-server/
build.gradle
settings.gradle
凡settings.gradle
樣子:
include ':myapp-shared'
include ':myapp-client'
include ':myapp-server'
我已經成功地得到了搖籃編譯我的Groovy源代碼,運行單元測試,生成GroovyDocs,併爲所有3個子項目打包二進制和源JAR。構建調用爲:gradle clean build groovydoc sourcesJar -Pversion=<whatever version I specify>
。
的myapp-server
實際上是我需要運行在Shadow JAR plugin,這是通常通過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
}
我的問題:如何配置搖籃僅在我myapp-server
子項目運行shadowJar
任務,而不是任何其他人?理想情況下,我可以有我的生成調用是這樣的:
gradle clean build groovyDoc sourceJar shadowJar -Pversion=<blah>
然後以某種方式配置搖籃無視一切運行shadowJar
除了myapp-server
。想法?
更新
當我運行gradle clean build groovyDoc sourceJar shadowJar -Pversion=0.1.3
我看到結尾搖籃輸出的一串:
: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的類(它應該是一個「胖JAR」)。例如,myapp-server
取決於DropWizard。所有的DropWizard類都應該放在這個JAR中。所有DropWizard的傳遞依賴應該在這個JAR裏面有類文件,等等。
據我瞭解'陰影'被添加到'myapp-server'?從根目錄運行'gradle clean build groovyDoc sourceJar shadowJar -Pversion ='的結果是什麼? –
Opal
謝謝@Opal(如果我有代表這樣做,我會贊成你),請參閱我的更新,它會回答你的問題。有什麼想法嗎? – smeeb
該項目是否在線?我可以試試嗎? – Opal