【发布时间】:2016-07-29 19:10:07
【问题描述】:
我仍然是 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 来构建映像。到目前为止,我对此感到满意。
通常我会使用 main 方法创建一个一次性类(例如 Playground.java),我可以运行并忽略它。通常我只是在 IDE 中运行它,但现在我希望能够连接到我知道将运行的其他 Docker 容器。
我知道我可以尝试通过排除com.myapp.Main 来更改我正在使用的sourceSets,但我想可能会有一个更优雅的解决方案,类似于这样:
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。这样更实用吗?
【问题讨论】: