뉴렉처 메이븐
IDE : 이클립스, IntelliJ, Visual Studio Code
개발환경을 총 망라한 개발툴로 편집기, 컴파일러, 탐색기, 편집기, 콘솔, 디버거,빌드툴 등 포함
형상관리(버전관리)툴 : Git, CVS
테스트툴 : JUnit
빌드툴 : 메이븐, Gradle, Ant

메이븐 설치, 환경설정 후 E드라이브에 maven폴더를 만들었음
메이븐 프로젝트를 생성하기 위해 E드라이브로 이동
e:
cd maven
dir을 통해 디렉터리 안의 내용 확인
이클립스로 프로젝트를 만들면 이클립스의 템프릿 가지고 만들어짐
메이븐은 내가 자주만드는 형태를 정해놓고 거기서부터 프로젝트가 실행될 수 있도록 함
이런 기본 타입을 archetype이라 하고, 어딘가에 공유할 수 있음.
다른 사람이 이를 모태로 프로젝트로 만들 수 있음.
프로젝트 생성 명령어
mvn archetype:generate -DgroupId=com.newlecture-DartifactId=javaprj -DarchetypeArtifactId=maven-archetype-quickstart
1. mvn archetecture type을 만든다
2. 프로젝트(ArtifactId)의 이름은 "javaprj"이고, 내 프로젝트를 식별하기 위한 그룹명은 com.newlecture
- 프로젝트명의 중복을 피하기 위해 groupId=com.newlecture로 나만의 도메인주소 사용
- 보통은 newlecture.com이지만 뒤집어서 큰것부터 com.newlecture
3."quickstart"라는 다른 사람이 만든 maven-archetype-qiuckstart라는 프로젝트 구조를 기본으로 만들겠다
- 자바개발에 사용되는 기본 템플릿

artifactId : 프로젝트명
version: 1.0-snapshot 현재 개발 중이면 그냥 enter | 개발완료했다면 1.0 입력
Y : 엔터치면 빌드 성공
pom.xml이 있는 디렉토리에서 컴파일
편집기는 visual studio code 사용했음
- 컴파일 과정에서 오류가 발생하면 pom.xml 설정 들어가서 maven. jdk 버전을 1.8으로 바꾸는 것 추가

mvn compile : 컴파일 명령어
mvn package : jar파일 만들어줌 (배포판)
- Building jar: E:\maven\javaprj\target\javaprj-1.0-SNAPSHOT.jar
- 속을 들여다보고 싶으면 jar의 확장자 zip으로 바꾸고 들어가볼 수 있음
- 그 안에 App.class존재
- jar파일 실행하기 : java -cp target\javaprj-1.0.SNAPSHOT.jar com.newlecture.App
- cp : target\javaprj-1.0.SNAPSHOT.jar을 class path로 지정
- E:\maven\javaprj>java -cp target\javaprj-1.0-SNAPSHOT.jar com.newlecture.App
메이븐의 Build LifeCycle과 Phase들
하나의 단계 명령어 입력한다면 앞의 단계는 자동으로 실행됨maven package 하면 그 단계까지 자동실행
단계별 실행을 담당하는 플러그인 존재
- 모든 단계가 다 실행되는 건 아니고, 해당 단계를 실행하는 데 필요한 단계까지만 자동실행
- 플러그인 : 각 단계를 실행할 때 사용되는 프로그램
- 몇몇 단계들은 플러그인이 연결되지 않은 상태인데, pom.xml에서 설정가능
- 즉 교체, 수정이 자유로움
- Goal : 플러그인의 작은 구성단계들
- mvn help:describe -Dcmd=compile로 매핑 내용 볼 수 있음
- maven.apache.org/Maven Plugins에서 다운받아 설정 가능

