Что является заменой пакета javax.activation в java 9?
Похоже на javax.activation
Пакет устарел в Java 9. Руководство по миграции Oracle предлагает использовать --add-modules java.activation
опция во время запуска JVM.
Тем не менее, я хотел бы избежать этого и заменить javax.activation
классы пакета, поскольку он устарел и будет удален в будущих версиях Java. Я полагаю, должна быть какая-то альтернатива javax.activation
, Если есть в наличии, что это?
7 ответов
JavaBeans Activation Framework (JAF), возможно, является альтернативой, которую вы ищете существующему пакету.
Этот автономный выпуск JAF использует автоматическое имя модуля Java Platform Module System
java.activation
, для соответствия имени модуля, используемого в JDK 9. В будущей версии будут содержаться полные метаданные модуля.
Автономные API поддерживаются только в модульной форме благодаря концепции обновляемых модулей. Используя их, можно использовать версию этого модуля из более поздней версии на любом этапе, т. Е. Во время компиляции, во время сборки или во время выполнения.
В настоящее время доступна версия для этого 1.2.0
который можно использовать так:
специалист
<dependency>
<groupId>com.sun.activation</groupId>
<artifactId>javax.activation</artifactId>
<version>1.2.0</version>
</dependency>
Gradle
compile 'com.sun.activation:javax.activation:1.2.0'
плющ
<dependency org="com.sun.activation" name="javax.activation" rev="1.2.0" />
JavaBeans Activation Framework - это отдельная технология с собственным обслуживающим JSR в JCP и собственной загрузкой. Да, Java SE 9 устарела и предлагает удалить в будущем выпуске вместе с модулями, совместно используемыми с Java EE, но это не влияет на автономную версию. Автономная версия будет жить дальше. Если вы используете Maven, то это должно работать:
<dependency>
<groupId>com.sun.activation</groupId>
<artifactId>javax.activation</artifactId>
<version>1.2.0</version>
</dependency>
и если вы разрабатываете модуль, то вы можете requires java.activation
,
Обновление 2020
следующий ренайминг
(из-за некоторых юридических проблем,
javax.*
переименовать в
jakarta.*
. Таким образом, текущая версия 1.2.2+ Jakarta Activation Framework использует имена:
jakarta.activation:jakarta.activation-api
(вместоjavax.activation:javax.actication-api
) или жеcom.sun.activation:jakarta.activation
(вместоcom.sun.activation:javax.activation
javax.activation:activation
) и
(Имена пакетов в этих библиотеках все еще
javax.activation
так что эта проблема связана только с именами зависимостей Maven)
<dependency>
<groupId>jakarta.activation</groupId>
<artifactId>jakarta.activation-api</artifactId>
<version>1.2.2</version>
</dependency>
или же
<dependency>
<groupId>com.sun.activation</groupId>
<artifactId>javax.activation</artifactId>
<version>1.2.2</version>
</dependency>
Внимание: вам не нужны обе зависимости, потому что
com.sun.activation:javax.activation
включить классы из
jakarta.activation:jakarta.activation-api
Подсказка Используйте Maven enforcer, чтобы избавить ваш проект от этих дубликатов:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0-M3</version>
<executions>
<execution>
<id>enforce-lib-ban</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<bannedDependencies>
<!-- the activation framework was renamed to jarkata activation framework -->
<excludes>
<exclude>javax.activation:javax.actication-api</exclude>
<exclude>com.sun.activation:javax.activation</exclude>
<exclude>javax.activation:activation</exclude>
</excludes>
<message>use jakarta.activation:jakarta.activation-api or com.sun.activation:jakarta.activation instead of javax.activation</message>
</bannedDependencies>
<!-- if you use com.sun.activation:jakarta.activation
<bannedDependencies>
<!- - the implementation com.sun.activation:jakarta.activation contains the api classes too - ->
<excludes>
<exclude>jakarta.activation:jakarta.activation-api</exclude>
</excludes>
<message>the implementation com.sun.activation:jakarta.activation is included and it contains the api classes too</message>
</bannedDependencies>
-->
</rules>
</configuration>
</execution>
</executions>
</plugin>
Я использую конфигурацию модуля в своем проекте, поэтому эту проблему просто решили, добавив requires java.activation
к module-info.java
файл.
Как написано выше, версии Java> 8 не предоставляют javax.activation. Я встречал это исключение при работе над верблюжьим проектом. Я только что добавил следующую зависимость:
<!-- https://mvnrepository.com/artifact/javax.activation/activation -->
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
В случае, если кто-то еще сталкивается с этим и, как я, введен в заблуждение, фактическая опция командной строки не --add-module
но --add-modules
Мне нужно отправлять почту в Liferay 7.1, поэтому я добавил вот такую зависимость
скомпилировать 'javax.mail:mail:1.4.7'