备注:
  环境准备 : docker , gradle(使用wrapper,或者全局安装),测试环境使用mac
1. gradle 安装
  1. brew install gradle
 
2. docker
  1. // 安装
  2. yum install -y yum-utils
  3. yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  4. yum install docker-ce
  5. // 加速
  6. curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://099430a4.m.daocloud.io
3. gradle 项目结构
  1. gradle wrapper
  2. ├── README.md
  3. ├── build.gradle
  4. ├── gradle
  5. └── wrapper
  6. ├── gradle-wrapper.jar
  7. └── gradle-wrapper.properties
  8. ├── gradlew
  9. ├── gradlew.bat
  10. ├── lib
  11. └── commons-codec.jar
  12. ├── moviesservice
  13. ├── build.gradle
  14. └── src
  15. └── main
  16. ├── java
  17. └── com
  18. └── dalong
  19. └── moviesservice
  20. └── Movies.java
  21. └── resources
  22. ├── settings.gradle
  23. ├── src
  24. ├── main
  25. ├── docker
  26. └── Dockerfile
  27. ├── java
  28. └── com
  29. └── dalong
  30. └── Application.java
  31. └── resources
  32. └── test
  33. ├── java
  34. └── resources
  35. └── userservice
  36. ├── build.gradle
  37. └── src
  38. └── main
  39. ├── java
  40. └── com
  41. └── dalong
  42. └── userservice
  43. └── User.java
  44. └── resources
 
 
4. 代码说明
  1. 多项目主要是 settings.gradle,具体代码如下:
  2. 1. settings.gradle
  3. rootProject.name = 'parent'
  4. include 'moviesservice'
  5. include 'userservice'
  6. 2. build.gradle
  7. group 'com.gradleapp'
  8. version '1.0-SNAPSHOT'
  9. buildscript {
  10. repositories {
  11. maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
  12. }
  13. dependencies {
  14. classpath('se.transmode.gradle:gradle-docker:1.2')
  15. }
  16. }
  17. apply plugin: 'java'
  18. apply plugin: 'application'
  19. apply plugin: "docker"
  20. sourceCompatibility = 1.8
  21. mainClassName = 'com.dalong.Application'
  22. repositories {
  23. mavenCentral()
  24. maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
  25. }
  26. // 依赖引用
  27. dependencies {
  28. testCompile group: 'junit', name: 'junit', version: '4.12'
  29. compile project(":userservice")
  30. compile project(":moviesservice")
  31. compile files("lib/commons-codec.jar")
  32. }
  33. // docker build task
  34. task buildDocker(type:Docker,dependsOn:build){
  35. push = false
  36. applicationName ="gradlemultiproject"
  37. project.group="dockerimagehost/mydemo"
  38. dockerfile = file("${projectDir}/src/main/docker/Dockerfile")
  39. doFirst {
  40. copy {
  41. from distZip
  42. into stageDir
  43. }
  44. }
  45. }
  46. 3. 子项目gradle 配置,比较简单
  47. group 'com.gradleapp'
  48. version '1.0-SNAPSHOT'
  49. apply plugin: 'java'
  50. sourceCompatibility = 1.8
  51. repositories {
  52. }
  53. dependencies {
  54. testCompile group: 'junit', name: 'junit', version: '4.12'
  55. }
    4. dockerfile
FROM openjdk:8-jre-alpine
WORKDIR /appdemo/
COPY parent-1.0-SNAPSHOT.zip /appdemo
RUN unzip /appdemo/parent-1.0-SNAPSHOT.zip && rm -rf parent-1.0-SNAPSHOT.zip
ENTRYPOINT [ "./parent-1.0-SNAPSHOT/bin/parent"]
  1.  
5. 构建
  1. gradle buildDocker or ./gradlew buildDocker
  2. > Task :buildDocker
  3. Sending build context to Docker daemon 224.8kB
  4. Step 1/5 : FROM openjdk:8-jre-alpine
  5. ---> b1bd879ca9b3
  6. Step 2/5 : WORKDIR /appdemo/
  7. ---> Using cache
  8. ---> 53e534f7f64f
  9. Step 3/5 : COPY parent-1.0-SNAPSHOT.zip /appdemo
  10. ---> f07ca2806459
  11. Step 4/5 : RUN unzip /appdemo/parent-1.0-SNAPSHOT.zip && rm -rf parent-1.0-SNAPSHOT.zip
  12. ---> Running in f42179c4ac39
  13. Archive: /appdemo/parent-1.0-SNAPSHOT.zip
  14. creating: parent-1.0-SNAPSHOT/
  15. creating: parent-1.0-SNAPSHOT/lib/
  16. inflating: parent-1.0-SNAPSHOT/lib/parent-1.0-SNAPSHOT.jar
  17. inflating: parent-1.0-SNAPSHOT/lib/commons-codec.jar
  18. inflating: parent-1.0-SNAPSHOT/lib/userservice-1.0-SNAPSHOT.jar
  19. inflating: parent-1.0-SNAPSHOT/lib/moviesservice-1.0-SNAPSHOT.jar
  20. creating: parent-1.0-SNAPSHOT/bin/
  21. inflating: parent-1.0-SNAPSHOT/bin/parent.bat
  22. inflating: parent-1.0-SNAPSHOT/bin/parent
  23. Removing intermediate container f42179c4ac39
  24. ---> e322da1a4e8a
  25. Step 5/5 : ENTRYPOINT [ "./parent-1.0-SNAPSHOT/bin/parent"]
  26. ---> Running in 8c279ec90d6f
  27. Removing intermediate container 8c279ec90d6f
  28. ---> 39e705358ef1
  29. Successfully built 39e705358ef1
  30. Successfully tagged dockerimagehost/mydemo/gradlemultiproject:1.0-SNAPSHOT
 
