1338 lines
53 KiB
Plaintext
1338 lines
53 KiB
Plaintext
![]() |
<?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 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
|
|||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
|||
|
<modelVersion>4.0.0</modelVersion>
|
|||
|
<parent>
|
|||
|
<groupId>org.apache</groupId>
|
|||
|
<artifactId>apache</artifactId>
|
|||
|
<version>31</version>
|
|||
|
</parent>
|
|||
|
<groupId>org.apache.logging</groupId>
|
|||
|
<artifactId>logging-parent</artifactId>
|
|||
|
<version>10.6.0</version>
|
|||
|
<packaging>pom</packaging>
|
|||
|
<name>Apache Logging Parent</name>
|
|||
|
<description>Parent project internally used in Maven-based projects of the Apache Logging Services</description>
|
|||
|
<url>https://logging.apache.org/logging-parent</url>
|
|||
|
<inceptionYear>1999</inceptionYear>
|
|||
|
<licenses>
|
|||
|
<license>
|
|||
|
<name>Apache-2.0</name>
|
|||
|
<url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
|
|||
|
<distribution>repo</distribution>
|
|||
|
</license>
|
|||
|
</licenses>
|
|||
|
<developers>
|
|||
|
<developer>
|
|||
|
<id>ggregory</id>
|
|||
|
<name>Gary Gregory</name>
|
|||
|
<email>ggregory@apache.org</email>
|
|||
|
<url>https://www.garygregory.com</url>
|
|||
|
<organization>The Apache Software Foundation</organization>
|
|||
|
<organizationUrl>https://www.apache.org/</organizationUrl>
|
|||
|
<roles>
|
|||
|
<role>PMC Member</role>
|
|||
|
</roles>
|
|||
|
<timezone>America/New_York</timezone>
|
|||
|
</developer>
|
|||
|
<developer>
|
|||
|
<id>grobmeier</id>
|
|||
|
<name>Christian Grobmeier</name>
|
|||
|
<email>grobmeier@apache.org</email>
|
|||
|
<roles>
|
|||
|
<role>PMC Member</role>
|
|||
|
</roles>
|
|||
|
<timezone>Europe/Berlin</timezone>
|
|||
|
</developer>
|
|||
|
<developer>
|
|||
|
<id>mattsicker</id>
|
|||
|
<name>Matt Sicker</name>
|
|||
|
<email>mattsicker@apache.org</email>
|
|||
|
<organization>Apple</organization>
|
|||
|
<roles>
|
|||
|
<role>PMC Member</role>
|
|||
|
</roles>
|
|||
|
<timezone>America/Chicago</timezone>
|
|||
|
</developer>
|
|||
|
<developer>
|
|||
|
<id>pkarwasz</id>
|
|||
|
<name>Piotr P. Karwasz</name>
|
|||
|
<email>pkarwasz@apache.org</email>
|
|||
|
<roles>
|
|||
|
<role>PMC Member</role>
|
|||
|
</roles>
|
|||
|
<timezone>Europe/Warsaw</timezone>
|
|||
|
</developer>
|
|||
|
<developer>
|
|||
|
<id>vy</id>
|
|||
|
<name>Volkan Yazıcı</name>
|
|||
|
<email>vy@apache.org</email>
|
|||
|
<roles>
|
|||
|
<role>PMC Chair</role>
|
|||
|
</roles>
|
|||
|
<timezone>Europe/Amsterdam</timezone>
|
|||
|
</developer>
|
|||
|
</developers>
|
|||
|
<mailingLists>
|
|||
|
<mailingList>
|
|||
|
<name>log4j-user</name>
|
|||
|
<subscribe>log4j-user-subscribe@logging.apache.org</subscribe>
|
|||
|
<unsubscribe>log4j-user-unsubscribe@logging.apache.org</unsubscribe>
|
|||
|
<post>log4j-user@logging.apache.org</post>
|
|||
|
<archive>https://lists.apache.org/list.html?log4j-user@logging.apache.org</archive>
|
|||
|
</mailingList>
|
|||
|
<mailingList>
|
|||
|
<name>dev</name>
|
|||
|
<subscribe>dev-subscribe@logging.apache.org</subscribe>
|
|||
|
<unsubscribe>dev-unsubscribe@logging.apache.org</unsubscribe>
|
|||
|
<post>dev@logging.apache.org</post>
|
|||
|
<archive>https://lists.apache.org/list.html?dev@logging.apache.org</archive>
|
|||
|
</mailingList>
|
|||
|
</mailingLists>
|
|||
|
<scm>
|
|||
|
<connection>scm:git:git@github.com:apache/logging-parent.git</connection>
|
|||
|
<developerConnection>scm:git:git@github.com:apache/logging-parent.git</developerConnection>
|
|||
|
<url>https://github.com/apache/logging-parent</url>
|
|||
|
</scm>
|
|||
|
<issueManagement>
|
|||
|
<system>GitHub Issues</system>
|
|||
|
<url>https://github.com/apache/logging-parent/issues</url>
|
|||
|
</issueManagement>
|
|||
|
<ciManagement>
|
|||
|
<system>GitHub Actions</system>
|
|||
|
<url>https://github.com/apache/logging-parent/actions</url>
|
|||
|
</ciManagement>
|
|||
|
<distributionManagement>
|
|||
|
<downloadUrl>https://logging.apache.org/logging-parent/latest/#distribution</downloadUrl>
|
|||
|
</distributionManagement>
|
|||
|
<properties>
|
|||
|
<maven.compiler.release>8</maven.compiler.release>
|
|||
|
<version.apache-rat-plugin>0.16</version.apache-rat-plugin>
|
|||
|
<xml-maven-plugin.version>1.1.0</xml-maven-plugin.version>
|
|||
|
<spotbugs-annotations.version>4.8.3</spotbugs-annotations.version>
|
|||
|
<bnd-baseline-maven-plugin.version>7.0.0</bnd-baseline-maven-plugin.version>
|
|||
|
<bnd-maven-plugin.version>7.0.0</bnd-maven-plugin.version>
|
|||
|
<bnd-extra-package-options></bnd-extra-package-options>
|
|||
|
<findsecbugs-plugin.version>1.12.0</findsecbugs-plugin.version>
|
|||
|
<bnd-jpms-module-info>$[bnd-module-name];access=0</bnd-jpms-module-info>
|
|||
|
<flatten-maven-plugin.version>1.5.0</flatten-maven-plugin.version>
|
|||
|
<osgi.annotation.version>8.1.0</osgi.annotation.version>
|
|||
|
<asciidoctor-maven-plugin.version>2.2.4</asciidoctor-maven-plugin.version>
|
|||
|
<jspecify.version>0.3.0</jspecify.version>
|
|||
|
<osgi.annotation.bundle.version>2.0.0</osgi.annotation.bundle.version>
|
|||
|
<osgi.annotation.versioning.version>1.1.2</osgi.annotation.versioning.version>
|
|||
|
<log4j-changelog-maven-plugin.version>0.7.0</log4j-changelog-maven-plugin.version>
|
|||
|
<bnd.annotation.version>7.0.0</bnd.annotation.version>
|
|||
|
<error-prone.version>2.24.1</error-prone.version>
|
|||
|
<sbom.xslt><xsl:stylesheet version="1.0"
|
|||
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|||
|
xmlns="http://cyclonedx.org/schema/bom/1.5"
|
|||
|
xmlns:xalan="http://xml.apache.org/xalan"
|
|||
|
xmlns:cdx14="http://cyclonedx.org/schema/bom/1.4"
|
|||
|
xmlns:cdx15="http://cyclonedx.org/schema/bom/1.5"
|
|||
|
exclude-result-prefixes="xalan cdx14 cdx15">
|
|||
|
|
|||
|
<xsl:param name="sbom.serialNumber"/>
|
|||
|
<xsl:param name="vdr.url"/>
|
|||
|
<xsl:output method="xml"
|
|||
|
version="1.0"
|
|||
|
encoding="UTF-8"
|
|||
|
indent="yes"
|
|||
|
xalan:indent-amount="2"
|
|||
|
xalan:line-separator="&#10;"/>
|
|||
|
|
|||
|
<!-- Fixes the license formatting -->
|
|||
|
<xsl:template match="/">
|
|||
|
<xsl:text>&#10;</xsl:text>
|
|||
|
<xsl:apply-templates />
|
|||
|
</xsl:template>
|
|||
|
|
|||
|
<!-- Standard copy template -->
|
|||
|
<xsl:template match="@*|node()">
|
|||
|
<xsl:copy>
|
|||
|
<xsl:apply-templates select="@*" />
|
|||
|
<xsl:apply-templates />
|
|||
|
</xsl:copy>
|
|||
|
</xsl:template>
|
|||
|
|
|||
|
<!-- Bump the SBOM schema version from `1.4` to `1.5` -->
|
|||
|
<xsl:template match="cdx14:*">
|
|||
|
<xsl:element name="{local-name()}" namespace="http://cyclonedx.org/schema/bom/1.5">
|
|||
|
<xsl:apply-templates select="@*" />
|
|||
|
<xsl:apply-templates />
|
|||
|
</xsl:element>
|
|||
|
</xsl:template>
|
|||
|
|
|||
|
<!-- Add the SBOM `serialNumber` -->
|
|||
|
<xsl:template match="cdx14:bom">
|
|||
|
<bom>
|
|||
|
<xsl:attribute name="version">
|
|||
|
<xsl:value-of select="1"/>
|
|||
|
</xsl:attribute>
|
|||
|
<xsl:attribute name="serialNumber">
|
|||
|
<xsl:text>urn:uuid:</xsl:text>
|
|||
|
<xsl:value-of select="$sbom.serialNumber"/>
|
|||
|
</xsl:attribute>
|
|||
|
<xsl:apply-templates />
|
|||
|
</bom>
|
|||
|
</xsl:template>
|
|||
|
|
|||
|
<!-- Add the link to the VDR -->
|
|||
|
<xsl:template match="cdx14:externalReferences[starts-with(preceding-sibling::cdx14:group, 'org.apache.logging')]">
|
|||
|
<externalReferences>
|
|||
|
<xsl:apply-templates/>
|
|||
|
<reference>
|
|||
|
<xsl:attribute name="type">vulnerability-assertion</xsl:attribute>
|
|||
|
<url>
|
|||
|
<xsl:value-of select="$vdr.url"/>
|
|||
|
</url>
|
|||
|
</reference>
|
|||
|
</externalReferences>
|
|||
|
</xsl:template>
|
|||
|
|
|||
|
</xsl:stylesheet></sbom.xslt>
|
|||
|
<minimalJavaBuildVersion>[17,18)</minimalJavaBuildVersion>
|
|||
|
<bnd-bundle-symbolicname>$[project.groupId].$[subst;$[subst;$[project.artifactId];log4j-];[^A-Za-z0-9];.]</bnd-bundle-symbolicname>
|
|||
|
<palantir-java-format.version>2.39.0</palantir-java-format.version>
|
|||
|
<beanshell-maven-plugin.version>1.4</beanshell-maven-plugin.version>
|
|||
|
<vdr.url>https://logging.apache.org/cyclonedx/vdr.xml</vdr.url>
|
|||
|
<maven.compiler.source>8</maven.compiler.source>
|
|||
|
<bnd-extra-config></bnd-extra-config>
|
|||
|
<build-helper-maven-plugin.version>3.5.0</build-helper-maven-plugin.version>
|
|||
|
<maven-artifact-plugin.version>3.5.0</maven-artifact-plugin.version>
|
|||
|
<minimalMavenBuildVersion>3.8.1</minimalMavenBuildVersion>
|
|||
|
<org.eclipse.jgit.version>6.8.0.202311291450-r</org.eclipse.jgit.version>
|
|||
|
<bnd-module-name>$[Bundle-SymbolicName]</bnd-module-name>
|
|||
|
<revision>10.6.0</revision>
|
|||
|
<spotbugs-maven-plugin.version>4.8.2.0</spotbugs-maven-plugin.version>
|
|||
|
<spotless-maven-plugin.version>2.41.1</spotless-maven-plugin.version>
|
|||
|
<maven.compiler.target>8</maven.compiler.target>
|
|||
|
<bnd-multi-release>false</bnd-multi-release>
|
|||
|
<project.build.outputTimestamp>2024-01-11T10:10:48Z</project.build.outputTimestamp>
|
|||
|
<bnd-extra-module-options></bnd-extra-module-options>
|
|||
|
<cyclonedx-maven-plugin.version>2.7.10</cyclonedx-maven-plugin.version>
|
|||
|
<sign-maven-plugin.version>1.0.1</sign-maven-plugin.version>
|
|||
|
<restrict-imports-enforcer-rule.version>2.4.0</restrict-imports-enforcer-rule.version>
|
|||
|
</properties>
|
|||
|
<dependencyManagement>
|
|||
|
<dependencies>
|
|||
|
<dependency>
|
|||
|
<groupId>biz.aQute.bnd</groupId>
|
|||
|
<artifactId>biz.aQute.bnd.annotation</artifactId>
|
|||
|
<version>${bnd.annotation.version}</version>
|
|||
|
</dependency>
|
|||
|
<dependency>
|
|||
|
<groupId>com.github.spotbugs</groupId>
|
|||
|
<artifactId>spotbugs-annotations</artifactId>
|
|||
|
<version>${spotbugs-annotations.version}</version>
|
|||
|
</dependency>
|
|||
|
<dependency>
|
|||
|
<groupId>org.jspecify</groupId>
|
|||
|
<artifactId>jspecify</artifactId>
|
|||
|
<version>${jspecify.version}</version>
|
|||
|
</dependency>
|
|||
|
<dependency>
|
|||
|
<groupId>org.osgi</groupId>
|
|||
|
<artifactId>osgi.annotation</artifactId>
|
|||
|
<version>${osgi.annotation.version}</version>
|
|||
|
</dependency>
|
|||
|
<dependency>
|
|||
|
<groupId>org.osgi</groupId>
|
|||
|
<artifactId>org.osgi.annotation.bundle</artifactId>
|
|||
|
<version>${osgi.annotation.bundle.version}</version>
|
|||
|
</dependency>
|
|||
|
<dependency>
|
|||
|
<groupId>org.osgi</groupId>
|
|||
|
<artifactId>org.osgi.annotation.versioning</artifactId>
|
|||
|
<version>${osgi.annotation.versioning.version}</version>
|
|||
|
</dependency>
|
|||
|
</dependencies>
|
|||
|
</dependencyManagement>
|
|||
|
<build>
|
|||
|
<pluginManagement>
|
|||
|
<plugins>
|
|||
|
<plugin>
|
|||
|
<groupId>org.asciidoctor</groupId>
|
|||
|
<artifactId>asciidoctor-maven-plugin</artifactId>
|
|||
|
<version>${asciidoctor-maven-plugin.version}</version>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<artifactId>maven-artifact-plugin</artifactId>
|
|||
|
<version>${maven-artifact-plugin.version}</version>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<groupId>org.codehaus.mojo</groupId>
|
|||
|
<artifactId>flatten-maven-plugin</artifactId>
|
|||
|
<version>${flatten-maven-plugin.version}</version>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<groupId>org.simplify4u.plugins</groupId>
|
|||
|
<artifactId>sign-maven-plugin</artifactId>
|
|||
|
<version>${sign-maven-plugin.version}</version>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<groupId>com.github.spotbugs</groupId>
|
|||
|
<artifactId>spotbugs-maven-plugin</artifactId>
|
|||
|
<version>${spotbugs-maven-plugin.version}</version>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<groupId>org.codehaus.mojo</groupId>
|
|||
|
<artifactId>xml-maven-plugin</artifactId>
|
|||
|
<version>${xml-maven-plugin.version}</version>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<groupId>com.diffplug.spotless</groupId>
|
|||
|
<artifactId>spotless-maven-plugin</artifactId>
|
|||
|
<version>${spotless-maven-plugin.version}</version>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<groupId>com.github.genthaler</groupId>
|
|||
|
<artifactId>beanshell-maven-plugin</artifactId>
|
|||
|
<version>${beanshell-maven-plugin.version}</version>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<groupId>org.apache.logging.log4j</groupId>
|
|||
|
<artifactId>log4j-changelog-maven-plugin</artifactId>
|
|||
|
<version>${log4j-changelog-maven-plugin.version}</version>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<groupId>biz.aQute.bnd</groupId>
|
|||
|
<artifactId>bnd-baseline-maven-plugin</artifactId>
|
|||
|
<version>${bnd-baseline-maven-plugin.version}</version>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<groupId>biz.aQute.bnd</groupId>
|
|||
|
<artifactId>bnd-maven-plugin</artifactId>
|
|||
|
<version>${bnd-maven-plugin.version}</version>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<groupId>org.codehaus.mojo</groupId>
|
|||
|
<artifactId>build-helper-maven-plugin</artifactId>
|
|||
|
<version>${build-helper-maven-plugin.version}</version>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<groupId>org.cyclonedx</groupId>
|
|||
|
<artifactId>cyclonedx-maven-plugin</artifactId>
|
|||
|
<version>${cyclonedx-maven-plugin.version}</version>
|
|||
|
</plugin>
|
|||
|
</plugins>
|
|||
|
</pluginManagement>
|
|||
|
<plugins>
|
|||
|
<plugin>
|
|||
|
<groupId>org.codehaus.mojo</groupId>
|
|||
|
<artifactId>flatten-maven-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<id>flatten-revision</id>
|
|||
|
<phase>process-resources</phase>
|
|||
|
<goals>
|
|||
|
<goal>flatten</goal>
|
|||
|
</goals>
|
|||
|
<configuration>
|
|||
|
<updatePomFile>true</updatePomFile>
|
|||
|
<flattenMode>resolveCiFriendliesOnly</flattenMode>
|
|||
|
</configuration>
|
|||
|
</execution>
|
|||
|
<execution>
|
|||
|
<id>clean-flattened-pom</id>
|
|||
|
<phase>clean</phase>
|
|||
|
<goals>
|
|||
|
<goal>clean</goal>
|
|||
|
</goals>
|
|||
|
</execution>
|
|||
|
<execution>
|
|||
|
<id>flatten-bom</id>
|
|||
|
<phase>none</phase>
|
|||
|
<goals>
|
|||
|
<goal>flatten</goal>
|
|||
|
</goals>
|
|||
|
<configuration>
|
|||
|
<flattenMode>bom</flattenMode>
|
|||
|
<pomElements>
|
|||
|
<build>remove</build>
|
|||
|
<properties>remove</properties>
|
|||
|
<repositories>remove</repositories>
|
|||
|
<distributionManagement>remove</distributionManagement>
|
|||
|
<dependencyManagement>interpolate</dependencyManagement>
|
|||
|
<parent>keep</parent>
|
|||
|
</pomElements>
|
|||
|
</configuration>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<artifactId>maven-clean-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<id>delete-module-descriptor</id>
|
|||
|
<phase>process-resources</phase>
|
|||
|
<goals>
|
|||
|
<goal>clean</goal>
|
|||
|
</goals>
|
|||
|
<configuration>
|
|||
|
<excludeDefaultDirectories>true</excludeDefaultDirectories>
|
|||
|
<filesets>
|
|||
|
<fileset>
|
|||
|
<directory>${project.build.outputDirectory}</directory>
|
|||
|
<includes>
|
|||
|
<include>module-info.class</include>
|
|||
|
</includes>
|
|||
|
</fileset>
|
|||
|
</filesets>
|
|||
|
</configuration>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<artifactId>maven-compiler-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<id>default-testCompile</id>
|
|||
|
<configuration>
|
|||
|
<useModulePath>false</useModulePath>
|
|||
|
</configuration>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
<configuration>
|
|||
|
<source>${maven.compiler.source}</source>
|
|||
|
<release>${maven.compiler.release}</release>
|
|||
|
<target>${maven.compiler.target}</target>
|
|||
|
<encoding>${project.build.sourceEncoding}</encoding>
|
|||
|
<parameters>true</parameters>
|
|||
|
<compilerArgs>
|
|||
|
<arg>-Xlint:all</arg>
|
|||
|
<arg>-XDcompilePolicy=simple</arg>
|
|||
|
<arg>-Xplugin:ErrorProne</arg>
|
|||
|
</compilerArgs>
|
|||
|
<annotationProcessorPaths>
|
|||
|
<path>
|
|||
|
<groupId>com.google.errorprone</groupId>
|
|||
|
<artifactId>error_prone_core</artifactId>
|
|||
|
<version>${error-prone.version}</version>
|
|||
|
</path>
|
|||
|
</annotationProcessorPaths>
|
|||
|
</configuration>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<artifactId>maven-failsafe-plugin</artifactId>
|
|||
|
<configuration>
|
|||
|
<useModulePath>false</useModulePath>
|
|||
|
</configuration>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<artifactId>maven-surefire-plugin</artifactId>
|
|||
|
<configuration>
|
|||
|
<useModulePath>false</useModulePath>
|
|||
|
</configuration>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<groupId>org.cyclonedx</groupId>
|
|||
|
<artifactId>cyclonedx-maven-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<id>generate-sbom</id>
|
|||
|
<phase>package</phase>
|
|||
|
<goals>
|
|||
|
<goal>makeAggregateBom</goal>
|
|||
|
</goals>
|
|||
|
<configuration>
|
|||
|
<outputFormat>xml</outputFormat>
|
|||
|
</configuration>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<groupId>com.github.genthaler</groupId>
|
|||
|
<artifactId>beanshell-maven-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<id>process-sbom</id>
|
|||
|
<phase>package</phase>
|
|||
|
<goals>
|
|||
|
<goal>run</goal>
|
|||
|
</goals>
|
|||
|
<configuration>
|
|||
|
<script>import java.io.*;
|
|||
|
import java.nio.file.*;
|
|||
|
import java.util.*;
|
|||
|
import javax.xml.transform.*;
|
|||
|
import javax.xml.transform.stream.*;
|
|||
|
import org.apache.commons.codec.digest.*;
|
|||
|
|
|||
|
// Compute parameters
|
|||
|
final String xslt = project.getProperties().getProperty("sbom.xslt");
|
|||
|
final File pomFile = project.getModel().getPomFile();
|
|||
|
final byte[] digest = new DigestUtils(MessageDigestAlgorithms.SHA_256).digest(pomFile);
|
|||
|
final UUID bomSerialNumber = UUID.nameUUIDFromBytes(digest);
|
|||
|
final String vdrUrl = Objects.requireNonNull(project.getProperties().getProperty("vdr.url"), "vdr.url");
|
|||
|
|
|||
|
// Move original SBOM file
|
|||
|
final Path basedir = project.getBasedir().toPath();
|
|||
|
final Path destPath = basedir.resolve("target/bom.xml");
|
|||
|
final Path sourcePath = basedir.resolve("target/bom.orig.xml");
|
|||
|
if (!Files.isReadable(destPath)) {
|
|||
|
System.out.println("No CycloneDX SBOM file found, skipping transformation.");
|
|||
|
return;
|
|||
|
}
|
|||
|
Files.move(destPath, sourcePath, new CopyOption[] {StandardCopyOption.REPLACE_EXISTING});
|
|||
|
|
|||
|
// Apply XSLT transformation
|
|||
|
final StreamSource xsltSource = new StreamSource(new StringReader(xslt));
|
|||
|
final TransformerFactory factory = TransformerFactory.newInstance();
|
|||
|
final Transformer transformer = factory.newTransformer(xsltSource);
|
|||
|
transformer.setParameter("sbom.serialNumber", bomSerialNumber.toString());
|
|||
|
transformer.setParameter("vdr.url", vdrUrl);
|
|||
|
final StreamSource source = new StreamSource(sourcePath.toUri().toASCIIString());
|
|||
|
final StreamResult result = new StreamResult(destPath.toUri().toASCIIString());
|
|||
|
transformer.transform(source, result);</script>
|
|||
|
</configuration>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
<dependencies>
|
|||
|
<dependency>
|
|||
|
<groupId>commons-codec</groupId>
|
|||
|
<artifactId>commons-codec</artifactId>
|
|||
|
<version>1.16.0</version>
|
|||
|
</dependency>
|
|||
|
<dependency>
|
|||
|
<groupId>xalan</groupId>
|
|||
|
<artifactId>serializer</artifactId>
|
|||
|
<version>2.7.3</version>
|
|||
|
</dependency>
|
|||
|
<dependency>
|
|||
|
<groupId>xalan</groupId>
|
|||
|
<artifactId>xalan</artifactId>
|
|||
|
<version>2.7.3</version>
|
|||
|
</dependency>
|
|||
|
</dependencies>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<artifactId>maven-enforcer-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<id>enforce-upper-bound-deps</id>
|
|||
|
<goals>
|
|||
|
<goal>enforce</goal>
|
|||
|
</goals>
|
|||
|
<configuration>
|
|||
|
<rules>
|
|||
|
<requireUpperBoundDeps />
|
|||
|
</rules>
|
|||
|
</configuration>
|
|||
|
</execution>
|
|||
|
<execution>
|
|||
|
<id>ban-wildcard-imports</id>
|
|||
|
<goals>
|
|||
|
<goal>enforce</goal>
|
|||
|
</goals>
|
|||
|
<configuration>
|
|||
|
<rules>
|
|||
|
<RestrictImports>
|
|||
|
<reason>Expand all wildcard imports</reason>
|
|||
|
<bannedImport>**.'*'</bannedImport>
|
|||
|
</RestrictImports>
|
|||
|
</rules>
|
|||
|
</configuration>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
<dependencies>
|
|||
|
<dependency>
|
|||
|
<groupId>de.skuzzle.enforcer</groupId>
|
|||
|
<artifactId>restrict-imports-enforcer-rule</artifactId>
|
|||
|
<version>${restrict-imports-enforcer-rule.version}</version>
|
|||
|
</dependency>
|
|||
|
</dependencies>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<groupId>com.github.spotbugs</groupId>
|
|||
|
<artifactId>spotbugs-maven-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<id>default-spotbugs</id>
|
|||
|
<phase>verify</phase>
|
|||
|
<goals>
|
|||
|
<goal>check</goal>
|
|||
|
</goals>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
<configuration>
|
|||
|
<fork>false</fork>
|
|||
|
<plugins>
|
|||
|
<plugin>
|
|||
|
<groupId>com.h3xstream.findsecbugs</groupId>
|
|||
|
<artifactId>findsecbugs-plugin</artifactId>
|
|||
|
<version>${findsecbugs-plugin.version}</version>
|
|||
|
</plugin>
|
|||
|
</plugins>
|
|||
|
</configuration>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<groupId>org.apache.rat</groupId>
|
|||
|
<artifactId>apache-rat-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<phase>verify</phase>
|
|||
|
<goals>
|
|||
|
<goal>check</goal>
|
|||
|
</goals>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
<configuration>
|
|||
|
<consoleOutput>true</consoleOutput>
|
|||
|
<excludes combine.children="append">
|
|||
|
<exclude>.java-version</exclude>
|
|||
|
<exclude>.mvn/jvm.config</exclude>
|
|||
|
<exclude>**/*.txt</exclude>
|
|||
|
<exclude>src/changelog/**/*.xml</exclude>
|
|||
|
<exclude>.github/ISSUE_TEMPLATE/*.md</exclude>
|
|||
|
<exclude>.github/pull_request_template.md</exclude>
|
|||
|
</excludes>
|
|||
|
</configuration>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<groupId>com.diffplug.spotless</groupId>
|
|||
|
<artifactId>spotless-maven-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<id>default-spotless</id>
|
|||
|
<phase>verify</phase>
|
|||
|
<goals>
|
|||
|
<goal>check</goal>
|
|||
|
</goals>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
<dependencies>
|
|||
|
<dependency>
|
|||
|
<groupId>com.palantir.javaformat</groupId>
|
|||
|
<artifactId>palantir-java-format</artifactId>
|
|||
|
<version>${palantir-java-format.version}</version>
|
|||
|
</dependency>
|
|||
|
</dependencies>
|
|||
|
<configuration>
|
|||
|
<java>
|
|||
|
<licenseHeader>
|
|||
|
<content>/*
|
|||
|
* 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.
|
|||
|
*/</content>
|
|||
|
</licenseHeader>
|
|||
|
<palantirJavaFormat>
|
|||
|
<version>${palantir-java-format.version}</version>
|
|||
|
</palantirJavaFormat>
|
|||
|
</java>
|
|||
|
<pom>
|
|||
|
<licenseHeader>
|
|||
|
<content><?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.
|
|||
|
--></content>
|
|||
|
<delimiter><project</delimiter>
|
|||
|
</licenseHeader>
|
|||
|
<sortPom>
|
|||
|
<expandEmptyElements>false</expandEmptyElements>
|
|||
|
<spaceBeforeCloseEmptyElement>true</spaceBeforeCloseEmptyElement>
|
|||
|
</sortPom>
|
|||
|
</pom>
|
|||
|
<formats>
|
|||
|
<format>
|
|||
|
<includes>
|
|||
|
<include>src/**/*.xml</include>
|
|||
|
</includes>
|
|||
|
<excludes>
|
|||
|
<exclude>src/changelog/**/*.xml</exclude>
|
|||
|
</excludes>
|
|||
|
<licenseHeader>
|
|||
|
<content><?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.
|
|||
|
--></content>
|
|||
|
<delimiter><(!DOCTYPE|\w)</delimiter>
|
|||
|
</licenseHeader>
|
|||
|
<endWithNewline />
|
|||
|
<trimTrailingWhitespace />
|
|||
|
</format>
|
|||
|
<format>
|
|||
|
<includes>
|
|||
|
<include>src/**/*.properties</include>
|
|||
|
</includes>
|
|||
|
<licenseHeader>
|
|||
|
<content>#
|
|||
|
# 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.
|
|||
|
#</content>
|
|||
|
<delimiter>(##|[^#])</delimiter>
|
|||
|
</licenseHeader>
|
|||
|
<endWithNewline />
|
|||
|
</format>
|
|||
|
</formats>
|
|||
|
<yaml>
|
|||
|
<includes>
|
|||
|
<include>.asf.yaml</include>
|
|||
|
<include>.github/**/*.yaml</include>
|
|||
|
<include>.github/**/*.yml</include>
|
|||
|
<include>src/**/*.yaml</include>
|
|||
|
<include>src/**/*.yml</include>
|
|||
|
</includes>
|
|||
|
<licenseHeader>
|
|||
|
<content>#
|
|||
|
# 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.
|
|||
|
#</content>
|
|||
|
<delimiter>(##|[^#])</delimiter>
|
|||
|
</licenseHeader>
|
|||
|
<endWithNewline />
|
|||
|
<trimTrailingWhitespace />
|
|||
|
</yaml>
|
|||
|
<lineEndings>UNIX</lineEndings>
|
|||
|
</configuration>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<groupId>org.codehaus.mojo</groupId>
|
|||
|
<artifactId>build-helper-maven-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<id>parse-version</id>
|
|||
|
<phase>validate</phase>
|
|||
|
<goals>
|
|||
|
<goal>parse-version</goal>
|
|||
|
</goals>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<groupId>biz.aQute.bnd</groupId>
|
|||
|
<artifactId>bnd-maven-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<id>generate-module-descriptors</id>
|
|||
|
<goals>
|
|||
|
<goal>bnd-process</goal>
|
|||
|
</goals>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
<configuration>
|
|||
|
<bnd># `Bundle-DocURL` uses `project.url`.
|
|||
|
# This is set to `${project.parent.url}${project.artifactId}` through Maven's inheritance assembly[1].
|
|||
|
# This eventually produces incorrect values.
|
|||
|
# Hence, we remove them from the produced descriptor.
|
|||
|
#
|
|||
|
# `Bundle-SCM` uses `project.scm.url` and suffers from the same inheritance problem `Bundle-DocURL` has.
|
|||
|
#
|
|||
|
# [1] https://maven.apache.org/ref/3.9.4/maven-model-builder/#inheritance-assembly
|
|||
|
# Inheritance assembly can be disabled for certain properties, e.g., `project.url`.
|
|||
|
# Though this would necessitate changes in the root `pom.xml`s of parented projects.
|
|||
|
#
|
|||
|
# `Bundle-Developers` is removed, since it is nothing but noise and occupies quite some real estate.
|
|||
|
-removeheaders: Bundle-DocURL,Bundle-SCM,Bundle-Developers
|
|||
|
|
|||
|
# Create OSGi and JPMS module names based on the `groupId` and `artifactId`.
|
|||
|
# This almost agrees with `maven-bundle-plugin`, but replaces non-alphanumeric characters
|
|||
|
# with full stops `.`.
|
|||
|
Bundle-SymbolicName: $[bnd-bundle-symbolicname]
|
|||
|
-jpms-module-info: $[bnd-jpms-module-info]
|
|||
|
|
|||
|
# Prevents an execution error in multi-release jars:
|
|||
|
-fixupmessages.classes_in_wrong_dir: "Classes found in the wrong directory";restrict:=error;is:=warning
|
|||
|
|
|||
|
# Convert API leakage warnings to errors
|
|||
|
-fixupmessages.priv_refs: "private references";restrict:=warning;is:=error
|
|||
|
|
|||
|
# 1. OSGI modules do not make sense in JPMS
|
|||
|
# 2. BND has a problem detecting the name of multi-release JPMS modules
|
|||
|
-jpms-module-info-options: \
|
|||
|
$[bnd-extra-module-options],\
|
|||
|
org.osgi.core;static=true;transitive=false,\
|
|||
|
org.osgi.framework;static=true;transitive=false,\
|
|||
|
org.apache.logging.log4j;substitute="log4j-api",\
|
|||
|
org.apache.logging.log4j.core;substitute="log4j-core"
|
|||
|
|
|||
|
# Import all packages by default:
|
|||
|
Import-Package: \
|
|||
|
$[bnd-extra-package-options],\
|
|||
|
*
|
|||
|
|
|||
|
# Allow each project to override the `Multi-Release` header:
|
|||
|
Multi-Release: $[bnd-multi-release]
|
|||
|
|
|||
|
# Skipping to set `-jpms-multi-release` to `bnd-multi-release`.
|
|||
|
# This would generate descriptors in `META-INF/versions/<version>` directories needed for MRJs.
|
|||
|
# Though we decided to skip it due to following reasons:
|
|||
|
# 1. It is only needed by a handful of files in `-java9`-suffixed modules of `logging-log4j2`.
|
|||
|
# Hence, it is effectively insignificant.
|
|||
|
# 2. `dependency:unpack` and `bnd:bnd-process` executions must be aligned correctly.
|
|||
|
# See this issue for details: https://github.com/apache/logging-parent/issues/93
|
|||
|
# Adds certain `Implementation-*` and `Specification-*` entries to the generated `MANIFEST.MF`.
|
|||
|
# Using these properties is known to be a bad practice: https://github.com/apache/logging-log4j2/issues/1923#issuecomment-1786818254
|
|||
|
# Users should use `META-INF/maven/<groupId>/<artifactId>/pom.properties` instead.
|
|||
|
# Yet we support it due to backward compatibility reasons.
|
|||
|
# The issue was reported to `bnd-maven-plugin` too: https://github.com/bndtools/bnd/issues/5855
|
|||
|
# We set these values to their Maven Archiver defaults: https://maven.apache.org/shared/maven-archiver/#class_manifest
|
|||
|
Implementation-Title: ${project.name}
|
|||
|
Implementation-Vendor: ${project.organization.name}
|
|||
|
Implementation-Version: ${project.version}
|
|||
|
Specification-Title: ${project.name}
|
|||
|
Specification-Vendor: ${project.organization.name}
|
|||
|
Specification-Version: ${parsedVersion.majorVersion}.${parsedVersion.minorVersion}
|
|||
|
|
|||
|
# Extra configuration provided by the consumer:
|
|||
|
${bnd-extra-config}</bnd>
|
|||
|
</configuration>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<artifactId>maven-jar-plugin</artifactId>
|
|||
|
<configuration>
|
|||
|
<archive>
|
|||
|
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
|
|||
|
</archive>
|
|||
|
</configuration>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<groupId>biz.aQute.bnd</groupId>
|
|||
|
<artifactId>bnd-baseline-maven-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<id>check-api-compat</id>
|
|||
|
<goals>
|
|||
|
<goal>baseline</goal>
|
|||
|
</goals>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
<configuration>
|
|||
|
<includeDistributionManagement>false</includeDistributionManagement>
|
|||
|
<releaseversions>true</releaseversions>
|
|||
|
</configuration>
|
|||
|
</plugin>
|
|||
|
</plugins>
|
|||
|
</build>
|
|||
|
<profiles>
|
|||
|
<profile>
|
|||
|
<id>changelog-validate</id>
|
|||
|
<activation>
|
|||
|
<file>
|
|||
|
<exists>src/changelog</exists>
|
|||
|
</file>
|
|||
|
</activation>
|
|||
|
<build>
|
|||
|
<plugins>
|
|||
|
<plugin>
|
|||
|
<groupId>org.codehaus.mojo</groupId>
|
|||
|
<artifactId>xml-maven-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<id>validate-changelog</id>
|
|||
|
<phase>validate</phase>
|
|||
|
<goals>
|
|||
|
<goal>validate</goal>
|
|||
|
</goals>
|
|||
|
<configuration>
|
|||
|
<validationSets>
|
|||
|
<validationSet>
|
|||
|
<dir>src/changelog</dir>
|
|||
|
<includes>
|
|||
|
<include>**/*.xml</include>
|
|||
|
</includes>
|
|||
|
<publicId>http://logging.apache.org/log4j/changelog</publicId>
|
|||
|
<systemId>https://logging.apache.org/log4j/changelog-0.1.3.xsd</systemId>
|
|||
|
<validating>true</validating>
|
|||
|
</validationSet>
|
|||
|
</validationSets>
|
|||
|
</configuration>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
</plugin>
|
|||
|
</plugins>
|
|||
|
</build>
|
|||
|
</profile>
|
|||
|
<profile>
|
|||
|
<id>changelog-export</id>
|
|||
|
<activation>
|
|||
|
<file>
|
|||
|
<exists>src/changelog</exists>
|
|||
|
</file>
|
|||
|
</activation>
|
|||
|
<build>
|
|||
|
<plugins>
|
|||
|
<plugin>
|
|||
|
<groupId>org.apache.logging.log4j</groupId>
|
|||
|
<artifactId>log4j-changelog-maven-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<id>export-changelog</id>
|
|||
|
<phase>generate-sources</phase>
|
|||
|
<goals>
|
|||
|
<goal>export</goal>
|
|||
|
</goals>
|
|||
|
<configuration>
|
|||
|
<outputDirectory>src/site</outputDirectory>
|
|||
|
<indexTemplates>
|
|||
|
<template>
|
|||
|
<source>.index.adoc.ftl</source>
|
|||
|
<target>_release-notes.adoc</target>
|
|||
|
</template>
|
|||
|
</indexTemplates>
|
|||
|
<changelogTemplates>
|
|||
|
<template>
|
|||
|
<source>.release-notes.adoc.ftl</source>
|
|||
|
<target>_release-notes/_%v.adoc</target>
|
|||
|
</template>
|
|||
|
</changelogTemplates>
|
|||
|
</configuration>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
</plugin>
|
|||
|
</plugins>
|
|||
|
</build>
|
|||
|
</profile>
|
|||
|
<profile>
|
|||
|
<id>changelog-release</id>
|
|||
|
<build>
|
|||
|
<defaultGoal>log4j-changelog:release@release-changelog generate-sources</defaultGoal>
|
|||
|
<plugins>
|
|||
|
<plugin>
|
|||
|
<groupId>org.apache.logging.log4j</groupId>
|
|||
|
<artifactId>log4j-changelog-maven-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<id>release-changelog</id>
|
|||
|
<configuration>
|
|||
|
<releaseVersion>${project.version}</releaseVersion>
|
|||
|
</configuration>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
</plugin>
|
|||
|
</plugins>
|
|||
|
</build>
|
|||
|
</profile>
|
|||
|
<profile>
|
|||
|
<id>distribution</id>
|
|||
|
<build>
|
|||
|
<defaultGoal>enforcer:enforce@enforce-distribution-arguments bsh:run@create-distribution</defaultGoal>
|
|||
|
<plugins>
|
|||
|
<plugin>
|
|||
|
<artifactId>maven-enforcer-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<id>enforce-distribution-arguments</id>
|
|||
|
<goals>
|
|||
|
<goal>enforce</goal>
|
|||
|
</goals>
|
|||
|
<configuration>
|
|||
|
<rules>
|
|||
|
<requireProperty>
|
|||
|
<property>attachmentFilepathPattern</property>
|
|||
|
<message>You must set an `attachmentFilepathPattern` property for the regex pattern matched against the full filepath for determining attachments to be included in the distribution!</message>
|
|||
|
</requireProperty>
|
|||
|
<requireProperty>
|
|||
|
<property>attachmentCount</property>
|
|||
|
<message>You must set an `attachmentCount` property for the number of attachments expected to be found!</message>
|
|||
|
</requireProperty>
|
|||
|
</rules>
|
|||
|
<fail>true</fail>
|
|||
|
</configuration>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<groupId>com.github.genthaler</groupId>
|
|||
|
<artifactId>beanshell-maven-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<id>create-distribution</id>
|
|||
|
<goals>
|
|||
|
<goal>run</goal>
|
|||
|
</goals>
|
|||
|
<configuration>
|
|||
|
<script>import java.io.*;
|
|||
|
import java.nio.file.*;
|
|||
|
import java.util.*;
|
|||
|
import java.util.function.*;
|
|||
|
import java.util.stream.*;
|
|||
|
import java.util.zip.*;
|
|||
|
|
|||
|
import org.eclipse.jgit.dircache.*;
|
|||
|
import org.eclipse.jgit.lib.Repository;
|
|||
|
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
|
|||
|
|
|||
|
String outputTimestamp = project.getProperties().getProperty("project.build.outputTimestamp");
|
|||
|
long timestampMillis = java.time.Instant.parse(outputTimestamp).toEpochMilli();
|
|||
|
zip(String zipFileName, Map pathByFile) {
|
|||
|
OutputStream outputStream = new FileOutputStream(zipFileName);
|
|||
|
ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream);
|
|||
|
try {
|
|||
|
for (String file : pathByFile.keySet()) {
|
|||
|
Path path = pathByFile.get(file);
|
|||
|
// Skip directories, which is tracked by Git only when it is a symlink
|
|||
|
if (Files.isDirectory(path, /* required for BSH method resolution: */ new LinkOption[0])) {
|
|||
|
continue;
|
|||
|
}
|
|||
|
try {
|
|||
|
ZipEntry zipEntry = new ZipEntry(file);
|
|||
|
zipEntry.setTime(timestampMillis);
|
|||
|
zipOutputStream.putNextEntry(zipEntry);
|
|||
|
zipOutputStream.write(Files.readAllBytes(path));
|
|||
|
zipOutputStream.closeEntry();
|
|||
|
} catch (Exception error) {
|
|||
|
String message = String.format(
|
|||
|
"failed processing file `%s` at path `%s`",
|
|||
|
new Object[]{file, path});
|
|||
|
throw new RuntimeException(message, error);
|
|||
|
}
|
|||
|
}
|
|||
|
} catch (Exception error) {
|
|||
|
String message = String.format("failed creating ZIP archive `%s`", new Object[]{zipFileName});
|
|||
|
Exception extendedError = new RuntimeException(message, error);
|
|||
|
// Supplement diagnostics
|
|||
|
extendedError.printStackTrace(System.err);
|
|||
|
throw extendedError;
|
|||
|
} finally {
|
|||
|
zipOutputStream.close();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Find Git-tracked files
|
|||
|
SortedMap pathByFile = new TreeMap();
|
|||
|
Repository repo = new FileRepositoryBuilder().readEnvironment().findGitDir().build();
|
|||
|
DirCache repoCache = repo.readDirCache();
|
|||
|
String repoDirectoryParent = repo.getDirectory().getParent();
|
|||
|
for (int repoCacheEntryIndex = 0; repoCacheEntryIndex < repoCache.getEntryCount(); repoCacheEntryIndex++) {
|
|||
|
DirCacheEntry repoCacheEntry = repoCache.getEntry(repoCacheEntryIndex);
|
|||
|
String repoCacheEntryPath = repoCacheEntry.getPathString();
|
|||
|
pathByFile.put(repoCacheEntryPath, new File(repoDirectoryParent, repoCacheEntryPath).toPath());
|
|||
|
}
|
|||
|
|
|||
|
// Create the source distribution using Git-tracked files
|
|||
|
zip("target/src.zip", pathByFile);
|
|||
|
System.out.format("Generated the source distribution (`src.zip`) containing %d files.%n", new Object[]{pathByFile.size()});
|
|||
|
|
|||
|
// Short-circuit if there is no binary distribution expected
|
|||
|
if (${attachmentCount} == 0) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
// Find auxiliary files that will go into the binary distribution
|
|||
|
SortedMap pathByFile = new TreeMap();
|
|||
|
pathByFile.put("RELEASE-NOTES.adoc", new File("src/site/_release-notes/_${project.version}.adoc").toPath());
|
|||
|
pathByFile.put("README.adoc", new File("README.adoc").toPath());
|
|||
|
pathByFile.put("NOTICE.txt", new File("NOTICE.txt").toPath());
|
|||
|
pathByFile.put("LICENSE.txt", new File("LICENSE.txt").toPath());
|
|||
|
|
|||
|
// Find attachments that will go into the binary distribution
|
|||
|
Path projectDir = Paths.get("${maven.multiModuleProjectDirectory}", new String[0]);
|
|||
|
String attachmentFilepathPattern = "${attachmentFilepathPattern}";
|
|||
|
System.out.format("Locating attachments matching the provided pattern: `%s`%n", new Object[] {attachmentFilepathPattern});
|
|||
|
SortedMap attachmentPathByFile = new TreeMap();
|
|||
|
Stream paths = Files.walk(new File(repoDirectoryParent).toPath(), 32, /* required for BSH method resolution: */ new FileVisitOption[0]);
|
|||
|
try {
|
|||
|
paths.forEach(new Consumer() {
|
|||
|
public void accept(Path path) {
|
|||
|
if (Files.isRegularFile(path, /* required for BSH method resolution: */ new LinkOption[0])) {
|
|||
|
String relativePath = projectDir.relativize(path).toString();
|
|||
|
if (relativePath.matches(attachmentFilepathPattern)) {
|
|||
|
attachmentPathByFile.put(path.getFileName().toString(), path);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
} catch (Exception error) {
|
|||
|
// Supplement diagnostics
|
|||
|
error.printStackTrace(System.err);
|
|||
|
throw error;
|
|||
|
} finally {
|
|||
|
paths.close();
|
|||
|
}
|
|||
|
|
|||
|
// Check if no attachments were found
|
|||
|
if (${attachmentCount} != attachmentPathByFile.size()) {
|
|||
|
System.err.println("Attachments:");
|
|||
|
int[] i = {0};
|
|||
|
attachmentPathByFile.values().forEach(new Consumer() {
|
|||
|
public void accept(Path path) {
|
|||
|
System.err.format(" [%2d] %s%n", new Object[]{++i[0], path});
|
|||
|
}
|
|||
|
});
|
|||
|
System.err.format(
|
|||
|
"Error: Was expecting %d attachments, found %d!%n",
|
|||
|
new Object[]{${attachmentCount}, attachmentPathByFile.size()});
|
|||
|
System.err.println("Tip: Have you already executed the Maven `package` goal?");
|
|||
|
System.exit(1);
|
|||
|
}
|
|||
|
|
|||
|
// Create the binary distribution
|
|||
|
pathByFile.putAll(attachmentPathByFile);
|
|||
|
zip("target/bin.zip", pathByFile);
|
|||
|
System.out.format("Generated the binary distribution (`bin.zip`) containing following %d files:%n", new Object[] {pathByFile.size()});
|
|||
|
for (String file : pathByFile.keySet()) {
|
|||
|
System.out.println("-> " + file);
|
|||
|
}</script>
|
|||
|
</configuration>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
<dependencies>
|
|||
|
<dependency>
|
|||
|
<groupId>org.eclipse.jgit</groupId>
|
|||
|
<artifactId>org.eclipse.jgit</artifactId>
|
|||
|
<version>${org.eclipse.jgit.version}</version>
|
|||
|
</dependency>
|
|||
|
</dependencies>
|
|||
|
</plugin>
|
|||
|
</plugins>
|
|||
|
</build>
|
|||
|
</profile>
|
|||
|
<profile>
|
|||
|
<id>deploy</id>
|
|||
|
<build>
|
|||
|
<defaultGoal>deploy</defaultGoal>
|
|||
|
<plugins>
|
|||
|
<plugin>
|
|||
|
<groupId>org.simplify4u.plugins</groupId>
|
|||
|
<artifactId>sign-maven-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<goals>
|
|||
|
<goal>sign</goal>
|
|||
|
</goals>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
</plugin>
|
|||
|
</plugins>
|
|||
|
</build>
|
|||
|
<properties>
|
|||
|
<spotbugs.skip>true</spotbugs.skip>
|
|||
|
<installAtEnd>true</installAtEnd>
|
|||
|
<deployAtEnd>true</deployAtEnd>
|
|||
|
<skipTests>true</skipTests>
|
|||
|
<spotless.check.skip>true</spotless.check.skip>
|
|||
|
</properties>
|
|||
|
</profile>
|
|||
|
<profile>
|
|||
|
<id>release</id>
|
|||
|
<build>
|
|||
|
<plugins>
|
|||
|
<plugin>
|
|||
|
<artifactId>maven-source-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<id>attach-sources</id>
|
|||
|
<goals>
|
|||
|
<goal>jar-no-fork</goal>
|
|||
|
</goals>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<artifactId>maven-enforcer-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<id>enforce-no-snapshots</id>
|
|||
|
<goals>
|
|||
|
<goal>enforce</goal>
|
|||
|
</goals>
|
|||
|
<configuration>
|
|||
|
<rules>
|
|||
|
<requireReleaseDeps>
|
|||
|
<message>SNAPSHOT dependencies are not allowed for releases</message>
|
|||
|
<onlyWhenRelease>true</onlyWhenRelease>
|
|||
|
</requireReleaseDeps>
|
|||
|
<requireReleaseVersion>
|
|||
|
<message>A release cannot be a SNAPSHOT version</message>
|
|||
|
</requireReleaseVersion>
|
|||
|
</rules>
|
|||
|
<fail>true</fail>
|
|||
|
</configuration>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
</plugin>
|
|||
|
</plugins>
|
|||
|
</build>
|
|||
|
</profile>
|
|||
|
<profile>
|
|||
|
<id>constants-tmpl-adoc</id>
|
|||
|
<activation>
|
|||
|
<file>
|
|||
|
<exists>src/site/_constants.tmpl.adoc</exists>
|
|||
|
</file>
|
|||
|
</activation>
|
|||
|
<build>
|
|||
|
<plugins>
|
|||
|
<plugin>
|
|||
|
<artifactId>maven-antrun-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<id>copy-constants-adoc</id>
|
|||
|
<phase>generate-sources</phase>
|
|||
|
<goals>
|
|||
|
<goal>run</goal>
|
|||
|
</goals>
|
|||
|
<configuration>
|
|||
|
<target>
|
|||
|
<copy tofile="${project.build.directory}/constants-adoc/_constants.adoc" overwrite="true" verbose="true">
|
|||
|
<fileset file="src/site/_constants.tmpl.adoc" />
|
|||
|
</copy>
|
|||
|
</target>
|
|||
|
</configuration>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
</plugin>
|
|||
|
<plugin>
|
|||
|
<artifactId>maven-resources-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<id>filter-constants-adoc</id>
|
|||
|
<phase>process-sources</phase>
|
|||
|
<goals>
|
|||
|
<goal>copy-resources</goal>
|
|||
|
</goals>
|
|||
|
<configuration>
|
|||
|
<outputDirectory>src/site</outputDirectory>
|
|||
|
<resources>
|
|||
|
<resource>
|
|||
|
<directory>${project.build.directory}/constants-adoc</directory>
|
|||
|
<filtering>true</filtering>
|
|||
|
</resource>
|
|||
|
</resources>
|
|||
|
</configuration>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
</plugin>
|
|||
|
</plugins>
|
|||
|
</build>
|
|||
|
</profile>
|
|||
|
<profile>
|
|||
|
<id>asciidoc</id>
|
|||
|
<activation>
|
|||
|
<file>
|
|||
|
<exists>src/site</exists>
|
|||
|
</file>
|
|||
|
</activation>
|
|||
|
<build>
|
|||
|
<plugins>
|
|||
|
<plugin>
|
|||
|
<groupId>org.asciidoctor</groupId>
|
|||
|
<artifactId>asciidoctor-maven-plugin</artifactId>
|
|||
|
<executions>
|
|||
|
<execution>
|
|||
|
<id>export-asciidoc-to-html</id>
|
|||
|
<phase>site</phase>
|
|||
|
<goals>
|
|||
|
<goal>process-asciidoc</goal>
|
|||
|
</goals>
|
|||
|
<configuration>
|
|||
|
<sourceDirectory>src/site</sourceDirectory>
|
|||
|
<outputDirectory>${project.build.directory}/site</outputDirectory>
|
|||
|
<preserveDirectories>true</preserveDirectories>
|
|||
|
<attributes>
|
|||
|
<source-highlighter>coderay</source-highlighter>
|
|||
|
<toc>left</toc>
|
|||
|
<icons>font</icons>
|
|||
|
</attributes>
|
|||
|
</configuration>
|
|||
|
</execution>
|
|||
|
</executions>
|
|||
|
</plugin>
|
|||
|
</plugins>
|
|||
|
</build>
|
|||
|
<properties>
|
|||
|
<maven.site.skip>true</maven.site.skip>
|
|||
|
<maven.site.deploy.skip>true</maven.site.deploy.skip>
|
|||
|
</properties>
|
|||
|
</profile>
|
|||
|
<profile>
|
|||
|
<id>spotbugs-exclude</id>
|
|||
|
<activation>
|
|||
|
<file>
|
|||
|
<exists>${maven.multiModuleProjectDirectory}/spotbugs-exclude.xml</exists>
|
|||
|
</file>
|
|||
|
</activation>
|
|||
|
<build>
|
|||
|
<plugins>
|
|||
|
<plugin>
|
|||
|
<groupId>com.github.spotbugs</groupId>
|
|||
|
<artifactId>spotbugs-maven-plugin</artifactId>
|
|||
|
<configuration>
|
|||
|
<excludeFilterFile>${maven.multiModuleProjectDirectory}/spotbugs-exclude.xml</excludeFilterFile>
|
|||
|
</configuration>
|
|||
|
</plugin>
|
|||
|
</plugins>
|
|||
|
</build>
|
|||
|
</profile>
|
|||
|
</profiles>
|
|||
|
</project>
|