[Eclipse] Maven Project jdk 버전 바꾸기 및 에러 해결

다영·2023년 8월 24일
0

https://www.boostcourse.org/web316/lecture/16724?isDesc=false 에서 Maven을 이용해 웹 어플리케이션 실습을 진행하는 도중, 서버가 실행이 되지 않거나 jstl이 적용되지 않는 에러가 발생했다. 혹시 같은 에러를 겪고 있는 분이 계시거나, 미래에 같은 에러를 겪을 수도 있는 나를 위해 정리해본다.

사용중인 버전 정리

java version : 11.0.19
tomcat version : 8.5
Maven Arcyetype : maven-archetype-webapp 1.4
Eclipse : 2022-12

문제 상황


New > Project > Maven Project > Maven Arcyetype 중 maven-archetype-webapp 1.4 선택 > Finish
프로젝트를 생성하면 이런 모습이 되는데, 여기서 두 가지 문제를 해결해주어야 한다.

  1. Project 우클릭 > Properties > Java Compiler를 보면 버전이 1.7로 되어있는데, 이를 JDK 8 이상 버전으로 바꿔주어야 한다.
  2. index.jsp 파일의 The superclass "javax.servlet.http.HttpServlet", determined from the Dynamic Web Module facet version (2.3), was not found on the Java Build Path 혹은 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 에러를 해결해주어야 한다. 직역하면 동적 웹 모듈 facet 버전(2.3)에서 결정된 슈퍼클래스 "subax.servlet.sublet.subservlet"이 Java 빌드 경로에 없다 는 에러다.

JDK 버전 변경 - Java 9 이상인 경우

첫 번째 문제부터 해결해보도록 하자.
pom.xml 파일을 열고, <properties> 항목을 확인하면 다음과 같이 되어있는 것을 확인할 수 있다.

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

이걸 지우고 다음과 같이 바꿔준다. 11 부분에는 자신이 사용할 jdk 버전을 넣으면 된다.

<properties>
    <maven.compiler.release>11</maven.compiler.release>
</properties>

<plugins>에 다음과 같은 plugin을 추가한다.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.11.0</version>
    <configuration>
        <release>7</release>
    </configuration>
</plugin>

저장하고 Project 우클릭 > Maven > Update Project... 를 누르고 Properties에 들어가 Java Compiler를 확인하면 해당 버전으로 바뀐 것을 확인할 수 있다.

JDK 버전 변경 - 1.8인 경우

<properties>를 다음과 같이 변경해준다.

<properties>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>
</properties>

<plugins>에 다음과 같은 <plugin>을 추가한다.

<plugins>
    <plugin>    
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
    </plugin>
</plugins>

저장하고 Project 우클릭 > Maven > Update Project... 를 누르고 Properties에 들어가 Java Compiler를 확인하면 해당 버전으로 바뀐 것을 확인할 수 있다.

The superclass "javax.servlet.http.HttpServlet", determined from the Dynamic Web Module facet version (2.3), was not found on the Java Build Path 해결하기

Dynamic Web Module의 2.4부터 EL이 기본으로 사용할 수 있도록 설정되기 때문에 2.3일 경우에는 EL표기법의 결과가 출력되지 않는다.

Dynamic Web Module 3.1이 되도록 설정해본다.

Project 우클릭 > Project Facets > Dynamic Web Module의 Version을 3.1로 바꿔준다.

그리고 서블릿 라이브러리와 jstl 라이브러리를 사용하기 위해 다음과 같은 코드를 pom.xml<dependencies> 아래에 추가해준다.

<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

다시 저장하고 Project 우클릭 > Maven > Update Project... 를 누른 후 실행해본다.
⚠️ Update Project를 진행하면서 Dynamic Web Module Version이 다시 2.3으로 돌아가는 경우도 있었다. 오류 시 다시 살펴보자.

본인은 실행은 되지만 위와 같이 jstl이 정상적으로 적용되지 않는 모습을 보였다. 이 문제는 아래와 같이 Servers 탭의 Tomcat 아래 있는 모든 프로젝트들을 Remove하고 실행시키니 해결되었다.

참고자료

https://www.baeldung.com/maven-java-version

profile
🌱

0개의 댓글