github.com/apache/beam/sdks/v2@v2.48.2/java/container/common.gradle (about)

     1  /*
     2   * Licensed to the Apache Software Foundation (ASF) under one
     3   * or more contributor license agreements.  See the NOTICE file
     4   * distributed with this work for additional information
     5   * regarding copyright ownership.  The ASF licenses this file
     6   * to you under the Apache License, Version 2.0 (the
     7   * License); you may not use this file except in compliance
     8   * with the License.  You may obtain a copy of the License at
     9   *
    10   *     http://www.apache.org/licenses/LICENSE-2.0
    11   *
    12   * Unless required by applicable law or agreed to in writing, software
    13   * distributed under the License is distributed on an AS IS BASIS,
    14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    15   * See the License for the specific language governing permissions and
    16   * limitations under the License.
    17   */
    18  
    19  /**
    20   * Build script containing common build tasks for Java SDK Docker images.
    21   * Should be applied as a script plugin per supported Java version.
    22   * (see java$VER/build.gradle)
    23   */
    24  
    25  apply plugin: 'org.apache.beam.module'
    26  apply plugin: 'base'
    27  applyDockerNature()
    28  
    29  if (!project.hasProperty('imageJavaVersion')) {
    30      throw new GradleException('imageJavaVersion project property must be set')
    31  }
    32  def imageJavaVersion = project.findProperty('imageJavaVersion')
    33  
    34  description = "Apache Beam :: SDKs :: Java :: Container :: Java ${imageJavaVersion} Container"
    35  
    36  configurations {
    37      dockerDependency
    38      sdkHarnessLauncher
    39      pulledLicenses
    40  }
    41  
    42  dependencies {
    43      dockerDependency project(path: ":sdks:java:container", configuration: "dockerDependency")
    44      sdkHarnessLauncher project(path: ":sdks:java:container", configuration: "sdkHarnessLauncher")
    45  }
    46  
    47  task copyDockerfileDependencies(type: Copy) {
    48      from configurations.dockerDependency
    49      rename 'slf4j-api.*', 'slf4j-api.jar'
    50      rename 'slf4j-jdk14.*', 'slf4j-jdk14.jar'
    51      rename 'jcl-over-slf4j.*', 'jcl-over-slf4j.jar'
    52      rename 'log4j-over-slf4j.*', 'log4j-over-slf4j.jar'
    53      rename 'log4j-to-slf4j.*', 'log4j-to-slf4j.jar'
    54      if (imageJavaVersion == "11" || imageJavaVersion == "17") {
    55          rename 'beam-sdks-java-container-agent.*.jar', 'open-module-agent.jar'
    56      }
    57      rename 'beam-sdks-java-harness-.*.jar', 'beam-sdks-java-harness.jar'
    58      rename 'jamm.*.jar', 'jamm.jar'
    59  
    60      setDuplicatesStrategy(DuplicatesStrategy.INCLUDE)
    61      into "build/target"
    62  }
    63  
    64  task copySdkHarnessLauncher(type: Copy) {
    65      from configurations.sdkHarnessLauncher
    66      into "build/target"
    67  }
    68  
    69  task copyJavaThirdPartyLicenses(type: Copy) {
    70      from("${project(':sdks:java:container').buildDir}/target/third_party_licenses")
    71      into "build/target/third_party_licenses"
    72      dependsOn ':sdks:java:container:pullLicenses'
    73  }
    74  
    75  task copyGolangLicenses(type: Copy) {
    76      from "${project(':release:go-licenses:java').buildDir}/output"
    77      into "build/target/go-licenses"
    78      dependsOn ':release:go-licenses:java:createLicenses'
    79  }
    80  
    81  task copyJdkOptions(type: Copy) {
    82      if (imageJavaVersion == "17" || imageJavaVersion == "11") {
    83          from "option-jamm.json"
    84      }
    85      from "java${imageJavaVersion}-security.properties"
    86      from "option-java${imageJavaVersion}-security.json"
    87      into "build/target/options"
    88  }
    89  
    90  task skipPullLicenses(type: Exec) {
    91      executable "sh"
    92      args "-c", "mkdir -p build/target/go-licenses build/target/options build/target/third_party_licenses && touch build/target/go-licenses/skip && touch build/target/third_party_licenses/skip"
    93  }
    94  
    95  task validateJavaHome {
    96      if (imageJavaVersion == "11" || imageJavaVersion == "17") {
    97          doFirst {
    98              if (!project.hasProperty('java17Home') && !project.hasProperty('java11Home')) {
    99                  throw new GradleException('java17Home or java11Home property required. Re-run with -Pjava17Home or -Pjava11Home')
   100              }
   101          }
   102      }
   103  }
   104  
   105  docker {
   106      name containerImageName(
   107              name: "${project.docker_image_default_repo_prefix}java${imageJavaVersion}_sdk",
   108              root: project.rootProject.hasProperty(["docker-repository-root"]) ?
   109                      project.rootProject["docker-repository-root"] :
   110                      project.docker_image_default_repo_root,
   111              tag: project.rootProject.hasProperty(["docker-tag"]) ?
   112                      project.rootProject["docker-tag"] : project.sdk_version)
   113      // tags used by dockerTag task
   114      tags containerImageTags()
   115      dockerfile project.file("../Dockerfile")
   116      files "./build/"
   117      buildArgs([
   118              'pull_licenses': project.rootProject.hasProperty(["docker-pull-licenses"]) ||
   119                      project.rootProject.hasProperty(["isRelease"]),
   120              'java_version': imageJavaVersion,
   121      ])
   122      buildx project.containerPlatforms() != [project.nativeArchitecture()]
   123      platform(*project.containerPlatforms())
   124  }
   125  
   126  if (project.rootProject.hasProperty(["docker-pull-licenses"]) ||
   127          project.rootProject.hasProperty(["isRelease"])) {
   128      project.logger.lifecycle('docker-pull-licenses set, creating go-licenses')
   129      dockerPrepare.dependsOn copyJavaThirdPartyLicenses
   130      dockerPrepare.dependsOn copyGolangLicenses
   131  } else {
   132      project.logger.lifecycle('docker-pull-licenses not set, skipping go-licenses')
   133      dockerPrepare.dependsOn skipPullLicenses
   134  }
   135  dockerPrepare.dependsOn copySdkHarnessLauncher
   136  dockerPrepare.dependsOn copyDockerfileDependencies
   137  dockerPrepare.dependsOn ":sdks:java:container:downloadCloudProfilerAgent"
   138  dockerPrepare.dependsOn copyJdkOptions
   139  dockerPrepare.dependsOn validateJavaHome