首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >gradle docker插件bmuschko将一个build.gradle拆分为两个文件会出现错误

gradle docker插件bmuschko将一个build.gradle拆分为两个文件会出现错误
EN

Stack Overflow用户
提问于 2018-05-17 23:15:38
回答 2查看 2.7K关注 0票数 1

我刚开始使用gradle脚本。我有一个build.gradle文件,我想将其拆分为两个文件。拆分较大的build.gradle文件后,我得到了以下两个文件。

build.gradle

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
buildscript {
    ext {
        springBootVersion = '1.5.12.RELEASE'
        gradleDockerVersion = '3.2.7'
    }
    repositories {
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath("com.bmuschko:gradle-docker-plugin:${gradleDockerVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

jar {
    baseName = 'gs-spring-boot'
    version =  '0.1.0'
}

repositories {
    mavenCentral()
}

sourceCompatibility = 1.8
targetCompatibility = 1.8
compileJava.options.encoding = 'UTF-8'

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile("junit:junit")
}
project.ext.imageName = 'myImage'
project.ext.tagName ='myTag'
project.ext.jarName = (jar.baseName + '-' + jar.version).toLowerCase()

apply from: 'dockerapp.gradle'

dockerapp.gradle

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def gradleDockerVersion = '3.7.2'
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath("com.bmuschko:gradle-docker-plugin:${gradleDockerVersion}")
    }
}

apply plugin: 'com.bmuschko.docker-remote-api'

import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
import com.bmuschko.gradle.docker.tasks.image.DockerRemoveImage
import com.bmuschko.gradle.docker.tasks.image.Dockerfile

def imageName = project.ext.imageName
def tagName = project.ext.tagName
def jarName = project.ext.jarName

task createAppDockerfile(type: Dockerfile) {
    // Don't create dockerfile if file already exists
    onlyIf { !project.file('Dockerfile').exists() }
    group 'Docker'
    description 'Generate docker file for the application'
    dependsOn bootRepackage
    destFile = project.file('Dockerfile')
    String dockerProjFolder = project.projectDir.name
    from 'openjdk:8-jre-slim'
    runCommand("mkdir -p /app/springboot/${dockerProjFolder} && mkdir -p /app/springboot/${dockerProjFolder}/conf")
    addFile("./build/libs/${jarName}.jar", "/app/springboot/${dockerProjFolder}/")
    environmentVariable('CATALINA_BASE', "/app/springboot/${dockerProjFolder}")
    environmentVariable('CATALINA_HOME', "/app/springboot/${dockerProjFolder}")
    workingDir("/app/springboot/${dockerProjFolder}")
    if (System.properties.containsKey('debug')) {
        entryPoint('java', '-Xdebug', '-Xrunjdwp:server=y,transport=dt_socket,address=5005,suspend=n', '-jar', "/app/springboot/${dockerProjFolder}/${jarName}.jar")
    } else {
        entryPoint('java', '-jar', "/app/springboot/${dockerProjFolder}/${jarName}.jar")
    }
}

task removeAppImage(type: DockerRemoveImage) {
    group 'Docker'
    description 'Remove the docker image using force'
    force = true
    targetImageId { imageName }
    onError { exception ->
        if (exception.message.contains('No such image')) {
            println 'Docker image not found for the current project.'
        }
    }
}

task createAppImage(type: DockerBuildImage) {
    group 'Docker'
    description 'Executes bootRepackage, generates a docker file and builds image from it'
    dependsOn(createAppDockerfile, removeAppImage)
    dockerFile = createAppDockerfile.destFile
    inputDir = dockerFile.parentFile
    if (tagName)
        tag = "${tagName}"
    else if (imageName)
        tag = "${imageName}"
    else
        tag = "${jarName}"
}

如果我尝试运行命令./gradlew createAppImage,则会得到如下错误:

dockerapp.gradle文件中的其他两个任务似乎工作正常。如果我将所有代码放在build.gradle文件中,它就能正常工作,不会出现任何错误。拆分文件并执行createAppImage而不会出错的最佳方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-29 23:06:13

我在CDancy (插件的维护者)的帮助下解决了这个问题,如下所示:

build.gradle

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
buildscript {
    ext {
        springBootVersion = '1.5.12.RELEASE'
        gradleDockerVersion = '3.2.7'
    }
    repositories {
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath("com.bmuschko:gradle-docker-plugin:${gradleDockerVersion}")
    }
}    

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'    

