| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- |
| 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. |
| --> |
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> |
| <modelVersion>4.0.0</modelVersion> |
| |
| <parent> |
| <groupId>org.apache.commons</groupId> |
| <artifactId>commons-statistics-parent</artifactId> |
| <version>1.1-SNAPSHOT</version> |
| </parent> |
| |
| <artifactId>commons-statistics-bom</artifactId> |
| <version>1.1-SNAPSHOT</version> |
| <name>Apache Commons Statistics (Bill of Materials)</name> |
| <packaging>pom</packaging> |
| |
| <description>Bill of Materials (BOM) to aid in dependency management when referencing multiple Apache Commons Statistics artifacts.</description> |
| |
| <!-- |
| Note: This project pom is not the deployed BOM artifact. |
| |
| This module inherits from commons-statistics-parent to obtain the Commons build configuration. |
| However this pom is not actually installed or deployed. The project is configured to |
| deploy a single artifact that is a Bill of Materials (BOM) for Commons Statistics. |
| |
| The BOM is a template in the project resources that is populated using the properties |
| from this project pom using resource filtering. The BOM dependencyManagement section is |
| manually added to the template and the version is collected from the current project version. |
| |
| This has been done to ensure a simplified BOM is deployed. Any pom extending either |
| apache parent or commons-parent will include the dependencyManagement section from |
| those poms. Any pom not extending commons-parent would require a distributionManagement |
| section and profile to support the test-deploy functionality. This project pom is |
| constructed to work in the Commons release process to install/deploy the BOM artifact. |
| --> |
| |
| <properties> |
| <!-- Workaround to avoid duplicating config files. --> |
| <statistics.parent.dir>${basedir}/..</statistics.parent.dir> |
| |
| <!-- Skip the standard install and deploy to avoid processing this pom as the artifact. --> |
| <maven.install.skip>true</maven.install.skip> |
| <maven.deploy.skip>true</maven.deploy.skip> |
| |
| <!-- Disable unused plugins --> |
| <animal.sniffer.skip>true</animal.sniffer.skip> |
| <pmd.skip>true</pmd.skip> |
| <spotbugs.skip>true</spotbugs.skip> |
| <checkstyle.skip>true</checkstyle.skip> |
| <changes.jira.skip>true</changes.jira.skip> |
| <skipSurefireReport>true</skipSurefireReport> |
| |
| <!-- Generated BOM. This is the artifact that is installed/deployed. --> |
| <statistics.bom.file>target/bom.xml</statistics.bom.file> |
| <!-- Repositories for the deploy:deploy-file goal. |
| These properties are duplicates of the parent distributionManagement. |
| The choice of which to use is based on the SNAPSHOT suffix. --> |
| <statistics.bom.snapshots.repositoryId>apache.snapshots.https</statistics.bom.snapshots.repositoryId> |
| <statistics.bom.snapshots.url>https://repository.apache.org/content/repositories/snapshots</statistics.bom.snapshots.url> |
| <statistics.bom.releases.repositoryId>apache.releases.https</statistics.bom.releases.repositoryId> |
| <statistics.bom.releases.url>https://repository.apache.org/service/local/staging/deploy/maven2</statistics.bom.releases.url> |
| </properties> |
| |
| <build> |
| <plugins> |
| <plugin> |
| <!-- This plugin has no skip property - use an invalid phase --> |
| <groupId>org.spdx</groupId> |
| <artifactId>spdx-maven-plugin</artifactId> |
| <executions> |
| <execution> |
| <id>build-spdx</id> |
| <goals> |
| <goal>createSPDX</goal> |
| </goals> |
| <phase>None</phase> |
| </execution> |
| </executions> |
| </plugin> |
| <plugin> |
| <!-- Generate the BOM from the template resource. This uses filtering to |
| copy the correct properties from this project including version. --> |
| <artifactId>maven-resources-plugin</artifactId> |
| <executions> |
| <execution> |
| <id>generate-bom</id> |
| <goals> |
| <goal>copy-resources</goal> |
| </goals> |
| <phase>process-resources</phase> |
| <configuration> |
| <resources> |
| <resource> |
| <directory>src/main/resources-filtered</directory> |
| <filtering>true</filtering> |
| </resource> |
| </resources> |
| <outputDirectory>${project.build.directory}</outputDirectory> |
| </configuration> |
| </execution> |
| </executions> |
| </plugin> |
| <plugin> |
| <!-- |
| Configure the destination repository based on the SNAPSHOT prefix. |
| This first sets tmp properties conditionally to snapshot, and then |
| updates them in the next phase to release if they are not snapshot. |
| Note: The input property value is unchanged if the regex does not match. |
| |
| m/SNAPSHOT/ m/$version/ |
| Case 1: 1.1-SNAPSHOT -> snapshots -> snapshots |
| Case 2: 1.1 -> 1.1 -> releases |
| --> |
| <groupId>org.codehaus.mojo</groupId> |
| <artifactId>build-helper-maven-plugin</artifactId> |
| <executions> |
| <execution> |
| <id>detect-snapshot</id> |
| <goals> |
| <goal>regex-properties</goal> |
| </goals> |
| <phase>validate</phase> |
| <configuration> |
| <regexPropertySettings> |
| <regexPropertySetting> |
| <name>bom.repositoryId.tmp</name> |
| <value>${project.version}</value> |
| <regex>.*-SNAPSHOT.*</regex> |
| <replacement>${statistics.bom.snapshots.repositoryId}</replacement> |
| <failIfNoMatch>false</failIfNoMatch> |
| </regexPropertySetting> |
| <regexPropertySetting> |
| <name>bom.url.tmp</name> |
| <value>${project.version}</value> |
| <regex>.*-SNAPSHOT.*</regex> |
| <replacement>${statistics.bom.snapshots.url}</replacement> |
| <failIfNoMatch>false</failIfNoMatch> |
| </regexPropertySetting> |
| </regexPropertySettings> |
| </configuration> |
| </execution> |
| <execution> |
| <id>detect-release</id> |
| <goals> |
| <goal>regex-properties</goal> |
| </goals> |
| <phase>initialize</phase> |
| <configuration> |
| <regexPropertySettings> |
| <regexPropertySetting> |
| <name>bom.repositoryId</name> |
| <value>${bom.repositoryId.tmp}</value> |
| <regex>${project.version}</regex> |
| <replacement>${statistics.bom.releases.repositoryId}</replacement> |
| <failIfNoMatch>false</failIfNoMatch> |
| </regexPropertySetting> |
| <regexPropertySetting> |
| <name>bom.url</name> |
| <value>${bom.url.tmp}</value> |
| <regex>${project.version}</regex> |
| <replacement>${statistics.bom.releases.url}</replacement> |
| <failIfNoMatch>false</failIfNoMatch> |
| </regexPropertySetting> |
| </regexPropertySettings> |
| </configuration> |
| </execution> |
| </executions> |
| </plugin> |
| <!-- The install and deploy plugin goals are skipped. |
| Here we install the generated BOM file as the project artifact. |
| The deploy is performed by different plugins configured in profiles |
| depending if GPG signing is required. --> |
| <plugin> |
| <artifactId>maven-install-plugin</artifactId> |
| <executions> |
| <execution> |
| <id>install-bom</id> |
| <goals> |
| <goal>install-file</goal> |
| </goals> |
| <phase>install</phase> |
| <configuration> |
| <file>${statistics.bom.file}</file> |
| <!-- Collect group, artifact, version and packaging from the BOM --> |
| <pomFile>${statistics.bom.file}</pomFile> |
| <generatePom>false</generatePom> |
| </configuration> |
| </execution> |
| </executions> |
| </plugin> |
| </plugins> |
| </build> |
| |
| <profiles> |
| <profile> |
| <!-- Match the test-deploy profile in commons-parent and deploy locally --> |
| <id>test-deploy</id> |
| <properties> |
| <statistics.bom.snapshots.repositoryId>test-deploy</statistics.bom.snapshots.repositoryId> |
| <statistics.bom.releases.repositoryId>test-deploy</statistics.bom.releases.repositoryId> |
| <statistics.bom.snapshots.url>file:target/deploy</statistics.bom.snapshots.url> |
| <statistics.bom.releases.url>file:target/deploy</statistics.bom.releases.url> |
| </properties> |
| </profile> |
| |
| <profile> |
| <!-- Changes to the commons-parent release profile --> |
| <id>release</id> |
| <build> |
| <plugins> |
| <plugin> |
| <artifactId>maven-gpg-plugin</artifactId> |
| <executions> |
| <!-- Skip the signing of the project artifact performed by commons-parent |
| (i.e. the pom) to avoid generating additional .asc files in the target |
| directory. These are mistakenly deployed in addition to the desired asc |
| file from signing the genreated BOM. --> |
| <execution> |
| <id>sign-artifacts</id> |
| <goals> |
| <goal>sign</goal> |
| </goals> |
| <configuration> |
| <skip>true</skip> |
| </configuration> |
| </execution> |
| </executions> |
| </plugin> |
| </plugins> |
| </build> |
| </profile> |
| |
| <!-- Activate the appropriate deploy goal. |
| If both profiles are activated (using the profile ids) then this will deploy the same |
| artifact twice with different build timestamps; only one is present in the metadata. |
| The GPG signature is valid for either as it has no build timestamp. --> |
| <profile> |
| <!-- deploy --> |
| <id>release-deploy</id> |
| <activation> |
| <property> |
| <name>gpg.skip</name> |
| <!-- This ignores the value for simplicity to allow -Dgpg.skip to activate. |
| The side-effect being that -Dgpg.skip=false will still activate the profile. |
| This is only relevant for the deploy phase and impacts the release process. --> |
| </property> |
| </activation> |
| <build> |
| <plugins> |
| <plugin> |
| <artifactId>maven-deploy-plugin</artifactId> |
| <executions> |
| <execution> |
| <id>deploy-bom</id> |
| <goals> |
| <goal>deploy-file</goal> |
| </goals> |
| <phase>deploy</phase> |
| <configuration> |
| <!-- Dynamically configured destination based on SNAPSHOT or test-deploy profile --> |
| <url>${bom.url}</url> |
| <repositoryId>${bom.repositoryId}</repositoryId> |
| <file>${statistics.bom.file}</file> |
| <!-- Collect group, artifact, version and packaging from the BOM --> |
| <pomFile>${statistics.bom.file}</pomFile> |
| <generatePom>false</generatePom> |
| </configuration> |
| </execution> |
| </executions> |
| </plugin> |
| </plugins> |
| </build> |
| </profile> |
| |
| <profile> |
| <!-- sign and deploy --> |
| <id>release-sign-and-deploy</id> |
| <activation> |
| <property> |
| <!-- Opposite of the deploy profile --> |
| <name>!gpg.skip</name> |
| </property> |
| </activation> |
| <build> |
| <plugins> |
| <plugin> |
| <artifactId>maven-gpg-plugin</artifactId> |
| <executions> |
| <execution> |
| <id>deploy-bom</id> |
| <goals> |
| <goal>sign-and-deploy-file</goal> |
| </goals> |
| <phase>deploy</phase> |
| <configuration> |
| <!-- Dynamically configured destination based on SNAPSHOT or test-deploy profile --> |
| <url>${bom.url}</url> |
| <repositoryId>${bom.repositoryId}</repositoryId> |
| <file>${statistics.bom.file}</file> |
| <!-- Collect group, artifact, version and packaging from the BOM --> |
| <pomFile>${statistics.bom.file}</pomFile> |
| <generatePom>false</generatePom> |
| </configuration> |
| </execution> |
| </executions> |
| </plugin> |
| </plugins> |
| </build> |
| </profile> |
| |
| </profiles> |
| |
| </project> |