[英]Gradle task for Java playground
我仍然是Docker和Gradle的新手,但我正在嘗試設置構建Docker鏡像的Gradle構建。
我剛剛設置了一個Dockerfile
,它在本地部署並按預期運行jar。 我在build.gradle
有這個:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'se.transmode.gradle:gradle-docker:1.2'
}
}
plugins {
id 'com.github.johnrengelman.shadow' version '1.2.3'
}
apply plugin: 'docker'
jar {
manifest {
attributes 'Main-Class': 'com.myapp.Main'
}
}
task buildDocker(type: Docker, dependsOn: shadowJar) {
push = false
applicationName = jar.baseName
tagVersion = 'latest'
dockerfile = file('src/main/docker/Dockerfile')
copy {
from shadowJar
into stageDir
}
}
我運行./gradlew build buildDocker
來構建映像。 到目前為止,我很滿意。
通常我創建一個一次性類(例如Playground.java
),使用我可以運行和忽略的main
方法。 通常我只是在IDE中運行它,但現在我希望能夠連接到我知道將運行的其他Docker容器。
我知道我可以嘗試改變sourceSets
我使用排除com.myapp.Main
,但我想象有可能是一個更優雅的解決方案類似這樣的:
task buildDockerPlayground(type: Docker, dependsOn: shadowJar) {
main = 'com.myapp.Playground'
push = false
applicationName = jar.baseName
tagVersion = 'latest'
dockerfile = file('src/main/docker/Dockerfile')
copy {
from shadowJar
into stageDir
}
}
另一種方法可能是在我調用./gradlew build buildDocker
時使用另一個替換build
任務,例如./gradlew playground buildDocker
。 這更實用嗎?
我建議用gradle項目屬性替換你的硬編碼主類。
jar {
manifest {
attributes 'Main-Class': main
}
}
在gradle.properties
文件中設置該默認屬性。
main=com.myapp.Main
最后,當您需要構建使用運行com.myapp.Playground
的jar的com.myapp.Playground
容器時,您可以使用以下com.myapp.Playground
調用gradle:
./gradlew buildDocker -Pmain=com.myapp.Playground
編輯:在任務中實現相同的目標
project.ext.main = 'com.myapp.Main'
task play(){
project.main = 'com.myapp.Playground'
finalizedBy buildDocker
}
jar {
manifest {
attributes 'Main-Class': project.main
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.