Java游乐场的Gradle任务

Ordonezalex

我仍然对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.javamain方法来创建一个抛出类(例如通常,我只是在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.Playgrounddocker容器时,可以使用以下命令调用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章