Create Maven Project
by choising
Maven
- Maven : 프로젝트 관리 도구, 빌드 도구.
- 빌드, 패키징, 문서화, 테스트/테스트 리포팅, git, 형상관리서버와 연동(SCMs), 배포 등의 작업 지원
- Maven을 사용한다는 것은 CoC에 대해서 알아나가는 것이다.
- CoC(Convention over Configuration)
- 일종의 관습.
- 예를 들자면 소스파일의 위치나 컴파일된 파일의 위치 등을 정해놓은 것.
- 대표적인 장점은 편리한 의존성 라이브러리 관리
- Maven에 설정한 대로 모든 개발자가 일관된 방식으로 빌드를 수행할 수 있게 된다.
- pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.github.oraindrop</groupId>
<artifactId>mavenweb</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>mavenweb Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
TAG | DESC |
---|---|
project | pom.xml 파일의 최상위 root element |
modelVersion | POM model version |
groupId | 프로젝트를 생성하는 조직의 고유아이디. 일반적으로 도메인 이름을 거꾸로 표기 |
artifactId | 해당 프로젝트에 의하여 생성되는 artifcat의 고유아이디 |
packaging | 해당 프로젝트를 어떤 형태로 패키징 할 것인지 결정. jar, war, ear 등 |
version | 프로젝트의 현재 버전. 프로젝트가 개발 중 일 때는 SNAPSHOT을 접미사로 사용 |
name | 프로젝트 이름 |
url | 프로젝트 사이트가 있다면 사이트 URL을 등록 가능 |
- 위 pom.xml 파일에서
<dependencies>
element가 Maven의 Dependency Management 기능의 핵심- 해당 element 안에 필요한 라이브러리를 명시하게 된다.
- 해당 element 안에 필요한 라이브러리를 명시하게 된다.
Eclipse에서 Maven Project생성.
- 웹어플리케이션을 생성할 것이므로 Artifact Id
maven-archetype-webapp
인 애로 프로젝트를 생성한다. - 아키타입(Archetype)은 일종의 프로젝트 템플릿.
- 어떤 아키타입을 선택했느냐에 따라 자동으로 여러 파일들을 생성하거나 라이브러리를 세팅함.
- 어떤 아키타입을 선택했느냐에 따라 자동으로 여러 파일들을 생성하거나 라이브러리를 세팅함.
1) Java Compiler 설정.
- Maven으로 프로젝트를 생성하면 기본적으로 JDK 1.5를 사용한다.
- JDK8을 사용하고 싶으므로 pom.xml의
<build>
element를 수정한다.
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
project properties의 Maven Tap의 Java EE Integration항목의 Enable Project Specific Settings
를 Check.
project properties에서 Java Compiler 버전이 1.8로 설정된 것을 확인할 수 있다.
2) WAS 설정.
- WAS의 서블릿 라이브러리를 사용하고 싶으므로
- pom.xml의
<dependency>
element를 수정한다.
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
scope element는 다음과 같은 4가지 속성이 존재.
scope | DESC |
---|---|
compile | 컴파일 할 때 필요. 테스트 및 런타임에도 클래스 패스에 포함. Default 값. |
runtime | 런타임에 필요(ex. JDBC Driver 등). 컴파일 시 필요하지 않지만 실행 시에 필요한 경우. |
provided | 컴파일 시에 필요하지만, 실제 런타임 때에는 컨테이너 등에서 제공되는 모듈(ex. servlet, jsp api 등). 배포 시 제외된다. |
test | 테스트 코드를 컴파일 시 필요. 테스트 시 클래스 패스에 포함되며, 배포 시 제외된다. |
3) JSTL Library 설정.
- pom.xml
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
- Maven Project의 다이나믹 웹 모듈 버전은 Defalut 2.3 이다.
- 다이나믹 웹 모듈 2.4부터 EL이 기본으로 사용될 수 있기에, 다이나믹 웹 모듈 3.1이 되도록 설정해야 한다.
4) 다이나믹 웹 모듈 버전 설정.
- WEB-INF/web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>
위 xml 소스가 default 값이다. 아래와 같이 변경한다.
<?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="2.3"/>
...
위 xml 소스가 default 값이다. jst.web의 version을 3.1로 수정한다.
project properties의 project facets 항목의 다이나믹 웹 모듈버전이 3.1로 변경된 것을 확인한다.
5) Run on Server.
- 이클립스의 버그로, 수정되기 전의 데이터와 수정된 데이터가 섞여 오류가 발생할 확률이 높다.
- 해결 과정.
- project 우측클릭 > Maven 메뉴 > update project.
- Servers view에서 기존 Tomcat Runtime을 삭제
- Project 메뉴의 Clean.
- 프로젝트 익스플로러에서 Server 삭제
- 이후 재실행 시 결과가 정상적으로 출력.
Subscribe via RSS