blob: 2f8a85a0a14b3246631d47e8c96ed13d043d1fe8 [file] [log] [blame] [edit]
<?xml version="1.0" encoding="UTF-8"?>
<!--
* © 2016 and later: Unicode, Inc. and others.
* License & terms of use: http://www.unicode.org/copyright.html
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ibm.icu</groupId>
<artifactId>icu-root</artifactId>
<version>79.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>${proj-title} (${project.artifactId})</name>
<description>International Components for Unicode for Java (ICU4J) is a mature, widely used Java library
providing Unicode and Globalization support.
This is the base artifact with common settings, not intended to use directly.</description>
<url>${proj.url}</url>
<inceptionYear>1995</inceptionYear>
<organization>
<name>Unicode, Inc.</name>
<url>https://icu.unicode.org/</url>
</organization>
<modules>
<module>icu4j</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.release>11</maven.compiler.release>
<maven-central-repo-url>https://central.sonatype.com</maven-central-repo-url>
<maven-central-releases-repo-url>${maven-central-repo-url}</maven-central-releases-repo-url>
<maven-central-snapshots-repo-url>${maven-central-repo-url}/repository/maven-snapshots/</maven-central-snapshots-repo-url>
<!-- This is the folder where we gather the files to be posted in the Github Release-->
<release.directory>${project.build.directory}/release_directory</release.directory>
<!--
Report dependencies and plugins that have updates:
mvn versions:display-property-updates -Dmaven.version.ignore=".*alpha.*,.*beta.*" | grep " -> " | sort -u
Please update the maven.version.ignore if some other non-release versions show up.
-->
<!-- Dependencies versions -->
<commons-cli.version>1.9.0</commons-cli.version>
<error_prone.version>2.25.0</error_prone.version>
<gson.version>2.11.0</gson.version>
<guava.version>32.1.1-jre</guava.version>
<jmh.version>1.37</jmh.version>
<junit.version>4.13.2</junit.version>
<junitparams.version>1.1.1</junitparams.version>
<truth.version>1.4.4</truth.version>
<xalan.version>2.7.2</xalan.version>
<xerces.version>2.12.2</xerces.version>
<xml-apis.version>1.4.01</xml-apis.version>
<!-- Dependencies versions - END -->
<!-- Plugin versions -->
<build-helper-maven-plugin.version>3.6.0</build-helper-maven-plugin.version>
<central-publishing-maven-plugin.version>0.8.0</central-publishing-maven-plugin.version>
<exec-maven-plugin.version>3.4.1</exec-maven-plugin.version>
<flatten-maven-plugin.version>1.6.0</flatten-maven-plugin.version>
<google-java-style.version>1.32.0</google-java-style.version>
<maven-assembly-plugin.version>3.7.1</maven-assembly-plugin.version>
<maven-clean-plugin.version>3.4.0</maven-clean-plugin.version>
<maven-compiler-plugin.version>3.14.0</maven-compiler-plugin.version>
<maven-dependency-plugin.version>3.8.0</maven-dependency-plugin.version>
<maven-deploy-plugin.version>3.1.3</maven-deploy-plugin.version>
<maven-enforcer-plugin.version>3.5.0</maven-enforcer-plugin.version>
<maven-failsafe-plugin.version>3.4.0</maven-failsafe-plugin.version>
<maven-gpg-plugin.version>3.2.5</maven-gpg-plugin.version>
<maven-install-plugin.version>3.1.3</maven-install-plugin.version>
<maven-jar-plugin.version>3.4.2</maven-jar-plugin.version>
<maven-javadoc-plugin.version>3.11.2</maven-javadoc-plugin.version>
<maven-pmd-plugin.version>3.27.0</maven-pmd-plugin.version>
<maven-project-info-reports-plugin.version>3.7.0</maven-project-info-reports-plugin.version>
<maven-release-plugin.version>3.1.1</maven-release-plugin.version>
<maven-resources-plugin.version>3.3.1</maven-resources-plugin.version>
<maven-shade-plugin.version>3.6.0</maven-shade-plugin.version>
<maven-site-plugin.version>4.0.0-M16</maven-site-plugin.version>
<maven-source-plugin.version>3.3.1</maven-source-plugin.version>
<maven-surefire-plugin.version>3.4.0</maven-surefire-plugin.version>
<!-- We need at least 3.5.1 to avoid https://github.com/codehaus-plexus/plexus-io/issues/109.
Once we upgrade maven-source-plugin and maven-jar-plugin to versions new enough to depend
on 3.5.1 or higher, we can remove this override.
-->
<plexus-io.version>3.5.1</plexus-io.version>
<spotless-maven-plugin.version>3.0.0</spotless-maven-plugin.version>
<!-- Plugin versions - END -->
<proj-title>International Components for Unicode for Java</proj-title>
<proj.displayname>${project.artifactId}</proj.displayname>
<proj.url>https://icu.unicode.org/</proj.url>
<proj.scm.connection>scm:git:git://github.com/unicode-org/icu.git</proj.scm.connection>
<proj.scm.developerConnection>scm:git:git@github.com:unicode-org/icu.git</proj.scm.developerConnection>
<proj.scm.url>https://github.com/unicode-org/icu</proj.scm.url>
<!-- Version update! -->
<icu.major.version>79</icu.major.version>
<!-- Variables used to generate the javadoc -->
<api.doc.version>${icu.major.version}</api.doc.version>
<icu4j.api.doc.window.title>ICU4J ${api.doc.version}</icu4j.api.doc.window.title>
<icu4j.api.doc.header>ICU4J ${api.doc.version}</icu4j.api.doc.header>
<icu4j.api.doc.copyright.footer>&lt;font size=-1&gt;Copyright © 2016 Unicode, Inc. and others.&lt;/font&gt;</icu4j.api.doc.copyright.footer>
<!-- Needs to be overriden in sub-modules -->
<icu4j.api.report.version>${icu.major.version}</icu4j.api.report.version>
<!-- Used for the .jar Manifest files -->
<mf.Specification-Version>${icu.major.version}</mf.Specification-Version>
<mf.Implementation-Version>${project.version}</mf.Implementation-Version>
<mf.Bundle-Version>${project.version}</mf.Bundle-Version>
<mf.Bundle-RequiredExecutionEnvironment>JavaSE-1.8</mf.Bundle-RequiredExecutionEnvironment>
<!-- For most modules artifactId does not have an "icu4j" prefix, so this is a good default -->
<module-name>${project.artifactId}</module-name>
<!-- Manifest fields that rarely change, if ever -->
<mf.Specification-Title>${proj-title} (${proj.displayname})</mf.Specification-Title>
<mf.Implementation-Title>${proj-title} (${proj.displayname})</mf.Implementation-Title>
<mf.Bundle-Description>${proj-title} (${proj.displayname})</mf.Bundle-Description>
<mf.Bundle-SymbolicName>com.ibm.icu.${module-name}</mf.Bundle-SymbolicName>
<mf.Automatic-Module-Name>com.ibm.icu.${module-name}</mf.Automatic-Module-Name>
<mf.Bundle-Name>ICU4J ${proj.displayname}</mf.Bundle-Name>
<mf.Specification-Vendor>Unicode, Inc.</mf.Specification-Vendor>
<mf.Implementation-Vendor>Unicode, Inc.</mf.Implementation-Vendor>
<mf.Bundle-Vendor>Unicode, Inc.</mf.Bundle-Vendor>
<mf.Implementation-Vendor-Id>org.unicode</mf.Implementation-Vendor-Id>
<mf.Manifest-Version>1.0</mf.Manifest-Version>
<mf.Bundle-ManifestVersion>2</mf.Bundle-ManifestVersion>
<mf.Bundle-Copyright>© 2016 and later: Unicode, Inc. and others. License &amp; terms of use: http://www.unicode.org/copyright.html</mf.Bundle-Copyright>
</properties>
<licenses>
<license>
<name>Unicode-3.0</name>
<url>https://raw.githubusercontent.com/unicode-org/icu/maint/maint-${icu.major.version}/LICENSE</url>
<distribution>repo</distribution>
</license>
</licenses>
<developers>
<developer>
<id>markusicu</id> <!-- GitHub ID -->
<name>Markus Scherer</name>
<organization>Google</organization>
<roles>
<role>Chair</role>
</roles>
</developer>
<developer>
<id>richgillam</id> <!-- GitHub ID -->
<name>Richard Gillam</name>
<roles>
<role>Vice chair</role>
</roles>
</developer>
</developers>
<mailingLists>
<mailingList>
<name>icu-support</name>
<subscribe>https://groups.google.com/a/unicode.org/g/icu-support</subscribe>
<unsubscribe>https://groups.google.com/a/unicode.org/g/icu-support</unsubscribe>
<post>icu-support@unicode.org</post>
<archive>https://groups.google.com/a/unicode.org/g/icu-support</archive>
</mailingList>
<mailingList>
<name>icu-announce</name>
<subscribe>https://groups.google.com/a/unicode.org/g/icu-announce</subscribe>
<unsubscribe>https://groups.google.com/a/unicode.org/g/icu-announce</unsubscribe>
<post>icu-announce@unicode.org</post>
<archive>https://groups.google.com/a/unicode.org/g/icu-announce</archive>
</mailingList>
<mailingList>
<name>icu-design</name>
<subscribe>https://groups.google.com/a/unicode.org/g/icu-design</subscribe>
<unsubscribe>https://groups.google.com/a/unicode.org/g/icu-design</unsubscribe>
<post>icu-design@unicode.org</post>
<archive>https://groups.google.com/a/unicode.org/g/icu-design</archive>
</mailingList>
</mailingLists>
<scm>
<connection>${proj.scm.connection}</connection>
<developerConnection>${proj.scm.developerConnection}</developerConnection>
<url>${proj.scm.url}</url>
</scm>
<issueManagement>
<system>JIRA</system>
<url>https://unicode-org.atlassian.net/projects/ICU</url>
</issueManagement>
<distributionManagement>
<site>
<!-- We don't deploy here, but without it generating reports fails.
If we really try to deploy here (`site:deploy`) it will fail,
but `site:stage` works.
-->
<id>unicode-org.github.io</id>
<url>scp://https://unicode-org.github.io/</url>
</site>
<repository>
<id>central</id>
<name>ICU4J Central Repository</name>
<url>${maven-central-releases-repo-url}</url>
</repository>
<snapshotRepository>
<id>central</id>
<name>ICU4J Central Development Repository</name>
<url>${maven-central-snapshots-repo-url}</url>
</snapshotRepository>
</distributionManagement>
<dependencyManagement>
<dependencies>
<!-- Non-test, bot only for tools, should not be used in ICU proper. -->
<dependency>
<groupId>com.google.errorprone</groupId>
<artifactId>error_prone_core</artifactId>
<version>${error_prone.version}</version>
</dependency>
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>${commons-cli.version}</version>
</dependency>
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-core</artifactId>
<version>${jmh.version}</version>
</dependency>
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-generator-annprocess</artifactId>
<version>${jmh.version}</version>
</dependency>
<!-- Test only -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>${gson.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
<dependency>
<groupId>com.google.truth</groupId>
<artifactId>truth</artifactId>
<version>${truth.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>pl.pragmatists</groupId>
<artifactId>JUnitParams</artifactId>
<version>${junitparams.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>${maven-clean-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>${maven-resources-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<includes>
<!-- Some test files start with "IntlTest...". Many don't fit
the Surefire test file name default patterns. To be safe, use
a catchall pattern instead of the default patterns.
FYI, the default patterns are documented on the website of the
testing plugin:
https://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html
-->
<include>**/*.java</include>
</includes>
</configuration>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>${maven-install-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>${maven-deploy-plugin.version}</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<!-- https://central.sonatype.org/publish/publish-portal-maven/ -->
<groupId>org.sonatype.central</groupId>
<artifactId>central-publishing-maven-plugin</artifactId>
<version>${central-publishing-maven-plugin.version}</version>
<extensions>true</extensions>
<configuration>
<checksums>required</checksums>
</configuration>
</plugin>
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>${maven-site-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>${maven-source-plugin.version}</version>
<dependencies>
<!-- Do not remove, see the plexus-io.version comment in the properties section -->
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-io</artifactId>
<version>${plexus-io.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<artifactId>maven-gpg-plugin</artifactId>
<version>${maven-gpg-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>${maven-project-info-reports-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<version>${maven-shade-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>${maven-assembly-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>${maven-dependency-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>${build-helper-maven-plugin.version}</version>
<executions>
<execution>
<id>root-location</id>
<phase>initialize</phase>
<goals>
<goal>rootlocation</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>${maven-release-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>${flatten-maven-plugin.version}</version>
<configuration>
<flattenMode>ossrh</flattenMode>
</configuration>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
</execution>
<execution>
<id>flatten.clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-enforcer-plugin</artifactId>
<version>${maven-enforcer-plugin.version}</version>
<executions>
<execution>
<id>enforce-maven</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireMavenVersion>
<!-- From the Maven web site, Dec. 2025 (https://maven.apache.org/docs/history.html)
"Maven 3.8.9 and before has now reached its end of life and is no longer supported in any way.
New plugin releases will require Maven 3.9.0 or later."
-->
<version>3.9.0</version>
</requireMavenVersion>
<requireJavaVersion>
<version>[11,)</version>
</requireJavaVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<version>${maven-javadoc-plugin.version}</version>
<configuration>
<excludePackageNames>com.ibm.icu.impl,com.ibm.icu.impl.*,com.ibm.icu.dev.*,com.ibm.icu.samples,com.ibm.icu.samples.*</excludePackageNames>
<!--
The ant project specified <doclint>reference,html</doclint>.
But that fails in main\core\src\main\java because maven enforces dependencies more strictly:
[ERROR] com\ibm\icu\text\UnicodeFilter.java:15: error: reference not found
[ERROR] * {@link com.ibm.icu.text.Transliterator}
[ERROR] com\ibm\icu\util\ULocale.java:100: error: reference not found
[ERROR] * {@link com.ibm.icu.text.Collator}
-->
<doclint>html</doclint>
<notimestamp>true</notimestamp>
<nodeprecatedlist>true</nodeprecatedlist>
<quiet>true</quiet>
<windowtitle>${icu4j.api.doc.window.title}</windowtitle>
<doctitle>${icu4j.api.doc.window.title}</doctitle>
<header>${icu4j.api.doc.header}</header>
<bottom>${icu4j.api.doc.copyright.footer}</bottom>
<encoding>UTF-8</encoding>
<docencoding>UTF-8</docencoding>
<charset>UTF-8</charset>
<breakiterator>true</breakiterator>
<use>true</use>
<!-- <verbose>true</verbose> -->
<additionalJOptions>
<additionalJOption>-J-Dfile.encoding=UTF-8</additionalJOption>
</additionalJOptions>
<!--
Although the Maven Javadoc plugin claims that taglets are auto-detected,
it does not seem to work. But listing them explicitly does.
-->
<taglets>
<taglet>
<tagletClass>com.ibm.icu.dev.tool.docs.ICUBugTaglet</tagletClass>
</taglet>
<taglet>
<tagletClass>com.ibm.icu.dev.tool.docs.ICUCategoryTaglet</tagletClass>
</taglet>
<taglet>
<tagletClass>com.ibm.icu.dev.tool.docs.ICUDiscouragedTaglet</tagletClass>
</taglet>
<taglet>
<tagletClass>com.ibm.icu.dev.tool.docs.ICUDraftTaglet</tagletClass>
</taglet>
<taglet>
<tagletClass>com.ibm.icu.dev.tool.docs.ICUEnhancedTaglet</tagletClass>
</taglet>
<taglet>
<tagletClass>com.ibm.icu.dev.tool.docs.ICUInternalTaglet</tagletClass>
</taglet>
<taglet>
<tagletClass>com.ibm.icu.dev.tool.docs.ICUNewTaglet</tagletClass>
</taglet>
<taglet>
<tagletClass>com.ibm.icu.dev.tool.docs.ICUNoteTaglet</tagletClass>
</taglet>
<taglet>
<tagletClass>com.ibm.icu.dev.tool.docs.ICUObsoleteTaglet</tagletClass>
</taglet>
<taglet>
<tagletClass>com.ibm.icu.dev.tool.docs.ICUProvisionalTaglet</tagletClass>
</taglet>
<taglet>
<tagletClass>com.ibm.icu.dev.tool.docs.ICUStableTaglet</tagletClass>
</taglet>
<taglet>
<tagletClass>com.ibm.icu.dev.tool.docs.ICUSummaryTaglet</tagletClass>
</taglet>
<taglet>
<tagletClass>com.ibm.icu.dev.tool.docs.ICUTestTaglet</tagletClass>
</taglet>
</taglets>
<!-- To handle the ICU custom taglets (@icu, @draft, @stable, etc -->
<tagletArtifact>
<groupId>com.ibm.icu</groupId>
<artifactId>tools_taglets</artifactId>
<version>${project.version}</version>
</tagletArtifact>
</configuration>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>${maven-jar-plugin.version}</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
<manifestEntries>
<Automatic-Module-Name>${mf.Automatic-Module-Name}</Automatic-Module-Name>
<Bundle-Copyright>${mf.Bundle-Copyright}</Bundle-Copyright>
<Specification-Title>${mf.Specification-Title}</Specification-Title>
<Specification-Version>${mf.Specification-Version}</Specification-Version>
<Specification-Vendor>${mf.Specification-Vendor}</Specification-Vendor>
<Implementation-Title>${mf.Implementation-Title}</Implementation-Title>
<Implementation-Version>${mf.Implementation-Version}</Implementation-Version>
<Implementation-Vendor>${mf.Implementation-Vendor}</Implementation-Vendor>
<Implementation-Vendor-Id>${mf.Implementation-Vendor-Id}</Implementation-Vendor-Id>
<Bundle-ManifestVersion>${mf.Bundle-ManifestVersion}</Bundle-ManifestVersion>
<Bundle-Name>${mf.Bundle-Name}</Bundle-Name>
<Bundle-Description>${mf.Bundle-Description}</Bundle-Description>
<Bundle-SymbolicName>${mf.Bundle-SymbolicName}</Bundle-SymbolicName>
<Bundle-Version>${mf.Bundle-Version}</Bundle-Version>
<Bundle-Vendor>${mf.Bundle-Vendor}</Bundle-Vendor>
<Bundle-Copyright>${mf.Bundle-Copyright}</Bundle-Copyright>
<Bundle-RequiredExecutionEnvironment>${mf.Bundle-RequiredExecutionEnvironment}</Bundle-RequiredExecutionEnvironment>
</manifestEntries>
</archive>
</configuration>
<dependencies>
<!-- Do not remove, see the plexus-io.version comment in the properties section -->
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-io</artifactId>
<version>${plexus-io.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>${exec-maven-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>${maven-pmd-plugin.version}</version>
<configuration>
<rulesets>
<!-- Hand-picked rules -->
<ruleset>tools/pmd/src/main/resources/icu4j/pmd-ruleset.xml</ruleset>
<!-- Uncomment the block below to enable all known checks.
All of these rulesets can be specified in pmd-ruleset.xml instead.
-->
<!--
<ruleset>/category/java/bestpractices.xml</ruleset>
<ruleset>/category/java/codestyle.xml</ruleset>
<ruleset>/category/java/design.xml</ruleset>
<ruleset>/category/java/errorprone.xml</ruleset>
<ruleset>/category/java/multithreading.xml</ruleset>
<ruleset>/category/java/performance.xml</ruleset>
-->
</rulesets>
</configuration>
</plugin>
<!--
Spotless info:
- How to preview what `mvn spotless:apply` will do: https://github.com/diffplug/spotless/tree/main/plugin-maven#how-do-i-preview-what-mvn-spotlessapply-will-do
- Apply Spotless to specific files: https://github.com/diffplug/spotless/tree/main/plugin-maven#can-i-apply-spotless-to-specific-files
-->
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>${spotless-maven-plugin.version}</version>
<configuration>
<!-- optional: limit format enforcement to just the files changed by this feature branch -->
<!-- You can explicitly disable ratchet functionality by providing the value 'NONE': -->
<ratchetFrom>NONE</ratchetFrom>
<!-- define a language-specific format -->
<java>
<toggleOffOn />
<!-- no need to specify files, inferred automatically, but you can if you want -->
<!-- apply a specific flavor of google-java-format and reflow long strings -->
<googleJavaFormat>
<!-- version of google-java-style -->
<version>${google-java-style.version}</version>
<style>AOSP</style>
<reflowLongStrings>false</reflowLongStrings>
</googleJavaFormat>
</java>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<!-- Run this in the root of the ICU project:
mvn clean test -DskipTests -DskipITs -P errorprone
-->
<id>errorprone</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<showWarnings>true</showWarnings>
<fork>true</fork>
<encoding>UTF-8</encoding>
<!-- Use <compilerArg> to pass flags to errorprone. See https://errorprone.info/docs/flags -->
<compilerArgs>
<arg>-XDcompilePolicy=simple</arg>
<!--
WARNING: Do not wrap the line below, it will fail on Windows.
See https://github.com/google/error-prone/issues/4256
-->
<arg>-Xplugin:ErrorProne -Xep:UnicodeEscape:OFF -Xep:InvalidBlockTag:OFF -Xep:ComparableType:WARN -Xep:EqualsHashCode:WARN -Xep:SelfEquals:WARN -Xep:ReturnValueIgnored:WARN -Xep:ArrayToString:WARN -Xep:MisusedDayOfYear:WARN -Xep:SelfComparison:WARN -Xep:MisusedWeekYear:WARN -Xep:IdentityBinaryExpression:WARN</arg>
<arg>-Xmaxerrs</arg>
<arg>10000</arg>
<arg>-Xmaxwarns</arg>
<arg>10000</arg>
<arg>-J-Dfile.encoding=UTF-8</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
</compilerArgs>
<annotationProcessorPaths>
<path>
<groupId>com.google.errorprone</groupId>
<artifactId>error_prone_core</artifactId>
<version>${error_prone.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<!-- Run this in the root of the ICU project:
mvn clean test -DskipTests -DskipITs -l /tmp/errorprone_all.log -P errorprone-all
mvn exec:java -f icu4j/tools/build/ -P errorprone_report -DlogFile=/tmp/errorprone_all.log
On Windows you can use %TEMP%\errorprone_all.log for the temporary folder.
You can then inspect the content of the errorprone.log file, or the reports in
the target folder (errorprone*.html, errorprone.md, errorprone.tsv) -->
<id>errorprone-all</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<showWarnings>true</showWarnings>
<failOnError>false</failOnError>
<fork>true</fork>
<encoding>UTF-8</encoding>
<!-- Use <compilerArg> to pass flags to errorprone. See https://errorprone.info/docs/flags -->
<compilerArgs>
<arg>-XDcompilePolicy=simple</arg>
<!--
-XepAllErrorsAsWarnings:
If we let errors be errors they fail and stop the build, so we don't get a full report.
So we force them all to be reported as warning.
The drawback is that there are not errors now, they get mixed with the real warnings.
The proper severity level is then restored by the tool generating the reports.
-->
<arg>-Xplugin:ErrorProne -XepAllErrorsAsWarnings -Xep:UnicodeEscape:OFF</arg>
<arg>-Xmaxerrs</arg>
<arg>10000</arg>
<arg>-Xmaxwarns</arg>
<arg>10000</arg>
<arg>-J-Dfile.encoding=UTF-8</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
</compilerArgs>
<annotationProcessorPaths>
<path>
<groupId>com.google.errorprone</groupId>
<artifactId>error_prone_core</artifactId>
<version>${error_prone.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<!-- This is used to generate a PMD report.
PMD is a code checker, similar to errorprone,
but there are non-overlapping checks between the two.
To generate a report run this in the icu4j folder:
mvn clean site site:stage -DskipTests -DskipITs -P pmd
The report can be seen at {icu_root}/icu4j/target/staging/index.html
Then Bottom-left => Project Reports => PMD.
Or access directly at {icu_root}/icu4j/target/staging/pmd.html
Generating the report (above) does not result in a build failure.
To cause a build failure when issues are found (in CI) run this `verify`
command after the report was generated (the previous step):
mvn verify -DskipTests -DskipITs -P pmd
-->
<id>pmd</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>aggregate-pmd-check</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>tools_pmd</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<reportSets>
<reportSet>
<reports>
<report>aggregate-pmd</report>
</reports>
</reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>
</profile>
</profiles>
</project>