blob: 93356c53d61706aa063ad95f2f71a3945a3b6d27 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
* © 2023 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>
<parent>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j-root</artifactId>
<version>74.2</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>icu4j-localespi</artifactId>
<description>icu4j-localespi is a supplemental library for icu4j, implementing Java Locale SPI.</description>
<properties>
<proj.displayname>JDK locale service provider</proj.displayname>
<icu4j.api.doc.root.dir>${project.basedir}/../..</icu4j.api.doc.root.dir>
<mf.Automatic-Module-Name>com.ibm.icu.localespi</mf.Automatic-Module-Name>
</properties>
<dependencies>
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>${project.version}</version>
</dependency>
<!-- Test -->
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>core</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>framework</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>currdata</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>langdata</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>regiondata</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<!--
Do not run localespi tests as unit tests because they depend on loading the main code via a .jar file
via the Java extensions mechanism.
-->
<skipTests>true</skipTests>
</configuration>
</plugin>
<!--
Mainly for running localespi tests in Java 8:
The easiest way to get the integration tests to pass (in particular, to get the JVM that is
spawned with the `-Djava.ext.dirs` system property value to be interpreted properly in order
for the extensions jars therein to be loaded correctly) was to copy the jars needed to a
separate directory. (The alternative of pointing to the build directories of the respective
submodules didn't seem to work.)
This isn't of much use for Java 9+, in which extensions are deprecated and the regular
classpath is to be used instead.
-->
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>it-test-copy-localespi-extension-jars</id>
<phase>integration-test</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>${project.groupId}</groupId>
<artifactId>icu4j</artifactId>
<version>${project.version}</version>
<type>${project.packaging}</type>
</artifactItem>
<artifactItem>
<groupId>${project.groupId}</groupId>
<artifactId>icu4j-localespi</artifactId>
<version>${project.version}</version>
<type>${project.packaging}</type>
</artifactItem>
</artifactItems>
<!-- https://stackoverflow.com/questions/36181371/how-can-i-get-the-temp-folder-of-a-machine-running-maven -->
<outputDirectory>${java.io.tmpdir}/ext-test-jars</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
</executions>
<configuration>
<includes>
<!-- treat localespi tests as integration tests because they depend on .jar files from package phase -->
<include>**/*.java</include>
<!-- default integration test wildcard patterns -->
<include>**/IT*.java</include>
<include>**/*IT.java</include>
<include>**/*ITCase.java</include>
</includes>
<!--
For Java 8:
Set up the locale service provider using the .jar file of `icu4j-localespi` main code from the `package` phase
Leave empty for Java 9+.
Using the `java.ext.dirs` special Java system property on Java 9+ runtimes triggers an
error that tells the user to place those jars on the classpath instead.
-->
<!--
Notes:
https://stackoverflow.com/a/5039973/2077918
The `java.ext.dirs` is a special Java system property that activates the Java extension mechanism.
The Java extension mechanism was deprecated in Java 8 (users are recommended to use `-classpath` instead),
and the extension mechanism was removed in Java 9 altogether.
For backwards compatibility testing for users of the Java extension mechansim,
this configuration achieves the effect of having the localespi code in a .jar file that gets loaded
by running this test in a phase following the `package` phase in which the .jar file is created.
https://stackoverflow.com/questions/45223908/why-does-the-java-extension-mechanism-not-check-the-classpath-for-an-optional-pa
For some reason, the plugin was effectively not honoring the values as expected that were set in
<systemPropertyVariables>, so instead, the <argLine> value was used to set the JVM options. This
approach was inspired by: https://stackoverflow.com/a/48213614/2077918
-->
<argLine>${localespi-tests.jvm.args}</argLine>
<!--
For Java 9+:
Configure to use the locale service provider using the .jar file of `icu4j-localespi` main code from the `package` phase
Leave empty for Java 8 to take defaults ("SPI,JRE").
See: https://stackoverflow.com/questions/45223908/why-does-the-java-extension-mechanism-not-check-the-classpath-for-an-optional-pa
-->
<systemPropertyVariables>
<java.locale.providers>${localespi-tests.locale-providers}</java.locale.providers>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<!--
For testing localespi using the Java extensions feature, which last existed in Java 8.
ICU4J currently has a minimum supported version of 8.
-->
<profile>
<id>localespi-tests-java8</id>
<activation>
<jdk>(,8]</jdk>
</activation>
<properties>
<localespi-tests.jvm.args>-Djava.ext.dirs="${java.io.tmpdir}/ext-test-jars"</localespi-tests.jvm.args>
<localespi-tests.locale-providers></localespi-tests.locale-providers>
</properties>
</profile>
<!--
For testing localespi using the classpath for Java 9+, since Java extensions were
deprecated after Java 8.
-->
<profile>
<id>localespi-tests-java9</id>
<activation>
<jdk>[9,)</jdk>
</activation>
<properties>
<localespi-tests.jvm.args></localespi-tests.jvm.args>
<localespi-tests.locale-providers>CLDR,COMPAT,SPI</localespi-tests.locale-providers>
</properties>
</profile>
<profile>
<id>with_javadoc</id>
<build>
<plugins>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<!-- All files in com/ibm/icu/impl folders are exluded from javadoc.
So we need to bring back this one file, to match the previously published artifacts.
Without this all java files are excluded and no javadoc is generated.
-->
<sourceFileIncludes>
<include>ICULocaleServiceProvider.java</include>
</sourceFileIncludes>
<sourcepath>${basedir}/src/main/java/com/ibm/icu/impl/javaspi</sourcepath>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>