java 9中javax.activation包的替换是什么?

时间:2017-09-29 16:55:54

标签: java jvm java-9 javax.activation

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

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

6 个答案:

答案 0 :(得分:44)

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

  

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

仅通过 upgradeable modules 的概念,以模块形式支持独立API。使用它们,可以在任何阶段使用该模块的版本,即在编译时,构建时或运行时。

目前available version1.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'

<强> 常春藤

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

答案 1 :(得分:16)

JavaBeans Activiation Framework是一个独立的技术,在JCP中有自己的维护JSR并且自己下载。是的,Java SE 9已弃用它,并建议在将来的版本中删除与Java EE共享的模块,但这不会影响独立版本。独立版本将继续存在。如果您使用的是Maven,那么这应该可行:

typedef struct cec_keypress
{
  cec_user_control_code keycode;   /**< the keycode */
  unsigned int          duration;  /**< the duration of the keypress */
} cec_keypress;


typedef struct ICECCallbacks
{
void (CEC_CDECL* keyPress)(void* cbparam, const cec_keypress* key);

  /*!
   * @brief Transfer a CEC command from libCEC to the client.
   * @param cbparam             Callback parameter provided when the callbacks were set up
   * @param command             The command to transfer.
   */

  void Clear(void)
  {
    keyPress             = nullptr;

如果您正在开发模块,那么您可以<dependency> <groupId>com.sun.activation</groupId> <artifactId>javax.activation</artifactId> <version>1.2.0</version> </dependency>

答案 2 :(得分:1)

我在我的项目中使用模块配置,因此可以通过在requires java.activation文件中添加module-info.java来解决此问题。

答案 3 :(得分:1)

更新2020

下一次重命名

(由于某些合法的issuesjavax.*被重命名为jakarta.*。因此,当前Jakarta Activation Framework的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>

答案 4 :(得分:0)

如上所述,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>

答案 5 :(得分:0)

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

编译'javax.mail:mail:1.4.7'