programing

java9에서 모듈 읽기 패키지 오류를 해결하는 방법

closeapi 2023. 3. 7. 21:29
반응형

java9에서 모듈 읽기 패키지 오류를 해결하는 방법

spring-boot를 사용하는 Java 9의 새로운 모듈러 구조를 이해하려고 합니다.예를 들어, https://github.com/tmatyashovsky/java9-springboot와 같은 간단한 애플리케이션을 실행하고 싶습니다.

Java 9에서 maven 3.5.0을 사용하고 있습니다.

Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-03T21:39:06+02:00)
Maven home: ~/soft/apache-maven-3.5.0
Java version: 9-ea, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-9-oracle
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.4.0-79-generic", arch: "amd64", family: "unix"

문제는 내게 아직 예외가 있다는 것이다.어떤 의미이며 어떻게 수정해야 합니까?

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.6.1:compile (default-compile) on project api: Compilation failure: Compilation failure: 
[ERROR] module  reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module spring.core reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module spring.jcl reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module spring.aop reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module spring.expression reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module spring.boot.starter.web reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module spring.boot.starter reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module spring.boot reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module spring.boot.autoconfigure reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module spring.boot.starter.logging reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module logback.classic reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module logback.core reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module slf4j.api reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module jul.to.slf4j reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module log4j.over.slf4j reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module spring.boot.starter.json reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module jackson.databind reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module jackson.annotations reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module jackson.core reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module jackson.datatype.jdk8 reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module jackson.datatype.jsr310 reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module jackson.module.parameter.names reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module spring.boot.starter.tomcat reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module tomcat.embed.core reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module tomcat.embed.el reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module tomcat.embed.websocket reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module hibernate.validator reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module validation.api reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module jboss.logging reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module classmate reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module spring.web reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module spring.webmvc reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module spring.context reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module spring.beans reads package javax.annotation from both tomcat.embed.core and java.xml.ws.annotation
[ERROR] module com.lohika.morning.java9modules.service reads package javax.annotation from both java.xml.ws.annotation and tomcat.embed.core

문제는 모듈 경로에 동일한 패키지가 포함되어 있다는 것입니다( ).javax.annotation다른 모듈(java.xml.ws.module 및 tomcat.module.core)에 배치되어 있습니다.이러한 모듈시스템은 설정의 신뢰성을 높이기 위해 이를 금지합니다.이를 분할 패키지라고 합니다.모듈 시스템은 해당 패키지를 두 번 읽은 모든 모듈을 나열할 때(즉, " 참조).이제 어떻게 해야 하죠?

업무의 첫 번째 순서는 두 패키지에 동일한 클래스가 포함되어 있는지 확인하는 것입니다.만약 그렇다면, 당신은 행운아입니다.이제 모듈 시스템에서 인식해야 할 것은 다음 두 가지 방법 중 하나뿐인지 확인하는 것입니다.

  • 모듈 중 하나에서1개의 패키지만 필요한 경우 Configuration에서 패키지를 삭제하고 다른 패키지를 사용합니다.java.xml.ws.discription을 명시적으로 요구하는 것을 그만둘 수 있을까요?
  • classpath에 tomcat.core.core를 넣으면 패키지 버전은 완전히 무시되고 클래스 경로의 코드를 포함한 시스템 전체가 java.xml.ws.information 내의 패키지만 표시됩니다.

(a) 상대방이 포함하지 않는 타입과 (b) 어플리케이션이 필요로 하는 타입이 양쪽 패키지에 포함되어 있는 경우는, 보다 어려운 상황에 있습니다.우선 tomcat.embedd.core가 뭔가 수상한 행동을 한 것이 아닌가 하는 의심이 듭니다(그건 잘 모르겠습니다만).도움이 될 수 있는 것은 비표준 옵션뿐입니다.

Spring Boot과 Embedded Tomcat의 경우에도 비슷한 문제가 발생하였습니다.에 포함된 분할 패키지가 있습니다.javax.annotation:javax.annotation-api뿐만 아니라org.apache.tomcat:tomcat-annotations-api.

javax.annotation:javax.annotation-api의 경과적 의존관계입니다.org.springframework.boot:spring-boot-starter-web.

Spring Boot 및 Embedded Tomcat의 특정 케이스에서 이 문제를 해결하려면 다음과 같이 종속성을 추가하는 것이 해결책이었습니다.의존성을 없앴다javax.annotation-api은 '아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아tomcat-annotations-api는 필요한 모든 패키지와 클래스도 제공합니다.

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <!-- served by tomcat-annotations-api instead -->
                <groupId>javax.annotation</groupId>
                <artifactId>javax.annotation-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-annotations-api</artifactId>
    </dependency>

다음 오류가 발생하였습니다.

[ERROR] module hibernate.core가 Parent Project와 hibernate.core에서 org.hibernate.dialect 패키지를 읽습니다.

project를 할때 mvn clean install을 합니다.ParentProject .module-info.java★★★★★★에ParentProject되어 있다

...
exports hibernate.core;
...
requires ChildProject;
...

module-info.javaChildProject

requires hibernate.core;

삭제exports hibernate.core; ParentProject츠키노

=> Eclipse에서 자동 생성된 module-info.disc에 주의하십시오.

언급URL : https://stackoverflow.com/questions/44697738/how-to-resolve-module-reads-package-error-in-java9

반응형