zoukankan      html  css  js  c++  java
  • gradle multiproject && docker build

    备注:
      环境准备 : docker , gradle(使用wrapper,或者全局安装),测试环境使用mac
    1. gradle 安装
    brew install gradle 
     
    2. docker
    // 安装
    yum install -y yum-utils
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    yum install docker-ce
    // 加速
    curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://099430a4.m.daocloud.io
    3. gradle 项目结构
    gradle wrapper
    
    ├── README.md
    ├── build.gradle
    ├── gradle
    │   └── wrapper
    │       ├── gradle-wrapper.jar
    │       └── gradle-wrapper.properties
    ├── gradlew
    ├── gradlew.bat
    ├── lib
    │   └── commons-codec.jar
    ├── moviesservice
    │   ├── build.gradle
    │   └── src
    │       └── main
    │           ├── java
    │           │   └── com
    │           │       └── dalong
    │           │           └── moviesservice
    │           │               └── Movies.java
    │           └── resources
    ├── settings.gradle
    ├── src
    │   ├── main
    │   │   ├── docker
    │   │   │   └── Dockerfile
    │   │   ├── java
    │   │   │   └── com
    │   │   │       └── dalong
    │   │   │           └── Application.java
    │   │   └── resources
    │   └── test
    │       ├── java
    │       └── resources
    └── userservice
        ├── build.gradle
        └── src
            └── main
                ├── java
                │   └── com
                │       └── dalong
                │           └── userservice
                │               └── User.java
                └── resources
     
     
    4. 代码说明
    多项目主要是 settings.gradle,具体代码如下:
    
    1. settings.gradle
    
    rootProject.name = 'parent'
    include 'moviesservice'
    include 'userservice'
    
    2. build.gradle
    
    group 'com.gradleapp'
    version '1.0-SNAPSHOT'
    buildscript {
        repositories {
            maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
        }
        dependencies {
            classpath('se.transmode.gradle:gradle-docker:1.2')
        }
    }
    apply plugin: 'java'
    apply plugin: 'application'
    apply plugin: "docker"
    sourceCompatibility = 1.8
    mainClassName = 'com.dalong.Application'
    repositories {
        mavenCentral()
        maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
    }
    // 依赖引用
    dependencies {
        testCompile group: 'junit', name: 'junit', version: '4.12'
        compile project(":userservice")
        compile project(":moviesservice")
        compile files("lib/commons-codec.jar")
    
    }
    // docker build task
    task buildDocker(type:Docker,dependsOn:build){
        push = false
        applicationName ="gradlemultiproject"
        project.group="dockerimagehost/mydemo"
        dockerfile = file("${projectDir}/src/main/docker/Dockerfile")
        doFirst {
            copy {
                from distZip
                into stageDir
            }
        }
    }
    
    3. 子项目gradle 配置,比较简单
    
    group 'com.gradleapp'
    version '1.0-SNAPSHOT'
    
    apply plugin: 'java'
    
    sourceCompatibility = 1.8
    
    repositories {
    
    }
    dependencies {
        testCompile group: 'junit', name: 'junit', version: '4.12'
    }
    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"]
     
    5. 构建
    gradle buildDocker   or  ./gradlew buildDocker
    
    
    > Task :buildDocker
    Sending build context to Docker daemon  224.8kB
    Step 1/5 : FROM openjdk:8-jre-alpine
     ---> b1bd879ca9b3
    Step 2/5 : WORKDIR /appdemo/
     ---> Using cache
     ---> 53e534f7f64f
    Step 3/5 : COPY  parent-1.0-SNAPSHOT.zip /appdemo
     ---> f07ca2806459
    Step 4/5 : RUN  unzip /appdemo/parent-1.0-SNAPSHOT.zip && rm -rf parent-1.0-SNAPSHOT.zip
     ---> Running in f42179c4ac39
    Archive:  /appdemo/parent-1.0-SNAPSHOT.zip
       creating: parent-1.0-SNAPSHOT/
       creating: parent-1.0-SNAPSHOT/lib/
      inflating: parent-1.0-SNAPSHOT/lib/parent-1.0-SNAPSHOT.jar
      inflating: parent-1.0-SNAPSHOT/lib/commons-codec.jar
      inflating: parent-1.0-SNAPSHOT/lib/userservice-1.0-SNAPSHOT.jar
      inflating: parent-1.0-SNAPSHOT/lib/moviesservice-1.0-SNAPSHOT.jar
       creating: parent-1.0-SNAPSHOT/bin/
      inflating: parent-1.0-SNAPSHOT/bin/parent.bat
      inflating: parent-1.0-SNAPSHOT/bin/parent
    Removing intermediate container f42179c4ac39
     ---> e322da1a4e8a
    Step 5/5 : ENTRYPOINT [ "./parent-1.0-SNAPSHOT/bin/parent"]
     ---> Running in 8c279ec90d6f
    Removing intermediate container 8c279ec90d6f
     ---> 39e705358ef1
    Successfully built 39e705358ef1
    Successfully tagged dockerimagehost/mydemo/gradlemultiproject:1.0-SNAPSHOT
    
     
    6.  参考资料
    https://docs.gradle.org/4.5/userguide/intro_multi_project_builds.html
    https://github.com/Transmode/gradle-docker
    https://github.com/rongfengliang/gradlemultiproject.git
     
  • 相关阅读:
    Java 中的 匿名类
    spring boot 中容器 Jetty、Tomcat、Undertow
    微信小程序-动态设置背景色navigationBarBackgroundColor的值
    vue el-tree:默认展开第几级节点
    safarai
    微信小程序-输入框输入文字后,将光标移到文字中间,接着输入文字后光标又自动跳到最后
    微信小程序-WebSocket应用
    微信小程序-聊天列表-角标
    SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data错误的解决
    button 去掉原生边框
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/8370851.html
Copyright © 2011-2022 走看看