75 votes

Quel est le remplacement du paquet javax.activation dans java 9 ?

On dirait que javax.activation est déprécié dans Java 9. Le guide de migration d'Oracle propose d'utiliser --add-modules java.activation pendant le démarrage de la JVM.

Cependant, je voudrais éviter cela et remplacer javax.activation les classes du paquet, car il est déprécié et sera supprimé dans les futures versions de java. Je suppose qu'il devrait y avoir une sorte d'alternative à la fonction javax.activation . S'il en existe une, quelle est-elle ?

6 votes

Un petit ajout : Le JDK 11 supprime cette fonctionnalité (dans le cadre de JEP 320), donc à partir de ce moment-là, JAF doit être inclus comme une dépendance séparée s'il est utilisé.

0 votes

Quelle est la dépendance requise pour l'activation de javax.mail ? javax.mail devrait suffire. N'est-ce pas ?

2 votes

La partie MimeBodyPart de javax.mail utilise le DataHandler d'activation pour définir le contenu mime de cette partie. J'ai rencontré ce problème aujourd'hui. Je n'ai pas pu comprendre pourquoi le thread principal s'est tout simplement volatilisé alors qu'il fonctionnait dans l'IDE. J'ai seulement attrapé l'exception, donc la classe non trouvée a glissé à travers. Après avoir dit que mon projet devait s'exécuter avec JRE 8, le problème a disparu> J'ai perdu des heures là-dessus.

74voto

nullpointer Points 1135

Cadre d'activation JavaBeans (JAF) est peut-être l'alternative au paquet existant que vous recherchez.

Cette version autonome de JAF utilise un système de modules de la plate-forme Java. module automatique nom de java.activation pour correspondre au nom de module utilisé dans le JDK 9. Une version future inclura les métadonnées complètes du module.

Les API autonomes sont prises en charge sous forme modulaire uniquement, via le concept de modules évolutifs . Grâce à eux, il est possible d'utiliser une version de ce module provenant d'une version ultérieure à n'importe quelle phase, c'est-à-dire au moment de la compilation, de la construction ou de l'exécution.


Actuellement, le version disponible car c'est 1.2.0 qui peut être utilisé comme suit :

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

14 votes

La fondation Eclipse a a pris en charge le développement de JavaEE . javax.activation a déménagé à jakarta.activation par wiki.eclipse.org/New_Maven_Coordinates

28voto

Alan Bateman Points 3303

Le cadre d'activation JavaBeans est une technologie autonome avec sa propre JSR de maintenance dans le JCP et son propre téléchargement. Oui, Java SE 9 l'a déprécié et a proposé de le supprimer dans une prochaine version avec les modules partagés avec Java EE mais cela n'a pas d'impact sur la version autonome. La version autonome continuera à vivre. Si vous utilisez Maven, cela devrait fonctionner :

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

et si vous développez un module, vous pouvez utiliser requires java.activation .

0 votes

Ainsi, avec javaee-api avec scope=provided, je dois ajouter cette dépendance ?

1 votes

Maintenant, avec JakartaEE, les sources sont hébergées par la fondation Eclipse et peuvent être trouvées sur GitHub : github.com/eclipse-ee4j/jaf et sur Maven central : mvnrepository.com/artifact/com.sun.activation/ Avec cela, le artifactId changé en jakarta.activation et le numéro de version à 1.2.1

14voto

Ralph Points 42744

Mise à jour 2020

la prochaine renaissance

(en raison de certaines dispositions légales questions , javax.* sont renommés en jakarta.* . Ainsi la version actuelle 1.2.2+ de Cadre d'activation de Jakarta utiliser les noms :

  • jakarta.activation:jakarta.activation-api (au lieu de javax.activation:javax.actication-api ) ou
  • com.sun.activation:jakarta.activation (au lieu de com.sun.activation:javax.activation javax.activation:activation ) et

(Le nom des paquets dans ces bibliothèques est toujours javax.activation donc ce problème ne concerne que les noms des dépendances de Maven)

<dependency>
    <groupId>jakarta.activation</groupId>
    <artifactId>jakarta.activation-api</artifactId>
    <version>1.2.2</version>
</dependency>

ou

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

Attention : vous ne pas a besoin des deux dépendances, car com.sun.activation:javax.activation incluent les classes de jakarta.activation:jakarta.activation-api


Indice Utilisez Maven enforcer pour garder votre projet libre de ces doublons :

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

2voto

J'utilise la configuration des modules dans mon projet, donc ce problème a été simplement résolu en ajoutant requires java.activation à la module-info.java fichier.

2voto

Michal Cz Points 11

Comme écrit ci-dessus, les versions de Java > 8 ne fournissent pas javax.activation. J'ai rencontré cette exception en travaillant sur le projet Camel. Je viens d'ajouter la dépendance suivante :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X