75

似乎javax.activationJava 9 中已弃用包。Oracle 迁移指南建议--add-modules java.activation在 JVM 启动期间使用选项。

但是,我想避免这种情况并替换javax.activation包的类,因为它已被弃用,并将在未来的 java 版本中删除。我想,应该有某种替代方案javax.activation。如果有可用的,它是什么?

4

6 回答 6

74

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

这个独立的 JAF 版本使用 Java 平台模块系统 自动模块名称java.activation,以匹配 JDK 9 中使用的模块名称。未来版本将包括完整的模块元数据。

通过可升级模块的概念,仅以模块化形式支持独立 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" />
于 2017-09-29T17:10:26.077 回答
28

JavaBeans Activiation Framework 是一种独立的技术,在 JCP 中有自己的维护 JSR 和自己的下载。是的,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.

于 2017-09-29T17:14:00.857 回答
14

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 强制执行器使您的项目没有这些重复项:

<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>
于 2020-12-04T13:21:33.217 回答
2

如上所述,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>
于 2019-04-23T11:09:14.073 回答
2

我在我的项目中使用模块配置,所以这个问题通过添加requires java.activationmodule-info.java文件中得到了简单的解决。

于 2020-06-14T09:26:26.973 回答
0

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

编译'javax.mail:mail:1.4.7'

于 2021-03-31T14:46:19.557 回答