簡體   English   中英

Java游樂場的Gradle任務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM