programing

사용되지 않는 JPMS 모듈을 Java EE API로 대체

firstcheck 2022. 8. 15. 10:29
반응형

사용되지 않는 JPMS 모듈을 Java EE API로 대체

Java 9는 Java EE API를 포함하는 6개의 모듈을 권장하지 않으며 곧 제거될 예정입니다.

  • java. 액티베이션javax.activation
  • java.corba함께javax.activity,javax.rmi,javax.rmi.CORBA , , , , 입니다.org.omg.*(패키지)
  • java. 트랜잭션javax.transaction
  • java.xml.disples with alljavax.xml.bind.*(패키지)
  • java.xml.ws 및javax.jws,javax.jws.soap,javax.xml.soap및 all , " " "javax.xml.ws.*(패키지)
  • java.xml.ws. 관련 정보javax.annotation

이러한 API를 제공하는 유지 보수 서드파티 아티팩트는 무엇입니까?API를 얼마나 잘 제공하느냐, 어떤 기능을 제공하느냐는 중요하지 않습니다.중요한 것은 이러한 모듈/패키지를 대체하고 있느냐 하는 것입니다.

지식 수집을 쉽게 하기 위해 지금까지 알고 있는 것으로 답변하고 커뮤니티 위키로 만들었습니다.나는 사람들이 스스로 답을 쓰지 말고 그것을 확장해 줬으면 좋겠다.


종료 투표 전:

  • 네, 각 모듈에 대한 몇 가지 질문이 이미 있습니다.이 질문에 대한 답변은 당연히 해당 정보와 중복됩니다.그러나 AFAIK는 이 모든 것을 배울 수 있는 단일 포인트가 없기 때문에 가치가 있다고 생각합니다.
  • 도서관 추천을 요청하는 질문은 "의견적인 답변과 스팸을 유도하는 경향이 있기 때문에 보통 주제에서 벗어난 것으로 간주되지만, 여기에는 해당되지 않는다고 생각합니다.유효한 라이브러리 세트가 명확하게 기술되어 있습니다.그들은 특정한 기준을 실행해야 한다.그 외에는 아무것도 중요하지 않기 때문에 의견이나 스팸의 위험은 그다지 없다고 생각합니다.

사용되지 않는 Java EE 모듈을 사용하는 대신 다음과 같은 아티팩트를 사용하십시오.

JAF(java.activation)

JavaBeans Activation Framework(현재의 자카르타 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 구현, Cos Naming 프로바이더 등을 서드파티가 인계하지 않는 한 CORBA의 독립형 버전은 존재하지 않습니다.서드파티 유지보수는 Java SE Platform이 CORBA의 독립적 구현을 지지하기 때문에 가능합니다.반면 RMI-IIOP용 API는 Java SE 내에서만 정의 및 구현됩니다.전용 JSR이 RMI-IIOP를 유지 보수하기 시작하거나 이클립스 재단이 API의 관리를 인계하지 않는 한 RMI-IIOP의 독립 실행형 버전은 존재하지 않습니다(JCP에서 이클립스 재단으로 Java EE의 관리 권한 전환 및 CORBA 및 RII 구현 포함).

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가 자카르타 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>

<!-- Alternative runtime -->
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.3</version>
    <scope>runtime</scope>
</dependency>

JAXB 레퍼런스 실장 페이지.

대체 런타임은 Abhijit Sarkar에 의해 제기되었습니다.

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.설명)

Java Commons 주석(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(http.xml.timeout)를 교체해야 했습니다.그 결과, 다음의 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은 "Old"로 표시되어 있으며, 이 답변을 사용하여org.glassfish가지고 온 기초적인 것org.eclipse.yasson뿐만 아니라.

지금은 정말 엉망진창이지만, 그게 최선의 대체품이라고 어떻게 확신해야 할까요?

jaxws-ri는 commonj.sdo: commonj.sdo: jar: 2.1.1.v201112051852에서 일시적으로 의존합니다.이것들은 분명히 저장소 http://download.eclipse.org/rt/eclipselink/maven.repo에서 찾을 수 있습니다.

위의 답변에 대한 약간의 변경(개선사항)이 있습니다.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>

를 pom.xml에 합니다. <dependency> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-rt</artifactId> <version>2.3.3</version> </dependency>

다음으로 JAVA 8을 대체 JRE로 사용합니다.상세한 것에 대하여는, https://www.youtube.com/watch?v=pgSJda16N54 의 비디오를 참조해 주세요.그것은 나에게 효과가 있었습니다.

JDK 11.0.3을 사용하여 위에서 설명한 제안의 대부분을 실험했지만 성공하지 못했습니다.제가 결국 효과가 있는 유일한 해결책은 다음과 같습니다.다른 옵션도 사용할 수 있지만 버전 선택이 중요한 것 같습니다.예를 들어 com.sun.xml 변경 등입니다.ws:rt to 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> 

Talend(7.x 등)에 이 문제가 있는 경우 프로젝트의 Default POM.xml에 추가할 수 있습니다.

<dependencies>
    <dependency>
        <groupId>javax.xml.soap</groupId>
        <artifactId>javax.xml.soap-api</artifactId>
        <version>1.4.0</version>
    </dependency>
</dependencies>

테스트 대상:

  • JDK 8.0.275.1 핫스팟 채택 : OK
  • JDK 11.0.9.101 핫스팟 채택 : OK
  • JDK 15.0.1.9-hotspot : KO를 채택합니다(단, 이것은 다른 문제입니다).호환되지 않는 조건부 오퍼랜드 유형 예외 및 TDieException)
  • Zulu-8.50.0.1017: OK
  • Zulu-11.43.1015 : OK

봄 MVC 프로젝트에서 jdk 11 + 개미 + 아이비를 사용하고 있습니다."package javax.jws does not exist" 오류가 발생하여 javax.jws-api-1.1.jarclasspath에 추가했더니 동작했습니다.https://repo1.maven.org/maven2/javax/jws/javax.jws-api/1.1/javax.jws-api-1.1.jar에서 jar를 다운로드하여 classpath에 추가합니다.build.xml

또는 에 추가할 수도 있습니다.pom.xml:

<dependency>
  <groupId>javax.jws</groupId>
  <artifactId>javax.jws-api</artifactId>
  <version>1.1</version>
</dependency>

이러한 문제의 JAXB 부분을 회피할 수 있는 가장 쉬운 방법은 루트 폼 또는 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-pluginJaxb 생성 문제를 0.14.0으로 해결했습니다.

2022년 현재도 이것을 겪고 있는 것은 정말 고통입니다!위의 여러 가지 제안을 시도했지만 아래 종속성에서만 작동시킬 수 있었습니다.

<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>2.3.0.1</version>
</dependency>
 
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
 
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.1</version>
</dependency>
  
<dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.25.0-GA</version>
</dependency>

주의: 의존관계를 갱신하고 싶은 유혹은 없습니다.그렇게 해 두면, 나에게도 효과가 있습니다.

언급URL : https://stackoverflow.com/questions/48204141/replacements-for-deprecated-jpms-modules-with-java-ee-apis

반응형