티스토리 뷰

- Maven이란 무엇인가?

Java 기반 프로젝트의 라이프사이클 관리를 위한 빌드 관리 도구. 아파치 재단에서 제작.

 

> 컴파일과 빌드를 동시에 수행

> 서버 측 Deploy 자원을 관리할 수 있는 환경 제공

> 라이브러리 관리가 용이: 라이브러리를 사용할 때 jar 파일을 다운로드받아서 특정 폴더에 넣는 식이 아니라, 설정 파일에 라이브러리 이름/주소를 써주면 알아서 그걸 가져오는 기능이 있다.

 

전에도 얼핏 들어본 적은 있고 특히 3번째 특징을 보면 생각나는게 안드로이드 스튜디오의 Gradle이다. 안드로이드 스튜디오에서도 라이브러리를 쓰고 싶으면 build.gradle 파일에다가 dependency 어쩌구를 추가해주면 그걸 Gradle이 인식해서 import해주는 기능이 있었다.

실제로 Gradle이 Maven의 단점을 해결하기 위해 등장한 빌드 도구라고 한다. 

 

- pom.xml 파일

안드로이드의 build.gradle과 유사한 역할이라 보면 될 것 같은 설정 파일이다.

 

<dependencies>
 <dependency>
  <groupId> junit </groupId>
  <artifactId> junit </artifactId>
  <version> 3.8.1 </version>
  <scope> test </scope>
 </dependency>
</dependencies>

이런 식으로 <dependencies> 안에다가 추가해주면 해당 라이브러리를 가져올 수 있다.

 

- 이클립스에서 Maven 프로젝트 만들고 세팅하기

1) 프로젝트 생성

> 프로젝트 만들때 아키타입 (Archetype) 을 고르라는게 있다. 일종의 프로젝트 템플릿이라 보면 되며 뭘 선택했는지에 따라 라이브러리나 파일들을 자동으로 세팅해준다. webapp을 선택해보자.

> group id, artifact id, version, package 등을 쓰라고 하는데 각각에 대한 가이드는 이렇다.

group id: 보통 회사나 팀의 도메인 이름을 거꾸로 쓴다고 함

artifact id: 해당 프로젝트의 이름을 씀

version: 기본값 (0.0.1-SNAPSHOT) 으로 둔다

package: group id랑 artifact id를 조합해서 알아서 정해짐

 

2) 프로젝트 구조

> project/src/main 폴더 안에 resources랑 webapp 폴더가 있음.

resources: 설정 파일들을 넣어줌

webapp: 웹 관련 html, css 등을 넣어줌. index.jsp 파일이 기본적으로 이 안에 있다.

 

java 폴더도 있어야 하고 이 안에 자바 소스코드를 넣어야 하는데 왜인지 기본적으로 없다. 만들어줘야 함.

 

3) 기본 설정 몇가지

> 프로젝트를 만들면 Gradle처럼 뭔가 sync 과정같은걸 거치더니 빨간 X가 뜬다. index.jsp 파일로 가보면 HttpServlet을 찾을 수 없다는 오류 메시지가 보임.

> 이전의 실습에서 Dynamic Web Application을 만들 땐 WAS를 Tomcat으로 쓰겠다는 지정을 해줬었고, 그러면 Tomcat 안에 들어있는 서블릿 라이브러리를 사용하게 되기 때문에 이런 문제가 없었다. 근데 Maven Project를 만들 땐 Tomcat을 지정하지 않았었으므로 서블릿 라이브러리가 없는 것이다. 아래와 같이 dependency를 추가해서 서블릿 라이브러리를 가져온다.

 

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

scope라는 것은 이 라이브러리를 언제 사용할 것인지 지정해주는 건데 4가지가 있다.

complie: 컴파일할때 필요, 기본값

runtime: 런타임에 필요, JDBC 드라이버 등.

provided: 컴파일시에 필요하지만 실제 런타임에는 컨테이너 등에서 제공되는 모듈. 배포시엔 제외.

test: 테스트코드를 컴파일할때 필요. 배포시엔 제외.

 

> 프로젝트의 Properties -> Project Facets 항목으로 가보면 기본적으로 Dynamic Web Module 2.3, Java 1.5 버전을 사용하도록 설정되어 있다. 근데 EL, JSTL을 사용하려면 Dynamic Web Module 2.4 버전 이상이어야 한다. 그리고 Java 버전도 내 컴퓨터에 깔려있는 JDK 버전으로 맞춰줘야 한다.

 

JSTL 라이브러리 추가 및 JDK 11에 대한 Maven 플러그인 설정하기:

(부스트코스의 예제는 JDK 1.8을 기준으로 작성되었기에 그대로 갖다쓰니까 오류가 났다)

 

<dependency>
 <groupId>javax.servlet</groupId>
 <artifactId>jstl</artifactId>
 <version>1.2</version>
</dependency>
<plugins>
<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-compiler-plugin</artifactId>
 <version>3.8.0</version>
 <configuration>  
  <source>11</source>
  <target>11</target>
 </configuration>
</plugin>
</plugins>

 

web.xml 파일을 다음과 같이 수정:

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<display-name>Archetype Created Web Application</display-name> </web-app>

 

프로젝트 폴더의 .settings/org.eclipse.wst.common.project.facet.core.xml 파일을 수정:

 

<?xml version="1.0" encoding="UTF-8"?>
<faceted-project> <fixed facet="wst.jsdt.web"/>
<installed facet="jst.web" version="3.1"/>
<installed facet="wst.jsdt.web" version="1.0"/>
<installed facet="java" version="11"/>
</faceted-project>

 

> Properties -> Maven -> Java EE Integration 항목에서 체크박스를 활성화. 이러면 xml 파일에서 수동으로 설정했던 내용들이 이클립스에 적용이 된다.

 

> xml 파일을 직접 건드리지 않고 Properties -> Project Facets에서 간편하게 수정할 수도 있는 것 같다.

 

> 톰캣 실행시 multiple contexts have a path... 에러가 나는 경우가 있는데, 프로젝트를 없앴다가 같은 이름으로 다시 만든 경우 이런 문제가 생기는 것 같다. Servers/server.xml에서 중복되는 context 태그를 제거하면 됨.

 

여기까지 하고 나면 전에 돌려봤던 JSTL 예제가 Maven Project에서도 동작하는 걸 확인할 수 있다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함