В настоящее время я портирую библиотеку с открытым исходным кодом для совместимости с JDK9 +, и это зависит от некоторых модулей Java EE, которые устарели в Java 9 и удалены в Java 11: в частности, JAXB, JAX-WS и javax.annotation .
Я добавил явные зависимости к сторонним реализациям, как предлагалось здесь :
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-ri</artifactId>
<version>2.3.0.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-ri</artifactId>
<version>2.3.0.1</version>
</dependency>
<dependency>
<groupId>com.sun.activation</groupId>
<artifactId>javax.activation</artifactId>
<version>1.2.0</version>
</dependency>
Однако я бы хотел, чтобы моя библиотека использовала их только в случае необходимости (т.е. в JDK9 +) и продолжала использовать одобренные реализации в JDK8.
Я могу сделать это, добавив зависимости в профиле Maven, которые будут активированы только в JDK 9 и выше, но что если я захочу опубликовать файл jar для своей библиотеки в Maven Central? Должен ли я публиковать два разных jar-файла, один с включенными сторонними реализациями Java EE, для JDK9 + и один без для JDK8?
Есть ли способ создать файл JAR, который будет использовать сторонние реализации на JDK9 + и одобренные на JDK8?
Я рассмотрел мульти-релиз jar , но похоже, что они предназначены для реализаций, зависящих от версии jdk, между классами проекта, а не между зависимостями.
Кроме того, если невозможно использовать одобренные реализации в JDK 8, есть ли способ надежно проверить, что использование сторонних реализаций не приводит к регрессиям?