🔅메이븐이란?
메이븐은 프로젝트를 생성도 해주고, 라이브러리 설정, 코드작업, 컴파일, 테스트, 패키지 만들기, 인스톨, 배포, 레포팅을 해주는 빌드 소프트웨어이다. 빌드란 개발자가 작성한 java 파일을 기계, 즉 톰캣이나 JVM이 이해할 수 있는 기계어(class 파일)로 변환하는 작업이고, 빌드 도구란 메이븐 같이 프로젝트를 생성부터 배포까지 도와주는 소프트웨어다.
🔅메이븐 프로젝트 생성
mavenTestProject 폴더를 생성하고 그곳에 mvn 명령어로 maven 프로젝트를 생성한다.
mkdir mavenTestProject
cd mavenTestProject
mvn archetype:generate -Dgroup=com.first.mavenapp -DartifactId=realMaven -DarchetypeArtifactId=maven-archetype-quickstart
✅프로젝트 구조 템플릿:maven-archetype-quickstart
✅프로젝트명:realMaven
✅그룹 식별자 : com.first.mavenapp
메이븐 저장소에서 필요한 라이브러리들을 다운로드하기 때문에 인터넷에 연결이되어 있어야한다. 빌드가 종료되면 위 그림처럼 realMaven 이라는 폴더가 생겼고, 그 안으로 pom.xml이 생성된 것을 볼 수 있다. 그리고 아래 경로에 App.java 라는 main java 파일이 들어 있다.
/mavenTestProject/realMaven/src/main/java/com/first/mavenapp
🔅메이븐 컴파일
mvn compile 명령어로 메이븐 컴파일을 진행한다. 위치는 위에서 생성한 메이븐 프로젝트 안에서 명령어를 실행해야 한다. pom.xml이 있는 곳이다.
/mavenTestProject/realMaven# mvn compile
메이븐 컴파일이 성공적으로 마치면 target 폴더가 생성된다. 이 폴더를 타고 들어가보면 마지막에 아래와 같은 경로에 위에서 생성한 App.java파일이 컴파일 된 결과물인 App.class 파일이 있는것을 볼 수 있다.
mavenTestProject/realMaven/target/classes/com/first/mavenapp# ls
App.class
🔅메이븐 패키징
이번에는 프로젝트를 배포하기 위해 포장하는 작업인 패키징 명령어를 알아 보자. 위에서 컴파일한 내용들. 즉, 여러 class 파일들을 모아서 하나의 압축파일로 만든다고 생각하면 된다. 명령어는 아래와 같다. realMaven 폴더 안에서 mvn package 명령어를 실행한 후 target 폴더로 가서 jar 확장자로 끝나는 파일이 생성되었는지 확인한다. 이 jar 파일안에 class 파일들이 들어 있다. 이 jar 확장자를 zip으로 바꾼 후, 윈도우나 mac에서 열어서 확인해보면 컴파일된 class 파일이 mavenTestProject/realMaven/target/classes/com/first/mavenapp 경로에 존재하는 것을 알 수 있다.
~/mavenTestProject/realMaven# mvn package
~/mavenTestProject/realMaven# cd target
~/mavenTestProject/realMaven/target# ls
classes maven-archiver maven-status realMaven-1.0.jar surefire-reports test-classes
🔅메이븐 프로젝트 실행
패키징된 메이븐 jar 파일을 실행할려면 프로젝트 폴더(realMaven) 안에서 아래와 같은 명령어를 작성하면 된다.
~/mavenTestProject/realMaven# java -cp target/realMaven-1.0.jar com.first.mavenapp.App
Hello World!
결과로 Hello World! 가 출력된것을 볼 수 있다.
🔅메이븐 빌드 라이프 사이클
메이븐은 여러가지 수행 단계들이 있다. compile 명령을 수행하면 앞의 generate-sources 명령까지 수행한 후에 compile 명령이 실행되는 구조다. 또 install 명령을 실행하면 install 명령 앞에 존재하는 명령어들을 수행한 후에 마지막으로 install을 진행하는 구조다. 그래서 실행하고자 하는 단계에 해당하는 명령어만 적어주면 된다. 각 단계는 pom.xml에 존재하는<packaging> 태그에 기입하는 내용에따라 달라진다. (war 또는 jar 등). 또한 그림을 보면 단계별 실행을 담당하는 플러그인들이 존재한다. 이 단계들을 어려운 말로 Phase 라고 하는데 이 Phase 들은 하나의 담당 플러그인(라이브러리)을 가지고 있다. 아래 명령어로 compile에 해당하는 라이브러리가 있는지 각 단계에 해당하는 플러그인들이 저장되어 있는지 확인 할 수 있다
mvn help:describe -Dcmd=compile
출력 내용은 아래와 같다.
POM 패키징 'pom'의 수명주기의 일부입니다.이 수명주기에는 다음 단계가 포함됩니다.
* validate: Not defined
* initialize: Not defined
* generate-sources: Not defined
* process-sources: Not defined
* generate-resources: Not defined
* process-resources: Not defined
* compile: Not defined
* process-classes: Not defined
* generate-test-sources: Not defined
* process-test-sources: Not defined
* generate-test-resources: Not defined
* process-test-resources: Not defined
* test-compile: Not defined
* process-test-classes: Not defined
* test: Not defined
* prepare-package: Not defined
* package: Not defined
* pre-integration-test: Not defined
* integration-test: Not defined
* post-integration-test: Not defined
* verify: Not defined
* install: org.apache.maven.plugins:maven-install-plugin:2.5.2:install
* deploy: org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy
🔅스프링 STS로 메이븐 프로젝트 Import
Import -> maven -> Existing Maven projects 선택 -> browse... -> 메이븐 프로젝트(realMaven) 선택 (pom.xml 체크)
🔅컴파일러 플러그인 변경
위에서 생성한 메이븐 퀵스타트 버전은 기본 jdk 버전이 1.5이다. jdk를 변경을 할려면 아래와 같은 플러그인을 넣어준다. (컴파일옵션 변경하기)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
위 처럼 기존의 컴파일러 플러그인을 변경 가능하고 각기 다른 수행단계에 해당하는 플러그인도 변경이 가능능하다. pom.xml을 수정했으면 프로젝트 우클릭 후 Maven 선택, update Project를 클릭해서 프로젝트를 업데이트 해준다.
🔅자바 프로젝트에서 웹프로젝트로 변경
pom.xml에 존재하는<packaging> 태그 안을 jar 에서 war로 수정하면 자바 프로젝트 폴더 구조를 메이븐이 웹프로젝트 폴더 구조로 자동으로 만들어 준다. war로 변경 후 메이븐 프로젝트 업데이트를 하면 pom.xml에서 오류가 발생한다. web.xml 파일이 없기 때문이다. 웹프로젝트는 무조건 webapp폴더 아래 -> WEB-INF폴더아래 -> web.xml 파일이 존재해야 한다. 지금은 톰캣 설치 경로에 webapps 폴더 안에 ROOT 폴더 안에 있는 web.xml을 복사해서 사용해도 무방하다.
톰캣 경로에 있는 ROOT 폴더안에서 WEB-INF 폴더와 web.xml 파일을 복사해서 메이븐 프로젝트의 webapp 폴더 아래 넣어주었다. 그리고 webapp 폴더안에 main.html 만들어주고 톰캣을 작동시켜주면, 브라우저에 오른족 화면과 같이 main.html 내용이 출력된다.
🔅서블릿/jsp 라이브러리 설정하기
이번에는 webapp 폴더에 jsp 파일을 넣어보자. main.jsp 파일을 넣으면 jsp 페이지에서 오류가 난다. javax.servlet.http.HttpServlet 라이브러리가 없다는 오류이다. 해결하기 위해 프로젝트 우클릭 -> 빌드 패스 -> addLibary -> serverRuntime- > tomcat을 선택한다. tomcat을 라이브러리로 사용하겠다라고 지정해줘도 된다. 톰켓이 설치된 경로에에 lib 폴더에 servlet jar, jsp-api.jar 등 서블릿과 jsp 등에 관련된 라이브러리들이 있기 때문이다. 문제는 로컬 pc에 있는 톰캣 라이브러리를 참조시켜주면 현재 pc에서는 라이브러리 의존성 문제가 해결될지 몰라도, 만약 이 프로젝트를 다른 컴퓨터에 옮겼을 때는 톰캣 라이브러리 경로를 다시 설정해주거나, 톰캣이 없으면 다시 톰캣을 설치한다음 라이브러리를 참조시켜줘야하는 번거로움이 있다.
그래서 메이븐 프로젝트에서는 라이브러리 참조를 pom.xml에 작성을 한다.
pom.xml 로 가보면<dependencies> 태그가 있다.이 태그에 필요한 라이브러리를 작성하면 메이븐은 메이븐 리파지토리에서 다운로드를 진행해서 필요한 하위 라이브러리들도 자동으로 의존성을 맞춰준다. 다운로드된 라이브러리들은 로컬pc에 home경로/.m2/repository 경로에 라이브러리들이 저장된다.이 경로에 라이브러리들이 있어야지 이 라이브러리들을 참조해서 개발을 할 수 있다. 메이븐 리파지토리 홈페이지에 가서 필요한 라이브러리들을 검색할 수 있고, 톰캣 버전에 해당하는 라이브러리들을 찾고 싶으면 tomcat jsp 같이 검색어 앞에 tomcat을 붙여서 검색을 할 수도 있다.
🔅메이븐 라이브러리 오류
가끔씩 pom.xml에 작성된 내용을 바탕으로 라이브러리를 다운로드 하다가 파일이 깨지거나 문제가 생길 수 있다. 이때는 좌측 네비게이션에서 Maven Dependencies 메뉴에서 항아리로된 jar 파일을 클릭해보자. 항아리 안에 아무것도 안들어있으면 라이브러리 파일에 문제가 생긴것이다. 전부 삭제했다가 다시 업데이트 프로젝트를 진행하면된다.
🔅로컬 메이븐 리파지토리에 배포
maven install 명령어는 내가 만든 프로젝트를 나의 로컬 메이븐 리파지토리에 jar 형태로 배포하는 명령어이다. 프로젝트를 우클릭 한 후에 Run -> maven install 메뉴를 클릭하면 나의 프로젝트가 jar 파일로 압축되어 .m2 경로에 배포된다. 메이븐 중앙 저장소에 배포할려면 maven deploy명령어를 사용하면된다. 이때는 메이븐 계정이 필요하다.
참고: 뉴렉 메이븐 강좌
'리눅스&서버 > 우분투' 카테고리의 다른 글
Apache Tomcat 연동&mod_jk 설정 (0) | 2021.02.15 |
---|---|
mac VirturBox 네트워크 설정(ssh 외부접속) (0) | 2021.02.14 |
우분투 - 스프링 프로젝트 메이븐 빌드 톰캣 배포 (0) | 2020.11.24 |
우분투 - Maven 설치(환경변수 설정) (0) | 2020.11.23 |
우분투 - 젠킨스 설치 (0) | 2020.11.22 |