JSP 12-1. Maven 사용한 Build

zhyun·2020년 12월 3일
3

JspSpring

목록 보기
17/39
post-thumbnail

maven

  • 전자정부프레임워크에서 기본적으로 maven 사용
  • 빌드와 배포를 위한 툴
  • 장점 : template프로젝트, jar파일 쉽게 가지고 놀 수 있다.

build

  • 소스개발에서 최종 사용자에게 전달될때까지의 전 과정
  • 프로젝트의 생명주기 전체를 아우르는 행위
    • 각각 단계 하나하나를 phase으로 쪼갠다
  • 프로젝트의 규모가 클수록 정형화된 개발환경, 다양한 라이브러리의 의존성 관리, 코드 품질 관리 및 결함 관리등의 필요성이 제기
    • WEB-INf lib 폴더안에 jar파일들을 쉽게 가져와서 손쉽게 관리
  • 전체 빌드과정은 그 주체에 따라 개인필드와 통합필드로 구성

소프트웨어 개발 프로젝트의 빌드 프로세스

1.개인필드

  • 개발자 개인의 PC에서 빌드를 하여 작동 가능한 코드를 생성
    [1] 개발자가 소스코드 작성
    [2] 개인 빌드를 통해 실행 가능한 바이너리 코드 생성
    [3] 정상 코드 여부를 판별한 후 형상 관리 서버로 작성한 코드 커밋

2.통합필드

  • 개발 서버에서 프로젝트 개발자들의 작성 코드를 통합하여 빌드를 수행
    [1] 개발서버는 형상관리 서버로부터 최신의 소스코드를 check out 받음
    [2] 주기적으로 자동 빌드 프로세서를 통해 코드 빌드 후 동작 가능한 소프트웨어 패키지 생성
    [3] 운영 서버로 패키징한 소프트웨어 배포

3. 운영서버의 WAS 재기동 작업을 통하여 작성한 소프트웨어를 실행


개인 빌드 툴 Maven

  • 메이븐은 프로젝트 객체 모델이라는 개념을 바탕으로 프로젝트 의존성관리, 라이브러리 관리, 프로젝트 생명 주기 관리 기능 등을 제공하는 프로젝트 관리 도구
  • 플러그인을 기반으로 소스 코드로부터 배포 가능한 산출물을 만들어 내는 빌드 기능 뿐만 아니라 래포팅 및 documentation 작성 등 프로젝트 라이프사이클 전반에 걸친 기능을 제공

Maven 설치

메이븐 설치
[1] 메이븐 설치 파일 다운로드

[2] maven설치

[3] 환경변수 설정

[4] 설치확인 cmd -> mvn -version

[5] 이클립스&메이븐 연동

중앙저장소

  • jar을 받을때 직접 다운로드 받지 않고
    한곳에 일괄적으로 관리하는 방법
  • local에 있는 저장소가 필요하다

maven 중앙저장소로 쓰는 웹

파생된 jar중 내가 쓸 jar 찾는 방법
아파치의 커먼스 io를 가져오는 예시


  • org.apach.commons가 아파치의 커먼스 io를 식별해서 가져오게 된다. 이렇게 중앙저장소에서 찾고자하는 jar를 식별해서 찾는것이 1단계
  • 2단계로 필요한것은 가져온 jar를 저장할 로컬 저장소가 필요

window 메뉴 -> Preferences -> Maven -> Installations -> Add -> %M2_HOME%

window 메뉴 -> Preferences -> Maven -> User settings -> open file -> Local Repository 위치 설정

open_file -> settings.xml, loaclRepository 경로 확인

  • 위에 지정한 경로가 로컬 저장소가 된다.
  • 로컬 저장소 .m2폴더 생성됨
  • 이클립스에서 indexing 작업을 한 이유는 검색해서 jar파일 쉽게 갖다 쓰려고

maven프로젝트 생성

standalon으로 maven사용 버전


  • Create a simple project (skip archetype selection) 체크
  • 우리가 만든 프로젝트를 Maven에 넣어야 함
  • Group Id는 베이스 & Artifact id는 제품이름
  • Packagingstandalone - jar , 웹어플리케이션 - war로선택

Maven이 제공해주는 템플릿 프로젝트를 만들고 각 phase를 지원할 수 있는 플러그인을 받아온다. 만들어진 프로젝트는 로컬저장소에 저장된다.

  • 자동으로 local레파지토리에 생성되어진다.
  • 자동으로 만들어진 구조 -- 템플릿
  • 주개발영역 src/main/java, src/main/resources
  • 자바코드는 java.src와 같다고 보면 된다.
  • src/test/java, src/test/resources
  • main메서드 역할 -- 내가 짠 코드가 안정적으로 잘 돌아가는지 확인 및 지원해줌
  • 운영서버로 배포할땐 테스트코드들은 제외

  • 사실 프로젝트가 만들어질때 위와 같이 생성
  • 이 구역은 개발자가 건드리는 영역은 아님
    이 구역에서 실행시 프로그램은 인지하지 못함

  • 이구역이 개발자 영역 -- 자동으로 컴파일
  • 클래스패스 2가지로 쪼개짐 -- Navigator에서만 보임


