ultima jee8 jakarta empresarial descargar descarga java java-ee java-9 java-module

jee8 - Reemplazos para módulos JPMS obsoletos con API Java EE



oracle jee8 (7)

En lugar de usar los módulos Java EE en desuso, use los siguientes artefactos.

JAF ( java.activation )

JavaBeans Activiation Framework es una tecnología independiente (disponible en Maven Central):

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

( Source )

CORBA ( java.corba )

Desde JEP 320 :

No habrá una versión independiente de CORBA a menos que terceros se hagan cargo del mantenimiento de las API de CORBA, la implementación de ORB, el proveedor de CosNaming, etc. El mantenimiento de terceros es posible porque la Plataforma Java SE respalda implementaciones independientes de CORBA. Por el contrario, la API para RMI-IIOP se define e implementa únicamente dentro de Java SE. No habrá una versión independiente de RMI-IIOP a menos que se inicie un JSR dedicado para mantenerlo, o la administración de la API sea asumida por la Fundación Eclipse (la transición de la administración de Java EE del JCP a la Fundación Eclipse incluye GlassFish y su implementación de CORBA y RMI-IIOP).

JTA ( java.transaction )

Versión independiente:

<dependency> <groupId>javax.transaction</groupId> <artifactId>javax.transaction-api</artifactId> <version>1.2</version> </dependency>

( Fuente ; vea cómo usar 1.2 y el próximo 1.3 en la ruta de clase y módulo).

JAXB ( java.xml.bind )

Implementación de referencia:

<!-- Java 6 = JAXB version 2.0 --> <!-- Java 7 = JAXB version 2.2.3 --> <!-- Java 8 = JAXB version 2.2.8 --> <!-- Java 9 = JAXB version 2.3.0 --> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.2.8</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-core</artifactId> <version>2.2.8</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.2.8</version> </dependency>

( Source ; JEP 320 explica de dónde obtener schemagen y schemagen ).

JAX-WS ( java.xml.ws )

Implementación de referencia:

<dependency> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-ri</artifactId> <version>2.3.0</version> <type>pom</type> </dependency>

( Fuente ; también explica de dónde obtener wsgen y wsimport ).

Anotaciones comunes ( java.xml.ws.annotation )

Anotaciones de Java Commons (disponible en Maven Central):

<dependency> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <version>1.3.1</version> </dependency>

( Source )

Java 9 desaprobó seis módulos que contienen API Java EE y se eliminarán pronto:

  • java.activation con el paquete javax.activation
  • java.corba con javax.activity , javax.rmi , javax.rmi.CORBA y org.omg.* paquetes
  • java.transaction con el paquete javax.transaction
  • java.xml.bind con todos los paquetes javax.xml.bind.*
  • java.xml.ws con javax.jws , javax.jws.soap , javax.xml.soap y todos los paquetes javax.xml.ws.*
  • java.xml.ws.annotation con el paquete javax.annotation

¿Qué artefactos de terceros mantenidos proporcionan esas API? No importa qué tan bien proporcionen esas API o qué otras características tengan para ofrecer. Lo único que importa es si son un reemplazo directo para estos módulos / paquetes.

Para facilitar la recopilación de conocimientos, respondí con lo que sé hasta ahora e hice la respuesta un wiki de la comunidad. Espero que la gente lo extienda en lugar de escribir sus propias respuestas.

Antes de votar para cerrar:

  • Sí, ya hay algunas preguntas sobre módulos individuales y una respuesta a esta pregunta, por supuesto, duplicaría esa información. Pero AFAIK no hay un punto único para aprender sobre todo esto, lo que creo que tiene mucho valor.
  • Las preguntas que solicitan recomendaciones de la biblioteca generalmente se consideran fuera de tema, porque "tienden a atraer respuestas obstinadas y spam", pero no creo que eso se aplique aquí. El conjunto de bibliotecas válidas está claramente delineado: tienen que implementar un estándar específico. Más allá de eso, nada más importa, así que no veo mucho riesgo de opinión y spam.

Encontré que el camino más fácil para sortear las partes JAXB de estos problemas era usar la administración de dependencias en mi root pom o en mi bom:

<project ...> <dependencyManagement> <dependencies> <!-- ... --> <!-- Gone from jvm in java11 --> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-ri</artifactId> <version>2.4.0-b180830.0438</version> <scope>import</scope> <type>pom</type> </dependency> <!-- ... --> </dependencies> </dependencyManagement> </project>

Y en los módulos que fallan la compilación en jdk11:

<!-- ... --> <dependencies> <!-- Gone from jvm in java11 --> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <scope>runtime</scope> </dependency> <!-- ... --> </dependencies> <!-- ... -->

Además, actualizar la versión de org.jvnet.jaxb2.maven2:maven-jaxb2-plugin a 0.14.0 resolvió todos los problemas de generación de jaxb para mí.


He experimentado con la mayoría de las sugerencias descritas anteriormente usando JDK 11.0.3 y no he tenido éxito. La única solución que finalmente encontré que funciona es la siguiente. Quizás hay otras opciones que también funcionan, pero parece que la selección de la versión es crítica. Por ejemplo, cambiar com.sun.xml.ws:rt a 2.3.2 hace que el módulo javax.jws ya no esté disponible.

<dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>2.4.0-b180830.0438</version> </dependency> <dependency> <groupId>com.sun.xml.ws</groupId> <artifactId>rt</artifactId> <version>2.3.1</version> </dependency>


Necesitaba reemplazar JAX-WS (java.xml.ws) y JAXB (java.xml.bind) para mi aplicación basada en Spring Boot 2 y terminé con estos JAR (construcción de Gradle):

// replacements for deprecated JDK module java.xml.ws runtimeOnly ''javax.xml.ws:jaxws-api:2.3.0'' // javax.xml.ws.* classes runtimeOnly ''javax.jws:jsr181-api:1.0-MR1'' // for javax.jws.* classes // replacement for deprecated JDK module java.xml.bind runtimeOnly ''javax.xml.bind:jaxb-api'' runtimeOnly ''org.glassfish.jaxb:jaxb-runtime:2.3.0.1'' runtimeOnly ''org.glassfish:javax.json:1.1.2'' runtimeOnly ''org.eclipse:yasson:1.0.1''

(Es posible que necesite compile u otro alcance, runtimeOnly fue suficiente para nosotros).

Me di cuenta de que https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-core se describe como "Viejo" y el uso de esta respuesta fue para cosas basadas en org.glassfish que trajeron org.eclipse.yasson como bien.

Ahora es una situación realmente desordenada, funciona, pero ¿cómo debería alguien estar seguro de que es el mejor reemplazo, verdad?



Solo una pequeña variación (mejora) en las respuestas anteriores --- ejemplificada aquí solo para JAXB. Se pueden agregar las dependencias con el alcance de runtime y solo si esto es realmente necesario (es decir, cuando se compila para ejecutarse en un JRE con versión> = 9 --- aquí se ejemplifica v11):

<profile> <id>when-on-jdk-11</id> <activation> <jdk>11</jdk> </activation> <properties> <!-- missing artefacts version properties --> <jaxb-api.version>2.3.1</jaxb-api.version> <jaxb-impl.version>2.3.2</jaxb-impl.version> <!-- one might let it the same with the jaxb-api.version --> </properties> <dependencies> <!-- runtime dependencies to avoid JAXB related CNF exceptions when running on Java 11 (e.g.: ClassNotFoundException: javax.xml.bind.annotation.XmlType) --> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>${jaxb-api.version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>${jaxb-impl.version}</version> <scope>runtime</scope> </dependency> </dependencies> </profile>


JAXB (java.xml.bind) para JDK9

Funciona perfectamente en mis aplicaciones de escritorio en jdk9 / 10 EA

<properties> <jaxb-api.version>2.3.0</jaxb-api.version> </properties> <!-- JAXB 2.3.0 for jdk9+ --> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>${jaxb-api.version}</version> </dependency> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>${jaxb-api.version}</version> </dependency> <!-- JAXB needs javax.activation module (jdk9) --> <dependency> <groupId>javax.activation</groupId> <artifactId>javax.activation-api</artifactId> <version>1.2.0</version> </dependency>