jar {
    baseName = 'gs-spring-boot'
    version =  '0.1.0'
}    

repositories {
    mavenCentral()
}    

sourceCompatibility = 1.8
targetCompatibility = 1.8
compileJava.options.encoding = 'UTF-8'    

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile("junit:junit")
}
project.ext.imageName = 'myimage'
project.ext.tagName ='mytag'
project.ext.jarName = (jar.baseName + '-' + jar.version).toLowerCase()    

apply from: 'docker.gradle'

docker.gradle

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.bmuschko:gradle-docker-plugin:3.2.7'
    }
}
repositories {
    jcenter()
}
// use fully qualified class name
apply plugin: com.bmuschko.gradle.docker.DockerRemoteApiPlugin    

// import task classes
import com.bmuschko.gradle.docker.tasks.image.*    

def imageName = project.ext.imageName
def tagName = project.ext.tagName
def jarName = project.ext.jarName    

task createAppDockerfile(type: Dockerfile) {
    // Don't create dockerfile if file already exists
    onlyIf { !project.file('Dockerfile').exists() }
    group 'Docker'
    description 'Generate docker file for the application'
    dependsOn bootRepackage
    destFile = project.file('Dockerfile')
    String dockerProjFolder = project.projectDir.name
    from 'openjdk:8-jre-slim'
    runCommand("mkdir -p /app/springboot/${dockerProjFolder} && mkdir -p /app/springboot/${dockerProjFolder}/conf")
    addFile("./build/libs/${jarName}.jar", "/app/springboot/${dockerProjFolder}/")
    environmentVariable('CATALINA_BASE', "/app/springboot/${dockerProjFolder}")
    environmentVariable('CATALINA_HOME', "/app/springboot/${dockerProjFolder}")
    workingDir("/app/springboot/${dockerProjFolder}")
    if (System.properties.containsKey('debug')) {
        entryPoint('java', '-Xdebug', '-Xrunjdwp:server=y,transport=dt_socket,address=5005,suspend=n', '-jar', "/app/springboot/${dockerProjFolder}/${jarName}.jar")
    } else {
        entryPoint('java', '-jar', "/app/springboot/${dockerProjFolder}/${jarName}.jar")
    }
}    

task removeAppImage(type: DockerRemoveImage) {
    group 'Docker'
    description 'Remove the docker image using force'
    force = true
    targetImageId { imageName }
    onError { exception ->
        if (exception.message.contains('No such image')) {
            println 'Docker image not found for the current project.'
        } else {
            print exception
        }
    }
}    

task createAppImage(type: DockerBuildImage) {
    group 'Docker'
    description 'Executes bootRepackage, generates a docker file and builds image from it'
    dependsOn(createAppDockerfile, removeAppImage)
    dockerFile = createAppDockerfile.destFile
    inputDir = dockerFile.parentFile
    if (tagName)
        tag = "${tagName}"
    else if (imageName)
        tag = "${imageName}"
    else
        tag = "${jarName}"
}

更改基本上是在我的docker.gradle文件中进行的,我必须添加指向jcenter()的存储库部分,并使用完全限定的插件类名。

票数 1
EN

Stack Overflow用户

发布于 2019-09-02 18:46:29

我想知道为什么你会想在你的Gradle中使用Docker插件?在使用了维护时间最长的Mushko's Gradle Docker Plugin之后,我不明白为什么要用不同的语法在docker样板上构建插件样板?

Gradle中的容器化对于程序员来说很舒服,DevOps会说他们不能像这样工作,如果你需要支持,你应该按照他们的方式工作。我在下面找到了一个简短的、纯Docker风格的、功能齐全的解决方案。

在工程结构中找到普通的Dockerfile和docker.sh外壳脚本:

build.gradle文件中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    buildscript {
        repositories {
            gradlePluginPortal()
        }
    }

    plugins {
        id 'java'
        id 'application'
    }

    // Entrypoint:

    jar {
        manifest {
            attributes 'Main-Class': 'com.example.Test'
        }
    }

    mainClassName = 'com.example.Test'

    // Run in DOCKER-container:

    task runInDockerContainer {
        doLast {
            exec {
                workingDir '.' // Relative to project's root folder.
                commandLine 'sh', './build/resources/main/docker.sh'
            }
    //        exec {
    //            workingDir "."
    //            commandLine 'sh', './build/resources/main/other.sh'
    //        }
        }
    }

