maven/org/apache/logging/logging-parent/10.6.0/logging-parent-10.6.0.pom
2025-06-20 17:09:38 +08:00

1338 lines
53 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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>&lt;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">
&lt;xsl:param name="sbom.serialNumber"/>
&lt;xsl:param name="vdr.url"/>
&lt;xsl:output method="xml"
version="1.0"
encoding="UTF-8"
indent="yes"
xalan:indent-amount="2"
xalan:line-separator="&amp;#10;"/>
&lt;!-- Fixes the license formatting -->
&lt;xsl:template match="/">
&lt;xsl:text>&amp;#10;&lt;/xsl:text>
&lt;xsl:apply-templates />
&lt;/xsl:template>
&lt;!-- Standard copy template -->
&lt;xsl:template match="@*|node()">
&lt;xsl:copy>
&lt;xsl:apply-templates select="@*" />
&lt;xsl:apply-templates />
&lt;/xsl:copy>
&lt;/xsl:template>
&lt;!-- Bump the SBOM schema version from `1.4` to `1.5` -->
&lt;xsl:template match="cdx14:*">
&lt;xsl:element name="{local-name()}" namespace="http://cyclonedx.org/schema/bom/1.5">
&lt;xsl:apply-templates select="@*" />
&lt;xsl:apply-templates />
&lt;/xsl:element>
&lt;/xsl:template>
&lt;!-- Add the SBOM `serialNumber` -->
&lt;xsl:template match="cdx14:bom">
&lt;bom>
&lt;xsl:attribute name="version">
&lt;xsl:value-of select="1"/>
&lt;/xsl:attribute>
&lt;xsl:attribute name="serialNumber">
&lt;xsl:text>urn:uuid:&lt;/xsl:text>
&lt;xsl:value-of select="$sbom.serialNumber"/>
&lt;/xsl:attribute>
&lt;xsl:apply-templates />
&lt;/bom>
&lt;/xsl:template>
&lt;!-- Add the link to the VDR -->
&lt;xsl:template match="cdx14:externalReferences[starts-with(preceding-sibling::cdx14:group, 'org.apache.logging')]">
&lt;externalReferences>
&lt;xsl:apply-templates/>
&lt;reference>
&lt;xsl:attribute name="type">vulnerability-assertion&lt;/xsl:attribute>
&lt;url>
&lt;xsl:value-of select="$vdr.url"/>
&lt;/url>
&lt;/reference>
&lt;/externalReferences>
&lt;/xsl:template>
&lt;/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>&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;!--
~ 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>&lt;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>&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;!--
~ 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>&lt;(!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/&lt;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/&lt;groupId>/&lt;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 &lt; 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>