gpt4 book ai didi

java - Java playground 的 Gradle 任务

转载 作者:搜寻专家 更新时间:2023-10-31 20:32:38 25 4
gpt4 key购买 nike

我对 Docker 和 Gradle 还是个新手,但我正在尝试设置一个 Gradle 构建来构建 Docker 镜像。

我刚刚完成了一个 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 容器。

我知道我可以尝试通过排除 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。这样更实用吗?

最佳答案

我建议用 gradle 项目属性替换您的硬编码主类。

jar {
manifest {
attributes 'Main-Class': main
}
}

在您的 gradle.properties 文件中设置该默认属性。

main=com.myapp.Main

最后,当您需要构建使用 jar 运行的 docker 容器时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
}
}

关于java - Java playground 的 Gradle 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38665974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com