遵循普通的Docker文档,在干净的shell脚本中做任何你想做的事情:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    # Everything is run relative to project's root folder:

    # Put everything together into build/docker folder for DOCKER-build:
    if [ -d "build/docker" ]; then rm -rf build/docker; fi;
    mkdir build/docker;
    cp build/libs/test.jar build/docker/test.jar;
    cp build/resources/main/Dockerfile build/docker/Dockerfile;

    # Build image from files in build/docker:
    cd build/docker || exit;
    docker build . -t test;

    # Run container based on image:
    echo $PWD
    docker run test;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50401722

复制
相关文章
Gradle build.gradle 文件
提示 1:group+name+version 类似于 maven 的 group+artifactId+version 提示 2:encoding 解决业务代码与测试代码中文乱码问题
鱼找水需要时间
2023/02/16
1.2K0
Gradle build.gradle 文件
Docker一键部署 SpringBoot 应用的方法,贼快贼好用!
一款可以通过远程API管理Docker镜像和容器的插件,专为Java应用打造,原生支持SpringBoot。
macrozheng
2021/04/16
1.1K0
Docker一键部署 SpringBoot 应用的方法,贼快贼好用!
【Android Gradle 插件】Gradle 映射文件 ( settings.gradle 映射为 Settings 类 | build.gradle 映射为 Project 类 )
Android Plugin DSL Reference 参考文档 : https://google.github.io/android-gradle-dsl/2.3/
韩曙亮
2023/03/30
6130
【Android Gradle 插件】Gradle 映射文件 ( settings.gradle 映射为 Settings 类 | build.gradle 映射为 Project 类 )
【错误记录】Android Studio 中 build.gradle 配置 buildFeatures prefab 错误处理 ( AS 4.1 以上开发环境 | Gradle及插件版本 )
起因 : 需要配置 Android 高性能音频 Oboe 函数库 , 参考 https://github.com/google/oboe/blob/master/docs/GettingStarted.md 文档 , 使用预构建的二进制库和头文件 , 需要配置如下配置 :
韩曙亮
2023/03/28
2.6K0
【错误记录】Android Studio 中 build.gradle 配置  buildFeatures prefab 错误处理 ( AS 4.1 以上开发环境 | Gradle及插件版本 )
【Android Gradle 插件】Gradle 构建机制 ③ ( settings.gradle 生成 Settings 对象 | build.gradle 生成 Project 对象 )
settings.gradle 配置文件 最终会生成一个 org.gradle.api.initialization.Settings 对象 ,
韩曙亮
2023/03/30
3520
Android Studio的build.gradle文件使用(一)
Gradle 是一个非常先进强大的项目构建工具,它使用了一种基于 Groovy 领域的特定语言(DSL)来声明项目设置。
李小白是一只喵
2020/11/26
8210
Android Studio的build.gradle文件使用(一)
gradle中使用嵌入式(embedded) tomcat, debug 启动
在gradle项目中使用embedded tomcat。 最开始部署项目需要手动将web项目打成war包,然后手动上传到tomcat的webapp下,然后启动tomcat来部署项目。这种手动工作通常还要指定端口,指定项目位置等,这些操作是重复的操作。 开发的时候,ide自然想到集成这些功能,于是都是server模块,设置好参数就可以run server,测试了。个人操作的时候确实挺方便的,然而当团队协作的时候,每个人都要手动去设置这些参数,而且大家或许还在使用着各种各样的idea。eclipse和idea的
Ryan-Miao
2018/03/13
2.1K0
gradle中使用嵌入式(embedded) tomcat, debug 启动
【Android Gradle 插件】Module 目录下 build.gradle 配置文件 ( plugins 闭包代码块中引入插件 | PluginAware#apply 方法引入插件 )
Android Plugin DSL Reference 参考文档 : https://google.github.io/android-gradle-dsl/2.3/
韩曙亮
2023/03/30
6630
我想调试下build.gradle | Gradle 调试
我在写gradle plugin的时候,碰到过两个大难题,所见即所得,当场运行我们的代码。这部分我们之前已经介绍过。协程 路由 组件化 1+1+1>3
逮虾户
2022/03/06
1K0
我想调试下build.gradle | Gradle 调试
【Android Gradle 插件】build.gradle 中的 android 配置 ( 配置项 | compileSdkVersion 配置 | buildToolsVersion 配置 )
Android Plugin DSL Reference 参考文档 : https://google.github.io/android-gradle-dsl/2.3/
韩曙亮
2023/03/30
1.6K0
【Android Gradle 插件】Module 目录下 build.gradle 配置文件 ( android 闭包块配置 | AppExtension 扩展类型参考文档 )
Android Plugin DSL Reference 参考文档 : https://google.github.io/android-gradle-dsl/2.3/
韩曙亮
2023/03/30
4060
【Android Gradle 插件】Module 目录下 build.gradle 配置文件 ( android 闭包块配置 | AppExtension 扩展类型参考文档 )
【Android Gradle 插件】Android Module 模块 build.gradle 构建脚本 Groovy 语法分析 ① ( Gradle 二进制插件引入 | Gradle依赖配置 )
在 Gradle 脚本中引入二进制插件是常见的用法 , 如 Android 中的 build.gradle 插件引入 ;
韩曙亮
2023/03/30
5520
【Android Gradle 插件】Gradle 依赖管理 ② ( build.gradle 中的 dependencies 依赖配置 | DependencyHandler#add 方法介绍 )
org.gradle.api.Project 配置 ( build.gradle 根配置 ) 文档 : https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html
韩曙亮
2023/03/30
9280
【Android Gradle 插件】Android Studio 工程 Gradle 构建流程 ② ( settings.gradle 构建脚本分析 | 根目录下 build.gradle 分析 )
在 dependencyResolutionManagement 脚本块 中 定义的 repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 代码的含义是 解析依赖时 , 只能使用本脚本块中的 Maven 仓库 , 不能使用 Module 子项目中的依赖 ;
韩曙亮
2023/03/28
2.1K0
【Android Gradle 插件】Android Studio 工程 Gradle 构建流程 ② ( settings.gradle 构建脚本分析 | 根目录下 build.gradle 分析 )
配置统一的build.gradle
1、写一个.gradle配置文件 在Progject里面新建一个config.gradle文件,然后里面添加工程需要的配置。如图所示: 2、在Project的build.gradle里面添加配置 9B
code_horse
2018/07/02
4650
写一个Gradle插件
我们在Android Studio中创建的app项目中,build.gradle常有如下这行代码:
Clayman Twinkle
2019/04/01
7330
写一个Gradle插件
【Android Gradle 插件】将自定义 Gradle 插件上传到自建 Maven 仓库 ⑧ ( 设置 Gradle 插件模块 | 将 Gradle 插件上传到自建 Maven 仓库 )
在 【Android Gradle 插件】将自定义 Gradle 插件上传到自建 Maven 仓库 ⑦ ( 登录 Maven 私服 | Maven 私服初始化设置 | 创建 Maven 仓库 ) 博客中 , 在 Maven 私服中创建了 Maven 仓库 " MyRepository “ , 地址为 ” http://localhost:8081/repository/MyRepository/ " ;
韩曙亮
2023/03/30
1K0
【Android Gradle 插件】将自定义 Gradle 插件上传到自建 Maven 仓库 ⑧ ( 设置 Gradle 插件模块 | 将 Gradle 插件上传到自建 Maven 仓库 )
app目录下的build.gradle详解
最近把以前的gradle知识点整理下 // 表示这是一个Android程序模块,如果是作为库,就声明为Library'com.android.library' applyplugin:'com.android.application' android { compileSdkVersion 26// 编译版本,指用哪个版本的SDK进行编译 buildToolsVersion "26.0.1"//构建工具 //对项目的更多细节进行配置 defaultConfig {
Seachal
2021/01/25
6500
app目录下的build.gradle详解
学点Groovy来理解build.gradle代码
在写这篇博客时,搜索参考了很多资料,网上对于 Groovy 介绍的博客已经特别多了,所以也就没准备再详细的去介绍 Groovy,本来也就计划写一些自己认为较重要的点。后来发现了 Groovy 的官方文档后,发现其实官方的介绍特别的全面,详细。但可惜的是我的英语不好,看英文文档有些费时间,但还是推荐有能力的人去参照官方文档来学习,后期如果有时间的话,我也计划试着翻译一些官方的文档来学习,记录一下。
请叫我大苏
2018/05/17
1.9K0
点击加载更多

相似问题

覆盖由bmuschko Gradle Docker插件生成的整个默认Dockerfile

20

Grails Gradle Docker插件bmuschko.github.io/gradle-docker- Plugin / throws无法设置未知属性'env‘

10

我的build.gradle文件中出现错误

234

如何使用bmuschko/ Gradle - docker -plugin自动将文件复制到IBM Containers with Gradle中的运行docker

12

Android build.gradle文件错误

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文