6.  参考资料
  1. https://docs.gradle.org/4.5/userguide/intro_multi_project_builds.html
  2. https://github.com/Transmode/gradle-docker
  3. https://github.com/rongfengliang/gradlemultiproject.git
 
 
 
 
 

gradle multiproject && docker build的更多相关文章

  1. 【云计算】docker build如何支持参数化构建?

    docker 1.9.0版本之后,已经支持docker build参数化构建. docker 版本更新记录: github讨论: 参开资料: https://github.com/docker/doc ...

  2. docker: "build" requires 1 argument. See 'docker build --help'.

    http://bbs.csdn.net/topics/391040030 docker build  --tag="ouruser/sinatra:v3" -<Dockerf ...

  3. Docker build Dockerfile 构建镜像 - 二

    Dockerfile 制作镜像 https://hub.docker.com/ 搜索需要镜像: https://hub.docker.com/_/centos/ 官方示例: centos:6 1.这里 ...

  4. Jenkins Docker安装及Docker build step插件部署配置

    生产部署环境:A:192.168.1.2 B:192.168.1.3  两台服务器系统均是Centos 7.3 , Docker版本都1.12.6 Jenkins安装操作步骤: 1.在A服务器上使用命 ...

  5. 25.week4 docker build 也就是创建自己的image 上传image到dockerhub 从dockerhub下载images

    dado可以写你自己的名字 这个命令就会根据目录下的Dockerfile(固定用和这个名字)文件里面的内容 去下载并创建运行命令一步一步地 Setting up libxfixes3:amd64 (: ...

  6. docker build 指定dockerfile

    1. Dockerfile文件使用 docker build命令会根据Dockerfile文件及上下文构建新Docker镜像.构建上下文是指Dockerfile所在的本地路径或一个URL(Git仓库地 ...

  7. "docker build" requires exactly 1 argument(s).

    Docker 是怎么样的东西,这里就不说了,这里说说dockerfile创建容器时遇到的问题. 首先我想达到的目的很简单,就是用dockerfile去创建容器,步骤如下: 创建并编辑dockerfil ...

  8. 使用dockerfile文件创建镜像时docker build没有反应

    问题: 先 docker pull centos:7 拉取了一个官方的基础镜像,为后续创建jdk8镜像做准备,在创建如下的dockerfile文件 执行docker build -t jdk_8u19 ...

  9. docker build

    nginx Docfile ----------------------- FROM centos   MAINTAINER daniel   RUN yum install -y wget RUN ...

随机推荐

  1. zabbix selinux audit2allow 问题

    he following example demonstrates using audit2allow to create a policy module: A denial and the asso ...

  2. Python 序列化pickle/cPickle模块整理

    Python序列化的概念很简单.内存里面有一个数据结构,你希望将它保存下来,重用,或者发送给其他人.你会怎么做?这取决于你想要怎么保存,怎么重用,发送给谁.很多游戏允许你在退出的时候保存进度,然后你再 ...

  3. Bootstrap 可视化布局--拖拽后弹窗进行编辑

    Bootstrap 可视化布局--拖拽后弹窗进行编辑 最近后台想一个需求,使用可视化布局-中文 | en中拖拽表格后,弹窗进行编辑,保存下载后在后台生成pdf格式. 奈何各种问题不断,使用 jquer ...

  4. Where do I belong

    先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引. 举例:where([1,2,3,4], 1.5) 应该返回 1.因为1.5插入到数组[1,2,3,4]后变成[1,1.5,2,3, ...

  5. 简单粗暴地理解js原型链–js面向对象编程

    简单粗暴地理解js原型链–js面向对象编程 作者:茄果 链接:http://www.cnblogs.com/qieguo/archive/2016/05/03/5451626.html 原型链理解起来 ...

  6. vue 错误记录

    1.错误信息: You may use special comments to disable some warnings.Use // eslint-disable-next-line to ign ...

  7. 第1课:接口测试和jmeter总结

    接口测试 1. 接口的分类:webService和http api接口 1) webService接口:是按照soap协议通过http传输,请求报文和返回报文都是xml格式,一般要借助工具来测试接口: ...

  8. 状态保持: cookier及session简介

    状态保持 因为 http 是一种无状态协议,浏览器请求服务器是无状态的. 无状态:指一次用户请求时,浏览器.服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求. 无状态原因:浏览器与服务器是 ...

  9. L158

    It started out modestly enough: David Hertz, having learned that under the right conditions you real ...

  10. Java从入门到精通全套教程免费分享

    这是我自己早前听课时整理的Java全套知识,适用于初学者,也可以适用于中级进阶的人,你们可以下载,我认为是比较系统全面的,可以抵得上市场上90%的学习资料.讨厌那些随便乱写的资料还有拿出来卖钱的人!在 ...