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