기존에 있던 프로젝트는 java8 버전이다.
이 프로젝트 소스를 복사하여 메이븐으로 바꾸고 자바를 21로 변경해서 새로운 프로젝트를 만드려고 하는데 계속 에러가 났다🥲
The package org.xml.sax is accessible from more than one module: <unnamed>, java.xml
검색해보니 보통 java 프로젝트에서 동일한 패키지가 여러 모듈에서 접근 가능할 때 발생한다고 한다.
Java 9 이상에서 모듈 시스템이 도입되면서 생긴 문제로, 두 개 이상의 모듈이 동일한 패키지를 포함하고 있을 때 발생한다는데..
그럼 종속성을 뭔가 중복으로 세팅해서 생긴 문제점인가? 싶어서 pom.xml을 열심히 뒤져봤는데, org.xml.sax는 없었다.
소스 가서 org.xml.sax 상위 패키지는 자바였다.
자바에서 에러가 날 수가 있나?..
패키지를 클린하고, 메이븐도 클린했다가 다시 업데이트 프로젝트도 해봤는데 안된다.
결국 팀장님의 도움을 받았다. 원인은 Java가 뭔가 빌드가 제대로 되지 않았던 문제인 것 같다. (나의 추측이다.. ㅠㅠ)
생각보다 간단하게 해결이 되었는데, pom.xml에서 태그에 자바 버전을 명시해두는 부분이 있었다.
태그와 를 같이 작성했는데, 부분을 주석처리했더니만 언제 내가 에러를 냈었냐는듯 잘~만 되었다. 메이븐 프로젝트를 업데이트를 진행하고 build path를 확인해보면 늘 21이 아닌 20으로 세팅이 자동으로 되던 문제도 있었는데, 이것도 동시에 해결되었다.
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>21</source>
<target>21</target>
</configuration>
</plugin>
<configuration>
태그 내의 <source>
와 <target>
옵션은 Java 컴파일러에게 사용할 Java 소스 코드와 바이트 코드 버전을 명시하는 데 사용된다. Java의 호환성과 관련된 이슈를 관리할 때 필수적이라고 한다.
<source>
태그는 사용할 Java 소스 코드의 버전을 지정한다. 예를 들어, <source>1.8</source>
는 Java 8의 언어 기능을 사용하여 코드를 작성했음을 의미한다. 지정된 버전보다 높은 버전의 Java 언어 기능(예: 람다 표현식, 메소드 참조 등)이 소스 코드에 사용된 경우, 컴파일러는 이를 오류로 간주한다.
<target>
는 컴파일된 Java 클래스 파일의 타겟 버전을 지정한다. 즉, 컴파일러가 생성하는 바이트 코드가 실행될 Java 가상 머신(JVM)의 최소 버전을 정의한다. 지정된 타겟 버전보다 낮은 버전의 JVM에서 생성된 바이트 코드를 실행하려고 하면, 호환성 문제로 실행이 거부될 수 있다.
예를 들어, <target>1.8</target>
로 설정하면 생성된 .class 파일들은 Java 8 이상의 JVM에서만 실행된다.
<configuration>
태그 내의 설정들은 프로젝트가 특정 Java 환경에서만 동작하도록 제한하거나, 더 낮은 버전의 Java 환경에서도 동작할 수 있도록 하도록 하는 역할을 한다. 예를 들어, 소스 코드는 Java 8 기능을 사용하여 작성했지만, 타겟 환경의 JVM 버전을 1.7로 설정하여 Java 7 호환 바이트 코드를 생성할 수 있고 이 경우, Java 8의 특정 기능(예: 람다)을 사용하지 않거나 호환되는 방식으로 코드를 작성해야 한다.
*** 추가 ***
요대로 딱 정리해두고 다른일을 하고 있는데 회사 동료분이 소스를 내려받았는데 실행이 되지 않는다고 한다.
나도 가지고있는 소스를 다시 클린하고 빌드했더니 해결된 것이 아니었다.
pom.xml에는 xml-apis가 없는데, maven에 계속 남아있었다.
pom.xml 파일을 열어 Dependency Hierarchy로 이동한다.
Resolved Dependenncies 탭을 열어 다운로드된 의존성을 확인한다.

xml-apis 우클릭하고 Exclude Maven Aritfact 누르면 excludsion창이 나오는데, OK 눌러준다.
pom.xml에 excludsion이 추가된다.

요녀석이 범인이었다...😇
다시 프로젝트를 클린하고 빌드하면 해결~!
도데체 저번엔 어떻게 됬던걸까 증말
'로그' 카테고리의 다른 글
[JS] JSP에서 템플릿 리터럴, 백틱(`) 사용하기 (0) | 2024.07.16 |
---|---|
엑셀 다운로드(Jquery 부분) (0) | 2024.06.04 |
[GCP] Google Source Repository에서 클론하기 (0) | 2024.03.21 |