<phases>
<phase>validate</phase>
<phase>initialize</phase>
<phase>generate-sources</phase>
<phase>process-sources</phase>
<phase>generate-resources</phase>
<phase>process-sources</phase>
<phase>compile</phase>
<phase>process-classes</phase>
<phase>generate-test-sources</phase>
<phase>process-test-sources</phase>
<phase>generate-test-resources</phase>
<phase>process-test-resources</phase>
<phase>test-compile</phase>
<phase>process-test-classes</phase>
<phase>test</phase>
<phase>prepare-package</phase>
<phase>pre-integration-test</phase>
<phase>integration-test</phase>
<phase>post-integration-test</phase>
<phase>verify</phase>
<phase>install</phase> <!--로컬 리파지터리에 만든 artifact옮김 -->
<phase>deploy</pahse> <!--원격저장소에 놓고 다른 개발자들과 공동 사용 -->
</phases>
자바개발인지, 웹개발인지에 따라 단계가 좀 다른데 패키징은 pom.xml에서 변경 가능
<packaging>jar</packaging>
- POM : Project Object Model, 프로젝트를 구성하고 있는 내용을 하나의 모델로 가지고 있음
- 따라서 pom.xml을 변경하면 프로젝트가 변경됨
- 자바프로젝트 jar과 웹프로젝트 war을 가장 많이 사용
메이븐 프로젝트 이클립스와 연동하기
cmd를 통해 만든 메이븐 프로젝트를 이클립스에서 import해서 사용

컴파일 플러그인으로 JDK 버전 변경
maven.apache.org/plugins에서 각각의 플러그인 내용 확인
compiler
- compile, testCompile 두개의 Goal로 구성
- goal이 실질적인 역할 담당
pom.xml에서 설정
- quickstart의 기본 jdk 버전은 1.5인데 1.8로 올려주고 싶을때
- 방법1 : 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>
- 방법2: compiler-plugin의 버전이 3.6이상부터는 꼭 플러그인 설정을 오버라이드 하듯이 할 필요없고 좀더 간단하게 설정 가능
- 플러그인이 가지고 있는 다양한 옵션을 선택하려면 방법1 필요, 그러나 단순히 버전만 수정하고 싶으면 방법2로 충분함
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
메이븐 프로젝트
mvn archetype:generate
- 프로젝트 생성 시 모델로 할 수 있는 타입 보기
- 2000여개의 목록 볼 수 있음
- 정의하지 않으면 maven-archetype-quickstart [남의 거 쓰지 않고 맨땅에 만들겠다]
메이븐 자바프로젝트를 웹프로젝트로 변경하기
pom.xml

- <packaging>jar</packaging>에서 jar을 war로 변경 (Web Application Archive)
- 프로젝트 우클릭 - maven - update Maven Proejct
- src/main/webapp(홈) 등 디렉토리 구조 변경됨
- web.xml파일이 추가해야 함 : webapp/WEB-INF 폴더추가
- web.xml파일 톰캣의 web.xml 복붙
서블릿/JSP 라이브러리 설정하기
jsp파일 만들면 build Path 해야하는 오류 발생
보통은 Add library해서 server-tomcat추가함그런데 이때, Tomcat 저장경로가 작업 환경마다 다르기 때문에 같은 파일을 import해서 다른 컴퓨터에서 작업하려고 하면그때마다 path를 재설정해줘야하는 번거로움이 있음
이를 해결하는 것이 Maven
메이븐의 원격 저장소에 수많은 라이브러리가 존재프로젝트를 개발할 때 단순히 pom.xml파일에 어떤 라이브러리가 필요한지 DI하면 끝남프로젝트마다 개별적으로 라이브러리를 포함할 필요없고, 중복을 피할 수 있음(원격저장소에서 같은 로컬에다 모아놓기 때문에)

Maven Repository에서 "tomcat JSP"로 검색해서톰캣 버전에 따른 필요한 라이브러리를 가져올 수 있음

라이브러리 오류 문제
라이브러리 모두 포함 시켰는데도 실행 오류가 나는 경우 존재
Maven Dependencies 목록에서 클릭하면 제대로 다운로드되었다면 그 안의 내용이 열리는 것이 정상
안된다면 파일이 깨진 것
이클립스를 일단 모두 끄고
뭐가 깨졌는지 모르기 때문에 .m2/repository안의 모든 파일 삭제
이클립스가 필요한 파일을 자동 다운로드함
mvn install : 내가 만든 라이브러리 설치하기
jar파일로 만들기 : export - Java -Jar file로 할 수 있지만,
- 바로 m2.\repository에 넣고 싶다면 프로젝트 우클릭 - Run as - Maven install
- local Repository - rebuild
- javaprj/pom.xml에서 add - 검색 후 추가
- 프로젝트가 포함되어있는 라이브러리를 가져올 경우 폴더 모양의 파일 Dependencies에 추가됨
- 다른 작업환경에서 사용한다면 다른 라이브러리처럼 병(?)모양으로 뜸
- import해서 객체생성해 다른 프로젝트의 클래스 등 사용 가능
Central Repository : 다른 사람들과 저장소를 같이 쓰고 싶을 때 deploy해야함, 메이븐 계정 필요