Maven에선 모든것을 POM으로 관리한다.
하나의 프로젝트를 관리할때 이를 객체형태로 로딩하는데 각 행동이라는 단계를 phase라고 하고 아래 5개가 pahse

소스라는 산출물이 나오면 이를 판별하고 파일이 만들어지고 마지막으로 패키징한다. 각 과정마다 지원하는 플러그인이 다름

이 그림에서 구별시킴

  • 제너릭 생략은 1.7이후부터 가능한데 컴파일 되지 않은 이유는 현재 maven은 1.5버전은 컴파일되어지고 있음
    • 다른버전(1.7)을 사용해줘라고 compiler 플러그인에 전달 -- POM.xml에 설정

  • 중앙저장소에서 봤던 정보들
  • maven을 통해 컴파일을 할 수 있는 문장
  • 이를 포함한 플러그인의 재설정이 필요
  • 프로젝트 -> Maven -> Add Plugin

  • 3.8.1 버전의 컴파일러가 적용됨
  • xml코드를 build 스크립트라고 함
  • build스크립트 추가됨
    • configuration 추가 1.8로!

  • Maven이 수시로 xml을 읽으면 IO가 걸려 부화가 걸린다. 그래서 프로젝트 Update를 해줘야한다..
  • 1.8로 바껴있음!

maven 두번째 기능 '의존성'

  • 자르파일 찾기 쉽다.


    네트워크 상황에 따라 검색이 늦을수도 있다.
    이 경우에는 직접 중앙저장소에 검색한다.


    오른쪽에 있는 xml코드를 copy
  • Add Dependency -> 중앙저장소 검색해서 OK하면 자동으로 추가가 되고 아니면 복사한 xml코드를 붙여넣기 하면 된다

    Maven Dependencies에 commons-lang3-3.11.jar 추가되있음

우리가 이전에 작업한 소스, 자바독을 인스톨레이션에 설정했던 부분이 필요없다.
마샬링 또한 잭슨이라는 라이브러리가 필요했는데


UI로도 추가 가능하다.

우리가 필요한건 jar인데 bundle이 있다
선택하고 OK

타입을 지워주고 저장하면 jar가 들어간다.
중앙저장소에서 검색해도 잘 안나오면
Maven저장소 사이트2
이 사이트에 접속해 검색한다

스크립트 copy->save 의존성 관리 가능

빌드 방법


원래 HelloMaven.class가 있었는데


clean으로 Goals를 설정해주면


HelloMaven.class 사라져있다

같은기능


Goal : complie로 설정


complie ->> 빌드 끝
이제 압축(패키징)이 필요하다



자동으로 플러그인을 받아오는데

컴파일 되는것을 볼수있다
이는 공정단계에서 필요한 단계이기때문에

일단 테스트에 에러가 없는지 확인후 공정이 진행


웹어플리케이션용 메이븐 사용


체크

Packaging : war 선택

기본 다이나믹웹과 비슷한데 이상한 점은 WebContent폴더가 없다

바로 이곳이 WebContent와 같은 역할을 한다
html css js image들을 이쪽에 넣는다

그런데 web.xml이 없어서 에러가 나있다

xml이 없다면 true로 설정하라고 설명

Effective POM을 보면 웹구조를 만들어주는 플러그인이 이 플러그인데, 이 플러그인을 넣어줘야한다

또한 버전도 바꿔줘야한다.



업데이트 프로젝트
이런식으로 프로퍼티를 이용할 수도 있다
그럼 버전만 설정해주면 된다


업데이트까지 완료하면 에러는 사라진다
web.xml을 사용안하려면 이녀석이 3점대여야함
지금은 2.5

프로젝트 alt+enter -> project facets
Dynamic Web Module 3.1버전으로 변경
적용해도 바뀌진 않는다
강제로 읽을 수 있도록 해준다


xml이 만들어짐

ctrl+shift+F
web.xml을 delete하면 3.1로 바뀌어져있다

이후 한번 더 하면

3.1로 바뀐걸 볼 수 있다

근데 아파치 톰캣이 없다
pom.xml에 넣자



pom.xml, Maven Dependencies에 추가댐 근데 개발할땐 얘를 사용해야한다

<scope>provided</scope> 추가
앞으로 이 컴파일 스코프를 가장 많이 이용함
provided는 배포시에 버리겠다는 뜻


참고
얘는 테스트용이며 배포가 되지 않음

이 둘에서만 가능

얘넨 불가 이게 스코프를 쓰는 이유


다시 돌아가서
Scope: compile 을 provided로 바꾸고 OK -- 배포시에 버리겠다!

잠깐 Tomcat안에 있는 프로젝트 삭제하고 claen

webapp -01폴더 생성 - sample.jsp 생성


컨텍스트패스가 저렇게 잡힌다

lib가 없다

근데 이클립스내부서버에는 있다

얘는 비어있다

pom.xml에서 설정한 jar는 들어가있는데
나머지 두개를 provided로 적용되어서 배포가 안된걸 볼 수 있다

maven clean

maven install

타겟인데 war로 되어있음

이 war파일만 배포서버에 가져다 놓으면 완료

profile
HI :)

1개의 댓글

comment-user-thumbnail
2020년 12월 7일

너무 유용해요 두고두고 봐야겠어요 ~!!

답글 달기