Java9中 javax.activationpackage 的替代品是什么?

看起来 javax.activation包在 Java9中已被弃用。 Oracle 迁移指南建议在 JVM 启动期间使用 --add-modules java.activation选项。

但是,我希望避免这种情况,并替换 javax.activation包的类,因为它已经过时,将在未来的 Java 版本中被删除。我想,javax.activation应该有一些替代品。如果有的话,是什么?

92984 次浏览

JavaBeans Activation Framework (JAF) 可能是您正在寻找的现有包的替代方案。

JAF 的这个独立版本使用 Java 平台模块系统 自动模块 名称 < a href = “ https://docs.oracle.com/javase/9/docs/api/java.activation- Summary y.html”rel = “ noReferrer”> java.activation ,以匹配模块名称 将来的版本将包含完整的模块元数据。

通过 可升级模块的概念,只支持模块化形式的独立 API。通过使用它们,可以在任何阶段(例如,在编译时、构建时或运行时)使用该模块的后续版本。


目前的 版本1.2.0,可以这样使用:

玛文

<dependency>
<groupId>com.sun.activation</groupId>
<artifactId>javax.activation</artifactId>
<version>1.2.0</version>
</dependency>

等级

compile 'com.sun.activation:javax.activation:1.2.0'

艾薇

<dependency org="com.sun.activation" name="javax.activation" rev="1.2.0" />

JavaBeans 激活框架是一种独立的技术,在 JCP 中有自己的维护 JSR 和自己的下载。是的,JavaSE9已经否定了它,并建议在未来的版本中移除与 JavaEE 共享的模块,但这并不影响独立版本。独立版本将继续存在。如果你正在使用 Maven,那么这个应该可以起作用:

<dependency>
<groupId>com.sun.activation</groupId>
<artifactId>javax.activation</artifactId>
<version>1.2.0</version>
</dependency>

如果你正在开发一个模块,那么你可以使用 requires java.activation

如上所述,> 8的 java 版本不提供 javax.activation。我在做骆驼项目的时候遇到了这个例外。我刚刚添加了以下依赖项:

<!-- https://mvnrepository.com/artifact/javax.activation/activation -->
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>

我在我的项目中使用模块配置,所以这个问题已经被简单地通过将 requires java.activation添加到 module-info.java文件来解决。

更新2020年

下一次重新洗牌

(由于一些合法的 问题javax.*被重命名为 jakarta.*。因此,目前的1.2.2 + 版本的 雅加达激活框架使用的名称:

  • 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 强制执行器使你的项目远离这些重复项目:

<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>

我必须在 Liferay 7.1中发送邮件,所以我添加了这样的依赖关系

编译‘ javax.mail: mail: 1.4.7’