| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * License); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an AS IS BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| // beam-sdks-java-bom generates a BOM (Bill of Materials) in the form of |
| // a pom.xml file, which enables users to easily import multiple modules |
| // from Beam at the same version. See |
| // https://github.com/GoogleCloudPlatform/cloud-opensource-java/blob/master/library-best-practices/JLBP-15.md |
| // for more details on BOMs. |
| |
| plugins { |
| id 'org.apache.beam.module' |
| id 'java' |
| id 'maven-publish' |
| } |
| |
| def isRelease(Project project) { |
| return project.hasProperty('isRelease') |
| } |
| |
| ext { |
| mavenJavaDir = "$project.buildDir/publications/mavenJava" |
| mavenJavaBomOutputFile = file(mavenJavaDir + "/pom-default.xml") |
| } |
| |
| for (p in rootProject.subprojects) { |
| if (!p.path.equals(project.path)) { |
| evaluationDependsOn(p.path) |
| } |
| } |
| |
| def bomModuleNames = new ArrayList<>() |
| for (p in rootProject.subprojects) { |
| def subproject = p // project(':' + p.name) |
| if (subproject.ext.properties.containsKey('includeInJavaBom') && |
| subproject.ext.properties.includeInJavaBom) { |
| bomModuleNames.add(subproject.archivesBaseName) |
| } |
| } |
| |
| // Copy our pom.xml to the location where a generated POM would go |
| task copyPom(type: Copy) { |
| from 'pom.xml.template' |
| into mavenJavaDir |
| rename 'pom.xml.template', 'pom-default.xml' |
| expand(version: project.version, modules: bomModuleNames) |
| } |
| |
| assemble.dependsOn copyPom |
| |
| // We want to use our own pom.xml instead of the generated one, so we disable |
| // the pom.xml generation and have the publish tasks depend on `copyPom` instead. |
| tasks.whenTaskAdded { task -> |
| if (task.name == 'generatePomFileForMavenJavaPublication') { |
| // Ensures the pom file is signed later if we are performing a release (see BEAM-11068) |
| task.doLast { |
| copy { |
| from 'pom.xml.template' |
| into mavenJavaDir |
| rename 'pom.xml.template', 'pom-default.xml' |
| expand(version: project.version, modules: bomModuleNames) |
| } |
| } |
| } else if (task.name.startsWith('publishMavenJavaPublication')) { |
| task.dependsOn copyPom |
| } |
| } |
| |
| jar.enabled = false |
| |
| // Remove the default jar archive which is added by the 'java' plugin. |
| configurations.archives.artifacts.with { archives -> |
| def artifacts = [] |
| archives.each { |
| if (it.file =~ 'jar') { |
| // We can't just call `archives.remove(it)` here because it triggers |
| // a `ConcurrentModificationException`, so we add matching artifacts |
| // to another list, then remove those elements outside of this iteration. |
| artifacts.add(it) |
| } |
| } |
| artifacts.each { |
| archives.remove(it) |
| } |
| } |
| |
| artifacts { |
| archives(mavenJavaBomOutputFile) { |
| builtBy copyPom |
| } |
| } |
| |
| afterEvaluate { |
| // We can't use the `publishing` section from applyJavaNature because |
| // we don't want all the Java artifacts, and we want to use our own pom.xml |
| // instead of the generated one. |
| publishing { |
| publications { |
| mavenJava(MavenPublication) { |
| groupId = project.mavenGroupId |
| artifactId = archivesBaseName |
| version = project.version |
| } |
| } |
| repositories project.ext.repositories |
| } |
| |
| // Only sign artifacts if we are performing a release |
| if (isRelease(project) && !project.hasProperty('noSigning')) { |
| apply plugin: "signing" |
| signing { |
| useGpgCmd() |
| sign publishing.publications |
| } |
| } |
| } |