기록해야 성장한다

Maven Basic 본문

TIL

Maven Basic

sodapapa-dev 2021. 10. 29. 17:01

 

프로젝트 빌드 도구. 이클립스와 같은 IDE와 다른 빌드 도구이다.

각 Phase를 갖는다.

Phase는 Phase:plugin:goal을 갖는다.

상위의 Phase를 실행하면 하위의 Phase는 자동으로 실행된다.

출처 : https://youtu.be/VAp0n9DmeEA


빌드툴과 IDE의 차이. 빌드를 도와주는 역할자 - 편집의 기능은 없음.

이클립스에서 프로젝트를 생성하는 것보다 메이븐으로 생성하는 것이 생산성 측면에서 더 나음.

maven.apache.org에서 bin 파일을 받음. 환경변수로 설정하여 cmd에서 사용할 있도록 함. M2_HOME="압축을 푼 ROOT 경로" path에 변수를 등록 => %M2_HOME%\bin

메이븐 프로젝트 생성 명령어. mvn archetype:generate -DgroupId=com.newlecture -Dartifactid=javaprj -DarchetypeArtifactId=maven-archetype-quickstart

interactive mode로 각 프로젝트의 기본정보를 입력

maven Project는 항상 pom.xml이 있는 곳이 root가 된다.

mvn compile - C:\DEV_STUDY\maven\javaprj\target\classes 하위에 컴파일된 class 파일들이 생성된다.

mvn package - .jar 파일을 생성

jar 파일의 실행 java -cp target\javaprj-1.0-SNAPSHOT.jar com.newlecture.App

-cp는 classPath를 등록하는 명령어.

build Lifecycle 만약에 compile을 실행하게 되면 이전에 플러그인이 존재하는 각 phase들을 모두 실행하게 된다.

pom = Project Object Model

mvn help:describe -Dcmd=compile

메이븐이 가지고 있는 명령어들은 결국 각 단계를 의미한다.

각 phase들을 구성하는 프로그램들은 플러그인이라는 이름으로 구성된다.

그안에는 골(Goal)이라는 것이 있다.

6강 메이븐 프로젝트를 이클립스에 임포트하기.

기존의 프로젝트를 Import 함

pom 파일이 있는 폴더가 root가 된다.

이클립스와 연결된 것이 아니라 메이븐과 연결되어 구성된 프로젝트이기 떄문에 어디서든지 Import가 가능하다.

7강 - 컴파일 플러그인으로 JDK 버전 변경하기

pom.xml 파일에서 플러그인의 버전이나 기타 정보들을 수정할 수 있다.

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

단순히 JDK 버전만을 수정하는 것은 Properties에서도 가능하다.

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

8강 - 웹 프로젝트로 변경하기

jar to war

pom.xml에서 package를 war로 변경한다.

그러면 web.xml 존재하지 않는 다는 에러가 발생한다.

web.xml is missing and failonmissingwebxml is set to true

아래 디렉토리에 tomcat의 web.xml 추가한다.

\apache-tomcat-9.0.33-windows-x64\apache-tomcat-9.0.33\webapps\ROOT\WEB-INF\web.xml /javaprj/src/main/webapp/WEB-INF/web.xml

그후 welcome page를 추가한다.

/javaprj/src/main/webapp/index.html

tomcat을 실행하고 브라우저로 접속해서 확인한다.

9강 - 서블릿/JSP 라이브러리 설정하기

webapp/index.jsp 를 추가한다.

jsp에서 http/httpservlet이 존재하지 않는 다는 에러가 발생하게 된다.

The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

방법 1. build path에 현재 프로젝트에서 사용중인 tomcat의 라이브러리를 추가한다.

그러나 이렇게 라이브러리를 추가하게 되면 개발환경이 변경될 때 마다 라이브러리를 새로 추가해줘야한다.

maven Lib 저장소 이미지

방법 2.pom.xml에다가 dependency를 추가한다.

버전 선택방법은 현재 사용중인 tomcat이 reference 하는 jsp의 버전을 추가한다.

org.apache.tomcattomcat-jsp-api9.0.33

10강 - 라이브러리 오류 문제

다운로드를 하다가 링크가 깨지면 에러가 발생함.

간혹 class Not Found Exception 에러가 발생하게됨. maven update를 해봐도 이상이 없음.

이런 경우에 문제를 해결하기.

project explore에서 maven repository를 확인하는 데 해당 jar 파일은 존재하지만 해당 jar 하위에 내용물에 아무것도 존재하지 않는 경우가 있다.

이 경우 해결 방법은 local maven 저정소에 repository 하위의 내용을 전부 삭제한다.(어떤 파일이 문제가 있을 지 모르니까)

이떄 주의할 점은 현재 활성화 되어 있는 이클립스를 모조리 종료 후에 해당 폴더들을 삭제해야한다.

C:\Users\hong\.m2\repository

현재 노트북에서는 이 디렉토리가 해당되게 된다.

레퍼지토리를 모두 삭제한 후에 이클립스를 다시 실행하면 자동으로 maven lib들을 다운로드하게 된다.

11강 - 라이브러리 인덱싱 검색

lib를 추가할 때 매번 웹에 존재하는 remote repository에서 검색을 하고 라이브러리를 추가해야하는 가?

이클립스에서 메이븐을 사용하면 매번 그렇게 추가해줄 필요는 없다.

pom.xml의 dependencies tab의 add로 추가해줄 수 있다.

이 검색 방법은 remote repository의 정보를 local에 index build를 해야지 사용할 수 있다.(다운로드 오래걸림 - 구지 내프로젝트에 사용해야되는 지는 미지수? )

12강 - mvn install : 내가 만든 라이브러리 설치하기

새로운 프로젝트 추가 후 run as -> maven install 하게되면 위에 설명했던 maven local repository에 jar 파일이 lib형태로 생성된다.

이렇게 생성된 lib를 기존에 작업중인 project에서 사용하기 위해서는 add dependency 하면 된다.

그전에 local maven repository의 내용을 rebuild index 해줘야한다.

rebuild 후에 select dependency 팝업에서 검색을 해보면 새롭게 추가된 lib가 검색이 된다.

이렇게 dependency를 추가해주면 local maven repository에 등록되어 있는 라이브러리를 사용할 수 있게 된것이다.

이후에 내가 만든 라이브러리를 remote repository에 추가하고 싶다면 deploy Phase까지 진행해야한다.

추가적으로 실습해볼 내용

현재 회사에서 사용하고 있는 프레임 워크 구조를 archetype으로 등록하여 프로젝트를 생성할 때 기존의 프로젝트를 복붙하는 것이 아니라 maven generate 하는 방식으로 생생해보자.

메일발송이나 엑셀 다운로드 업로드등의 기본적인 구조를 기존의 라이브러리를 가지고 개발하기 보다는 내가 진행하는 프로젝트의 상황에 맞게 변경된 내용으로 라이러리를 만들어서 사용해보자.

반응형

'TIL' 카테고리의 다른 글

대댓글 MySql 스키마  (0) 2021.10.29
자바 게시판 욕설, 금지어 필터링  (0) 2021.10.29
http 기초  (0) 2020.02.24
Explain 정보보는법  (0) 2019.06.13
log4j 로그레벨  (0) 2019.05.22
Comments