2023. 7. 5. 17:27ㆍ프로그래밍/웹 개발
Intellij에서 web project를 생성하게 되면 기본적으로 다음과 같은 계층 구조를 가지고 있다.
만약 web 폴더내에 lib폴더가 없다면 생성해서 만들어주도록 한다.
문제는 이 lib폴더에는 jar파일들을 추가해도 소스파일에서 import 하지 못하는 현상이 발생한다.
그러나 server 작동시에는 해당 jar파일이 컴파일 됐는지 정상적으로 동작하는 모습을 보여주는데 이는 다음과 같은 문제를 가지고 있기 때문이다.
1. server를 실행한 후의 lib경로는 자동으로 인식하지만 server 실행전의 물리경로에 있는 lib 폴더의 경로는 인식하지 못한다.
-> 별도의 컴파일 에러를 발생시키지 않는다면 서버 실행 후에는 라이브러리를 가져오니 관계없지만 java 소스코드의 경우 import가 되지 않을 시에는 server를 run할 수 없으며 가능하다고 해도 compile error가 떠있는 상태에서는 자동완성이 안된다던지 여러가지 문제 발생
eclipse로 dynamic web project를 생성해본 개발자라면 알겠지만 초기에 jar파일을 추가한 후 프로젝트 폴더를 우클릭 한 후 build path를 하는 과정을 거치게 되는데 intellij 역시 마찬가지로 해당 lib폴더가 기본 라이브러리 경로 파일이라는 것을 설정해줘야한다.
1. lib폴더를 우클릭 한 후에 Add as Library..를 클릭
2. 창이 뜨면 프로젝트명을 확인하고 추가하고자 하는 library의 명을 설정한 후에 OK를 클릭한다.
이렇게 라이브러리 경로를 설정후 프로젝트의 프로젝트 경로/WEB-INF/lib폴더에 jar파일들을 추가하게 되면 컴파일 에러가 사라지는 모습을 확인할 수 있다.
또한 이는 project structure 창에서 다음과 같이 설정한 것과 동일하다는 것을 알 수 있다.
* 여기서부터는 동일한 결과의 다른 방법을 서술한 것이니 참고할 것
1. 좌측의 Libraries탭에서 새로운 Library경로를 설정해준다.(이 때 프로젝트 내부의 lib폴더가 아닌 외부 라이브러리로 설정해도 가능
2. Modules탭으로 이동한 후에 depencies탭으로 이동 후 +를 클릭하면 Project Libraries에 설정한 이름으로 Library가 있을 것이다(필자의 경우 lib으로 설정)
3. 해당 Library를 추가하면 된다.
이 같은 방법은 결론적으로 물리경로의 library의 root(path)를 설정한 것이다.
만약 처음에 언급한 문제와는 반대로 물리경로의 lib는 인식하지만 서버 실행 시에 ClassNotFoundException이라던지 NoClassDeFoundError가 발생한다면 아래의 글을 참고하길 바란다.
이 글을 요약하자면 artifact의 WEB-INF/lib 폴더내에 아까 설정한 lib를 따로 설정해주겠다는 것이다.
일반적으로는 프로젝트의 out폴더는 서버 실행시 프로젝트의 물리경로에 있는 파일 구조를 똑같이 가지고 가며 서버의 lib경로는 자동으로 설정돼있기 때문에 위와 같이 별도의 설정을 하지 않아도 될 것이다.
'프로그래밍 > 웹 개발' 카테고리의 다른 글
[IntelliJ] add framework support 시에 spring이 보이지 않는 문제 (0) | 2023.07.13 |
---|---|
[Mybatis]페이지 무한로딩 문제 해결 (0) | 2023.07.10 |
[Servlet] 서블릿에서 클래스를 찾지 못해 404 Not Found가 발생하는 현상 (0) | 2023.06.29 |
[Tomcat,JSP]서버에 파일 데이터가 올라가는 원리 (0) | 2023.06.29 |
[JSP] QueryString으로 데이터 넘기는 법(feat. form태그 GET Method) (0) | 2023.06.21 |