看起来在Java 9中,javax.activation
包已被弃用。Oracle迁移指南建议在JVM启动时使用--add-modules java.activation
选项。
但是,我想避免使用该选项并替换javax.activation
包的类,因为它已经被弃用并将在未来的Java版本中被删除。我认为,应该有一些javax.activation
的替代方案。如果有可用的替代方案,那是什么?
看起来在Java 9中,javax.activation
包已被弃用。Oracle迁移指南建议在JVM启动时使用--add-modules java.activation
选项。
但是,我想避免使用该选项并替换javax.activation
包的类,因为它已经被弃用并将在未来的Java版本中被删除。我认为,应该有一些javax.activation
的替代方案。如果有可用的替代方案,那是什么?
JavaBeans Activation Framework (JAF)可能是您寻找的替代方案,用于现有包。
这个独立的 JAF 发布使用 Java 平台模块系统自动模块名称
java.activation
,以匹配 JDK 9 中使用的模块名称。未来版本将包括完整的模块元数据。
这些独立的 API 仅以模块化形式受支持,通过 可升级模块 的概念。使用它们,可以在任何阶段(即编译时、构建时或运行时)中使用来自较新版本的该模块的版本。
当前可用版本为1.2.0
,可以像这样使用:
Maven
<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'
Ivy
<dependency org="com.sun.activation" name="javax.activation" rev="1.2.0" />
<dependency>
<groupId>com.sun.activation</groupId>
<artifactId>javax.activation</artifactId>
<version>1.2.0</version>
</dependency>
如果您正在开发一个模块,那么您可以使用 requires java.activation
。
javaee-api
依赖项并将其范围设置为provided,我需要添加这个吗? - Dmitriy Dumanskiy下一次更名
(由于一些法律问题, javax.*
被更名为 jakarta.*
。所以当前的1.2.2+版本的 Jakarta Activation Framework 使用以下名称:
jakarta.activation:jakarta.activation-api
(而不是 javax.activation:javax.activation-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.0</version>
</dependency>
com.sun.activation:javax.activation
已经包含了jakarta.activation:jakarta.activation-api
中的类。
<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>
- <groupId>com.sun.activation</groupId> <artifactId>javax.activation</artifactId> <version>1.2.2</version>
- 将版本更改为1.2.0。 - Lonzak如上所述,Java版本> 8没有提供javax.activation。在Camel项目中工作时遇到了此异常。我只需添加以下依赖项:
最初的回答:
<!-- https://mvnrepository.com/artifact/javax.activation/activation -->
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
我在我的项目中使用模块配置,所以这个问题可以通过在module-info.java
文件中添加requires java.activation
来简单解决。
我需要在 Liferay 7.1 中发送邮件,所以我添加了依赖项,如下所示
compile 'javax.mail:mail:1.4.7'