본문 바로가기
Road to Developer/edwith풀스택웹개발자

20. Maven; Library관리도구

by 구월에작은섬 2018. 7. 11.

Maven


Maven을 이해하려면 CoC(Convention over Configuration)라는 단어를 먼저 이해해야 합니다.

CoC란 일종의 관습을 말하는데, 예를 들자면 프로그램의 소스파일은 어떤 위치에 있어야 하고, 소스가 컴파일된 파일들은 어떤 위치에 있어야 하고 등을 미리 정해놨다는 것입니다.



Maven을 사용할 경우 얻게 되는 이점은?


Maven을 사용하게 되면, 장점으로 편리한 의존성 라이브러리 관리가 있습니다. 설정 파일에 몇 줄 적어줌으로써 직접 다운로드 받거나 하는 것을 하지 않아도 라이브러리를 사용할 수 있습니다. Maven에 설정한 대로 모든 개발자가 일관된 방식으로 빌드를 수행할 수 있게 됩니다. 또한 다양한 플러그인을 제공해줘서, 굉장히 많은 일들을 자동화시킬 수 있습니다.

Maven 을 이용할 경우 얻게 되는 큰 이점 중의 하나는 Dependency Management 기능입니다. pom.xml 파일에서 <dependencies/> 엘리먼트가 Dependency Management 기능의 핵심이라고 할 수 있습니다.해당 엘리먼트 안에 필요한 라이브러리를 지정하게 됩니다.


Referece about Pom.xml : https://maven.apache.org/guides/introduction/introduction-to-the-pom.html



이클립스에서 Maven Project 생성하기



Project Explorer에서 마우스 우클릭 New>Other>Maven Project





아래 사진처럼 체크해준 다음 Next클릭 





webapp부분을 클릭한 다음 Next 클릭





Group Id : URL주소를 거꾸로 적는 형식으로  작성.

Artifact ID : 제목입력





아래사진 같은 디렉토리가 생성될것이다.





java 1.8 버전을 사용하기 위해서, pom.xml 파일에 <build>부분을 다음과 같이 수정해 줄 것.


   
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<build>
    <finalName>webapp</finalName>
     <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>
  </build>
cs




webapp 프로젝트 우클릭 > Maven > Java EE Integration에 들어가서 Enable Project 옵션을 클릭


Apply and close






Java Compiler 에서 enable project option 클릭, apply and close로 자바 1.8버전이 사용된다.





pom.xml 에서 <dependency>를 다음처럼 추가해준다. 빨갛게 칠한 부분.


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
<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>com.tistory.marlinbar</groupId>
  <artifactId>webapp</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>webapp 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>
    <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>
  </dependencies>
cs


3.1.0 부분은 WAS의 서블릿라이브러리를 지정해주는 부분이다. scope 옵션은 참고하자.


compile : 컴파일 할 때 필요. 테스트 및 런타임에도 클래스 패스에 포함됩니다. scope 을 설정하지 않는 경우 기본값입니다.

runtime : 런타임에 필요. JDBC 드라이버 등이 예가 됩니다. 컴파일 시에는 필요하지 않지만, 실행 시에 필요한 경우입니다.

provided : 컴파일 시에 필요하지만, 실제 런타임 때에는 컨테이너 같은 것에서 제공되는 모듈. servlet, jsp api 등이 이에 해당. 배포 시 제외됩니다. 

test : 테스트 코드를 컴파일 할 때 필요. 테스트 시 클래스 패스에 포함되며, 배포 시 제외됩니다.


JSTL- 1.2라이브러리를 불러오는 부분도 함께 추가했다.




EL표기법은 2.4버전부터 사용가능하기 때문에 버전을 수정한다. WEB-INF 폴더의 web.xml파일을 수정하자.



web.xml을 아래 내용으로 바꿔준다.


1
2
3
4
5
<?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>
cs




프로젝트아래의 .settings/org.eclipse.wst.common.project.facet.core.xml 파일을 엽니다. version을 사진처럼 3.1로 수정한다.


숨겨져서 보이지 않는다면, Window -> Navigation -> Show View Menu -> Filters and Customization 에서 .*resources 파일 체크를 풀어준다.





프로젝트 우클릭 > run on server로 톰캣서버에서 작동한다.








'Road to Developer > edwith풀스택웹개발자' 카테고리의 다른 글

22. 자바스크립트 배열  (0) 2018.07.19
21. JDBC  (0) 2018.07.13
19. EL, JSTL  (0) 2018.07.11
18. scope  (0) 2018.07.10
17. redirect, forward  (0) 2018.07.10