我对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
通过排除来更改我正在使用的I 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
}
}
另一种方法可能是让我build
在调用时替换另一个任务./gradlew build buildDocker
,例如./gradlew playground buildDocker
。这更实用吗?
我建议用gradle项目属性替换您的硬编码主类。
jar {
manifest {
attributes 'Main-Class': main
}
}
在gradle.properties
文件中设置该默认属性。
main=com.myapp.Main
最后,当您需要构建使用jar运行的com.myapp.Playground
docker容器时,可以使用以下命令调用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
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句