O Java 9 reprovou seis módulos que contêm APIs Java EE e eles serão removidos em breve:
- java.activation com
javax.activation
pacote - java.corba com
javax.activity
,javax.rmi
,javax.rmi.CORBA
, eorg.omg.*
pacotes - java.transaction com
javax.transaction
pacote - java.xml.bind com todos os
javax.xml.bind.*
pacotes - java.xml.ws com
javax.jws
,javax.jws.soap
,javax.xml.soap
, e todos osjavax.xml.ws.*
pacotes - java.xml.ws.annotation com
javax.annotation
pacote
Quais artefatos de terceiros mantidos fornecem essas APIs? Não importa o quão bem eles forneçam essas APIs ou quais outros recursos tenham - o que importa é que eles substituem esses módulos / pacotes?
Para facilitar a coleta de conhecimento, respondi com o que sei até agora e tornei a resposta um wiki da comunidade. Espero que as pessoas o estendam em vez de escrever suas próprias respostas.
Antes de votar para fechar:
- Sim, já existem algumas perguntas em módulos individuais e uma resposta a essa pergunta duplicaria essas informações. Mas AFAIK não há um ponto único para aprender sobre tudo isso, o que acho que tem muito valor.
- As perguntas que fazem recomendações de bibliotecas geralmente são consideradas fora de tópico, porque "tendem a atrair respostas opinativas e spam", mas acho que não se aplica aqui. O conjunto de bibliotecas válidas é claramente delineado: eles precisam implementar um padrão específico. Além disso, nada mais importa, então não vejo muito risco de opinião e spam.
java
jakarta-ee
java-9
java-module
Nicolai
fonte
fonte
Respostas:
Em vez de usar os módulos Java EE descontinuados, use os seguintes artefatos.
JAF ( java.activation )
O JavaBeans Activation Framework (agora Jakarta Activation ) é uma tecnologia independente (disponível no Maven Central):
( Fonte )
CORBA ( java.corba )
Do JEP 320 :
JTA ( java.transaction )
Versão autônoma:
( Fonte )
JAXB ( java.xml.bind )
Como o Java EE foi renomeado para Jakarta EE , o JAXB agora é fornecido por novos artefatos:
Página Implementação de Referência JAXB .
schemagen
exjc
pode ser baixado também como parte de uma distribuição JAXB independente.Veja também a resposta vinculada .
JAX-WS ( java.xml.ws )
Implementação de referência:
Download de distribuição independente (contém
wsgen
ewsimport
).Anotações comuns ( java.xml.ws.annotation )
Anotações do Java Commons (disponível no Maven Central):
( Fonte )
fonte
jax-ws
o jdk e acom.sun.xml.ws
dependência?com.sun.xml.ws:jaxws-ri
vez dejava.xml.ws
no meu módulo, porque este último está obsoleto e será removido. E adicionei a dependência ao meu arquivo pom e o erro "module xyz lê o pacote 'javax.xml.ws' de 'java.xml.ws' e 'java.xml.ws'" apareceu.--add-modules
ou porque outros módulos o exijam. Você pode abrir uma nova pergunta para que possamos dar uma olhada?--patch-module
pode corrigir a divisão.JAXB (java.xml.bind) para JDK9
Trabalhando perfeitamente em meus aplicativos de desktop no jdk9 / 10 EA
fonte
2.3.0
para ambosjaxb-api
ejaxb-runtime
não é uma boa ideia. O tempo de execução do Glassfish está atualmente em2.3.0.1
enquanto a API permanece em2.3.0
. Sugiro que você solte oproperties
elemento inteiramente na resposta e apenas codifique cada número de versãodependency
separadamente.<dependencyManagement>
, importe aorg.glassfish.jaxb:jaxb-bom
BOM em alguma versão (a mais recente agora é 2.3.0.1) e, na<dependencies>
seção real , não especifique uma versão parajaxb-api
oujaxb-runtime
. O número da versão será obtido na BOM, o que garantirá que eles estejam sempre sincronizados e sejam atualizados juntos.Eu precisava substituir JAX-WS (java.xml.ws) e JAXB (java.xml.bind) pelo meu aplicativo baseado no Spring Boot 2 e terminei com esses JARs (versão Gradle):
(Você pode precisar
compile
ou outro escopo,runtimeOnly
foi o suficiente para nós.)Notei que https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-core é descrito como "Old" e usando esta resposta foi para
org.glassfish
o material base que trouxeorg.eclipse.yasson
também.Agora é uma situação realmente confusa, funciona, mas como alguém deve ter certeza de que é a melhor substituição, certo?
fonte
Parece que o jaxws-ri depende transitivamente de commonj.sdo: commonj.sdo: jar: 2.1.1.v201112051852 que aparentemente pode ser encontrado no repositório http://download.eclipse.org/rt/eclipselink/maven.repo
fonte
mvn -U clean install
continua dizendoCould not find artifact commonj.sdo:commonj.sdo:jar:2.1.1.v201112051852
.<dependency> <groupId>javax.jws</groupId> <artifactId>jsr181-api</artifactId> <version>1.0-MR1</version> </dependency>
sdo-eclipselink-plugin
Apenas uma pequena variação (melhoria) nas respostas acima --- exemplificada aqui apenas para JAXB. É possível adicionar as dependências com o
runtime
escopo e somente se isso for efetivamente necessário (ou seja, ao criar para execução em um JRE com a versão> = 9 --- aqui a v11 é exemplificada):fonte
Eu experimentei a maioria das sugestões descritas acima usando o JDK 11.0.3 e não obtive sucesso. A única solução que acabei encontrando para trabalhar é a seguinte. Talvez haja outras opções que também funcionem, mas parece que a seleção da versão é crítica. Por exemplo, alterar com.sun.xml.ws:rt para 2.3.2 faz com que o módulo javax.jws não esteja mais disponível.
fonte
Eu encontrei o caminho mais fácil para contornar as partes JAXB desses problemas foi usar o gerenciamento de dependência no meu pom raiz ou no meu bom:
E nos módulos que falham na compilação no jdk11:
Além disso, a atualização da versão
org.jvnet.jaxb2.maven2:maven-jaxb2-plugin
para 0.14.0 resolveu todos os problemas de geração do jaxb para mim.fonte
Estou usando jdk 11 + ant + ivy no meu projeto de primavera mvc. Eu estava recebendo o erro "o pacote javax.jws não existe ", então adicionei o javax.jws-api-1.1.jar ao classpath e funcionou! Faça o download do jar em https://repo1.maven.org/maven2/javax/jws/javax.jws-api/1.1/javax.jws-api-1.1.jar E adicione-o ao seu caminho de classe em seu build.xml
fonte