자바 (9)는 자바 EE API를 포함 여섯 개 모듈 사용되지 않는 그들이되어 제거 될 것 곧 :
- java.activation 와
javax.activation
패키지 - java.corba 와
javax.activity
,javax.rmi
,javax.rmi.CORBA
, 및org.omg.*
패키지 - java.transaction 와
javax.transaction
패키지 - 모든
javax.xml.bind.*
패키지 와 함께 java.xml.bind - java.xml.ws 와
javax.jws
,javax.jws.soap
,javax.xml.soap
, 모든javax.xml.ws.*
패키지 - java.xml.ws.annotation 와
javax.annotation
패키지
어떤 유지 관리 타사 아티팩트가 해당 API를 제공합니까? API를 얼마나 잘 제공하는지 또는 제공해야하는 다른 기능은 중요하지 않습니다. 중요한 것은 이러한 모듈 / 패키지를 대체 할 수있는 것입니까?
지식을 쉽게 수집 할 수 있도록 지금까지 알고있는 내용에 답하고 커뮤니티 위키를 만들었습니다. 사람들이 자신의 답변을 작성하는 대신 그것을 확장하기를 바랍니다.
투표 마감 전에 :
- 예, 이미 개별 모듈에 대한 몇 가지 질문이 있으며이 질문에 대한 답변은 물론 해당 정보를 복제합니다. 그러나 AFAIK는 이러한 모든 것에 대해 배울 단일 포인트가 없으며 많은 가치가 있다고 생각합니다.
- 도서관의 추천을 요구하는 질문은 “논평 한 답변과 스팸을 끌어들이는 경향이 있기 때문에”일반적으로 주제가 아닌 것으로 간주되지만 여기서는 해당되는 것으로 생각하지 않습니다. 유효한 라이브러리 세트는 명확하게 설명되어 있습니다. 특정 표준을 구현해야합니다. 그 외에는 아무 것도 중요하지 않으므로 의견과 스팸의 위험이별로 없습니다.
답변
더 이상 사용되지 않는 Java EE 모듈을 사용하는 대신 다음 아티팩트를 사용하십시오.
JAF ( java.activation )
JavaBeans Activation Framework (현재 Jakarta Activation )는 독립형 기술입니다 (Maven Central에서 사용 가능).
<dependency>
<groupId>com.sun.activation</groupId>
<artifactId>jakarta.activation</artifactId>
<version>1.2.2</version>
</dependency>
( 소스 )
CORBA ( java.corba )
에서 JEP 320 :
써드 파티가 CORBA API, ORB 구현, CosNaming 제공자 등의 유지 보수를 인계하지 않는 한 독립형 CORBA 버전은 없습니다. Java SE Platform은 독립적 인 CORBA 구현을 보증하므로 써드 파티 유지 보수가 가능합니다. 반대로 RMI-IIOP 용 API는 Java SE 내에서만 정의되고 구현됩니다. 전용 JSR을 유지 보수하기 시작하거나 Eclipse Foundation에서 API의 관리 권한을 인수하지 않으면 독립형 버전의 RMI-IIOP가 제공되지 않습니다 (JCP에서 Eclipse Foundation으로 Java EE의 관리 전환이 GlassFish를 포함 함) CORBA 및 RMI-IIOP의 구현).
JTA ( java.transaction )
독립형 버전 :
<dependency>
<groupId>jakarta.transaction</groupId>
<artifactId>jakarta.transaction-api</artifactId>
<version>1.3.3</version>
</dependency>
( 소스 )
JAXB ( java.xml.bind )
Java EE 가 Jakarta EE 로 재 브랜딩 되었으므로 JAXB는 이제 새로운 아티팩트에 의해 제공됩니다.
<!-- API -->
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>2.3.3</version>
</dependency>
<!-- Runtime -->
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.3</version>
<scope>runtime</scope>
</dependency>
schemagen
그리고 xjc
될 수 있습니다 다운로드가 너무 독립형 JAXB 분포의 일환으로.
링크 된 답변 도 참조하십시오 .
JAX-WS ( java.xml.ws )
참조 구현 :
<!-- API -->
<dependency>
<groupId>jakarta.xml.ws</groupId>
<artifactId>jakarta.xml.ws-api</artifactId>
<version>2.3.3</version>
</dependency>
<!-- Runtime -->
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.3.3</version>
</dependency>
독립형 배포 다운로드 ( wsgen
및 포함 wsimport
).
공통 주석 ( java.xml.ws.annotation )
Java Commons Annotations (Maven Central에서 사용 가능) :
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>1.3.5</version>
</dependency>
( 소스 )
답변
JDK9 용 JAXB (java.xml.bind)
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>
답변
Spring Boot 2 기반 응용 프로그램의 JAX-WS (java.xml.ws) 및 JAXB (java.xml.bind)를 교체해야 하고이 JAR (Gradle build)로 끝났습니다.
// 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'
(필요 compile
하거나 다른 범위 runtimeOnly
로 충분할 수 있습니다 .)
나는 것으로 나타났습니다 https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-core는 “올드”를 사용하는 것으로 설명 이 대답 에 들어갑니다 org.glassfish
에서 가져온 것을 기반으로 물건 org.eclipse.yasson
뿐만 아니라.
이제는 정말 지저분한 상황이지만 작동하지만 어떻게 최상의 교체인지 확인해야합니까?
답변
jaxws-ri는 http://download.eclipse.org/rt/eclipselink/maven.repo 에서 찾을 수있는 commonj.sdo : commonj.sdo : jar : 2.1.1.v201112051852에 전 이적으로 의존하는 것으로 보입니다.
답변
위의 답변에 대한 약간의 변형 (개선)은 JAXB에만 해당됩니다. runtime
스코프에 의존성을 추가 할 수 있으며 이것이 효과적으로 필요한 경우에만 가능합니다 (즉, 버전이 9보다 큰 JRE에서 실행하기 위해 빌드 할 때 — 여기에서 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>
답변
JDK 11.0.3을 사용하여 위에서 설명한 대부분의 제안을 실험했지만 성공하지 못했습니다. 내가 결국 작동하는 유일한 해결책은 다음과 같습니다. 아마도 다른 옵션도 작동하지만 버전 선택이 중요한 것으로 보입니다. 예를 들어 com.sun.xml.ws:rt를 2.3.2로 변경하면 javax.jws 모듈을 더 이상 사용할 수 없게됩니다.
<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>
답변
이 문제의 JAXB 부분을 해결하는 가장 쉬운 방법은 루트 pom 또는 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>
그리고 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>
<!-- ... -->
또한 org.jvnet.jaxb2.maven2:maven-jaxb2-plugin
0.14.0 버전으로 업데이트하면 모든 jaxb 생성 문제가 해결되었습니다.