Files
wenzi/.m2/org/apache/logging/logging-parent/10.1.1/logging-parent-10.1.1.pom
Your Name 91a0b77f7a test(cache): 修复CacheConfigTest边界值测试
- 修改 shouldVerifyCacheManager_withMaximumIntegerTtl 为 shouldVerifyCacheManager_withMaximumAllowedTtl
- 使用正确的最大TTL值(10080分钟,7天)而不是 Integer.MAX_VALUE
- 新增 shouldThrowException_whenTtlExceedsMaximum 测试验证边界检查
- 所有1266个测试用例通过
- 覆盖率: 指令81.89%, 行88.48%, 分支51.55%

docs: 添加项目状态报告
- 生成 PROJECT_STATUS_REPORT.md 详细记录项目当前状态
- 包含质量指标、已完成功能、待办事项和技术债务
2026-03-02 13:31:54 +08:00

974 lines
38 KiB
XML
Raw 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>30</version>
</parent>
<groupId>org.apache.logging</groupId>
<artifactId>logging-parent</artifactId>
<version>10.1.1</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>
<properties>
<maven.compiler.release>8</maven.compiler.release>
<xml-maven-plugin.version>1.1.0</xml-maven-plugin.version>
<spotbugs-annotations.version>4.7.3</spotbugs-annotations.version>
<bnd-maven-plugin.version>6.4.0</bnd-maven-plugin.version>
<bnd-extra-package-options></bnd-extra-package-options>
<findsecbugs-plugin.version>1.12.0</findsecbugs-plugin.version>
<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>
<osgi.annotation.bundle.version>2.0.0</osgi.annotation.bundle.version>
<log4j-changelog-maven-plugin.version>0.4.0</log4j-changelog-maven-plugin.version>
<bnd.annotation.version>6.4.1</bnd.annotation.version>
<error-prone.version>2.22.0</error-prone.version>
<minimalJavaBuildVersion>[17,18)</minimalJavaBuildVersion>
<beanshell-maven-plugin.version>1.4</beanshell-maven-plugin.version>
<maven.compiler.source>8</maven.compiler.source>
<build-helper-maven-plugin.version>3.4.0</build-helper-maven-plugin.version>
<maven-artifact-plugin.version>3.4.1</maven-artifact-plugin.version>
<org.eclipse.jgit.version>6.7.0.202309050840-r</org.eclipse.jgit.version>
<bnd-module-name>$[Bundle-SymbolicName]</bnd-module-name>
<revision>10.1.1</revision>
<spotbugs-maven-plugin.version>4.7.3.6</spotbugs-maven-plugin.version>
<spotless-maven-plugin.version>2.40.0</spotless-maven-plugin.version>
<maven.compiler.target>8</maven.compiler.target>
<bnd-multi-release>false</bnd-multi-release>
<bnd-extra-module-options></bnd-extra-module-options>
<sign-maven-plugin.version>1.0.1</sign-maven-plugin.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.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>
</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>
<configuration>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
</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-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>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>${flatten-maven-plugin.version}</version>
<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>flatten-bom</id>
<phase>none</phase>
<goals>
<goal>flatten</goal>
</goals>
<configuration>
<flattenMode>bom</flattenMode>
<pomElements>
<properties>remove</properties>
<repositories>remove</repositories>
<distributionManagement>remove</distributionManagement>
<dependencyManagement>interpolate</dependencyManagement>
</pomElements>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<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-enforcer-plugin</artifactId>
<executions>
<execution>
<id>enforce-upper-bound-deps</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireUpperBoundDeps />
</rules>
</configuration>
</execution>
</executions>
</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>
<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>
<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>
<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>
<trimTrailingWhitespace />
<endWithNewline />
<removeUnusedImports />
<indent>
<spaces>true</spaces>
<spacesPerTab>4</spacesPerTab>
</indent>
<importOrder>
<order>java,javax,jakarta,,\#java,\#javax,\#jakarta,\#</order>
</importOrder>
</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>biz.aQute.bnd</groupId>
<artifactId>bnd-maven-plugin</artifactId>
<extensions>true</extensions>
<executions>
<execution>
<id>default-jar</id>
<goals>
<goal>jar</goal>
</goals>
<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: $[project.groupId].$[subst;$[subst;$[project.artifactId];log4j-];[^A-Za-z0-9];.]
-jpms-module-info: $[bnd-module-name];access=0
# Prevents an execution error in multi-release jars:
-fixupmessages: "Classes found in the wrong directory";restrict:=error;is:=warning
# 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: 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",\
$[bnd-extra-module-options]
# 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]
# Add manifests and modules for each multi-release version:
-jpms-multi-release: $[bnd-multi-release]</bnd>
</configuration>
</execution>
</executions>
</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>
<goals>
<goal>validate</goal>
</goals>
<configuration>
<skip>true</skip>
<validationSets>
<validationSet>
<dir>src/changelog</dir>
<includes>**/*.xml</includes>
<publicId>http://logging.apache.org/log4j/changelog</publicId>
<systemId>https://logging.apache.org/log4j/changelog-0.1.1.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 generate-sources</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-changelog-maven-plugin</artifactId>
<version>${log4j-changelog-maven-plugin.version}</version>
<configuration>
<releaseVersion>${project.version}</releaseVersion>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>distribution</id>
<build>
<defaultGoal>enforcer:enforce bsh:run</defaultGoal>
<plugins>
<plugin>
<artifactId>maven-enforcer-plugin</artifactId>
<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>
</plugin>
<plugin>
<groupId>com.github.genthaler</groupId>
<artifactId>beanshell-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit</artifactId>
<version>${org.eclipse.jgit.version}</version>
</dependency>
</dependencies>
<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;
long timestampMillis = java.time.Instant.parse("${project.build.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);
ZipEntry zipEntry = new ZipEntry(file);
zipEntry.setTime(timestampMillis);
zipOutputStream.putNextEntry(zipEntry);
zipOutputStream.write(Files.readAllBytes(path));
zipOutputStream.closeEntry();
}
} catch (Exception error) {
// Supplement diagnostics
error.printStackTrace(System.err);
throw error;
} 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
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(), 8, /* 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]) &amp;&amp;
path.toAbsolutePath().toString().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>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>deploy</id>
<build>
<defaultGoal>deploy</defaultGoal>
<plugins>
<plugin>
<groupId>org.simplify4u.plugins</groupId>
<artifactId>sign-maven-plugin</artifactId>
<version>${sign-maven-plugin.version}</version>
<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>
<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>
<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>
<asciidoctor-maven-plugin.version>2.2.4</asciidoctor-maven-plugin.version>
<maven.site.skip>true</maven.site.skip>
<maven.site.deploy.skip>true</maven.site.deploy.skip>
</properties>
</profile>
</profiles>
</project>