blob: 70b62fdd4946af1ed7659e5aab4f19ea20c92451 [file] [log] [blame]
<?xml version="1.0"?>
<!--
* © 2016 and later: Unicode, Inc. and others.
* License & terms of use: http://www.unicode.org/copyright.html
*******************************************************************************
* Copyright (C) 2010-2016, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
-->
<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">
<parent>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j-root</artifactId>
<version>73.1-SNAPSHOT</version>
<!-- default relativePath for parent -->
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j-localespi</artifactId>
<version>73.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>ICU4J Locale Service Provider</name>
<description>icu4j-localespi is a supplemental library for icu4j, implementing Java Locale SPI.</description>
<properties>
<!-- Bundle-SymbolicName -->
<jar.symbolic.name>org.ibm.icu.localespi</jar.symbolic.name>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<!-- add directories with main executable code -->
<execution>
<id>add-source</id>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>../../main/classes/localespi/src</source>
</sources>
</configuration>
</execution>
<!-- add directories with test code -->
<execution>
<id>add-test-source</id>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>../../main/tests/localespi/src</source>
<source>../../main/tests/framework/src</source>
</sources>
</configuration>
</execution>
<!-- add directories with main executable resources -->
<execution>
<id>add-resource</id>
<goals>
<goal>add-resource</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>../../main/classes/localespi/src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
</configuration>
</execution>
<!-- add directories with test resources -->
<execution>
<id>add-test-resource</id>
<goals>
<goal>add-test-resource</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>../../main/tests/localespi/src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<resource>
<directory>../../main/tests/framework/src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<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>
<groupId>org.apache.maven.plugins</groupId>
<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>
<groupId>org.apache.maven.plugins</groupId>
<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>
<!--
Enable configuration of the Manifest file, etc. during the process of packaging the .jar file.
For future reference: https://stackoverflow.com/questions/38548271/difference-between-maven-plugins-assembly-plugins-jar-plugins-shaded-plugi
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<X-Compile-Source-JDK>${maven.compiler.source}</X-Compile-Source-JDK>
<X-Compile-Target-JDK>${maven.compiler.target}</X-Compile-Target-JDK>
<Specification-Title>${jar.spec.title}</Specification-Title>
<Specification-Version>${jar.spec.version}</Specification-Version>
<Specification-Vendor>${jar.spec.vendor}</Specification-Vendor>
<Implementation-Title>${jar.impl.title}</Implementation-Title>
<Implementation-Version>${jar.impl.version}</Implementation-Version>
<Implementation-Vendor>${jar.impl.vendor}</Implementation-Vendor>
<Implementation-Vendor-Id>${jar.impl.vendor.id}</Implementation-Vendor-Id>
<Bundle-ManifestVersion>${jar.manifest.version}</Bundle-ManifestVersion>
<Bundle-Name>${jar.name}</Bundle-Name>
<Bundle-Description>${jar.description}</Bundle-Description>
<Bundle-SymbolicName>${jar.symbolic.name}</Bundle-SymbolicName>
<Bundle-Version>${jar.version}</Bundle-Version>
<Bundle-Vendor>${jar.vendor}</Bundle-Vendor>
<Bundle-Copyright>${jar.copyright.info}</Bundle-Copyright>
<!-- TODO: We should remove this, right??? -->
<Main-Class>${jar.main.class}</Main-Class>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
</dependency>
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j-test-datafiles</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<!-- this is for parameterized JUnit tests -->
<dependency>
<groupId>pl.pragmatists</groupId>
<artifactId>JUnitParams</artifactId>
</dependency>
</dependencies>
</project>