메이븐

그래들, 메이븐과 같은 빌드툴이 나오게 된 이유는 무엇일까? 빌드툴에 대한 역사를 찍먹해보고 그래들의 장점을 알아보도록 하자아. 빌드툴이란 무엇인가? 자바 애플리케이션 개발과정을 살펴보면, 반복된 작업들이 있다는 것을 볼 수 있다. 이런 반복된 작업들 (정형화된 작업)을 자동화하기 위한 소프트웨어를 빌드툴 이라 한다. 소스코드(.java)를 컴파일하여 클래스 파일(.class) 파일 생성 코딩 규약에 맞게 작성했는지 확인 코드를 정적으로 해석 테스트를 하고 테스트 결과나 커버리지 측정 결과를 리포트로 출력 Javadoc과 같은 문서를 작성 클래스 파일과 리소스 파일을 패키징하여 압축파일을 만듬(.jar 혹은 .war) 압축 파일을 테스트 혹은 스테이징 환경에 배포 압축 파일을 저장소에 등록 으잉? 이클립..
메이븐은 하나의 프로젝트에서 여러 모듈을 관리할 수 있는 모듈 기능을 지원한다. (한 프로젝트가 여러 모듈을 가지면서 빌드를 한 번에 진행하는 방법) 여기서 필요한 개념인 아래의 3가지 기능을 알아보자 상속(inheritance) 집합(aggregation) 의존 관계(dependency) 상속 메이븐 설정파일이 기본으로 최상위 POM을 상속하듯이 프로젝트에서도 공통으로 사용하는 설정은 공통 POM파일을 만들어 관리하고 하위 모듈에서 이POM을 상속할 수 있다. 메이븐에서 상속기능을 사용하려면 부모POM에서 엘리먼트를 설정해야 한다. parent POM.xml 4.0.0 com.corn diary pom 1.0-SNAPSHOT .... child POM.xml ... com.corn diary 1.0-S..
속성 메이븐은 설정 파일에서 발생하는 중복 설정을 제거하기 위하여 속성 ( 엘리먼트)을 정의하고 설정 파일 전체에서 사용할 수 있다. 예를 들어 스트럿츠2, 스프링 프레임워크의 의존 관계 중복을 제거하려면 다음과 같이 설정할 수 있다. 2.1.8 3.0.1.RELEASE org.springframework spring-core ${spring.version} org.apache.struts struts2-core ${struts2.version} 엘리먼트에서 value 같은 형태로 정의 한후 ${property.name} 으로 접근이 가능하다. (개발자 정의 속성) 이 외에도 메이븐은 미리 예약되어 있는 속성이 있는데, pom/project 속성, settings 속성, 환경 변수 속성, 자바 시스템 속..
의존성 전이 메이븐에서 디펜던시가 걸려있는 라이브러리들은 그 라이브러리와 의존관계가 있는 라이브러리를 모두 다운받는다. 예를 들어 pom.xml에 junit라이브러리를 명시하였을 때, junit 프로젝트의 pom.xml dependency에 기술된 모든 라이브러리를 같이 다운받게된다. (junit에 필요한 라이브러리들을 같이 받아온다.) 메이븐은 의존성 전이에 대한 설정 변경을 지원한다. 의존성 중개(dependency mediation) 버전이 다른 두 개의 라이브러리가 의존 관계에 있다면 메이븐은 더 가까운 의존 관계에 있는 pom 설정 버전과 의존 관계를 가진다. A->B->C->D 2.0 버전, A->E->D 1.0 버전의 의존관계가 있을 경우, A프로젝트는 D 1.0 버전과 의존 관계를 가진다...
의존 라이브러리의 적용 스코프 메이븐은 사용하는 라이브러리 성격에 따라 스코프를 지정할 수 있다. Junit 은 테스트시에만 필요하고 실제 배포할 때는 필요없는 라이브러리이다. 각 라이브러리에 대한 스코프는 아래에 엘리먼트로 설정할 수 있다. Junit 라이브러리를 테스트 스코프에서만 의존 관계를 갖도록 설정할 수 있다. junit junit 4.7 test 6가지 스코프 설명 compile : 기본 스코프, 컴파일 및 배포할 때 같이 제공해야 하는 라이브러리 provided : 예를 들어 servlet.jar는 서블릿 컨테이너에서 제공하므로 컴파일 시점에는 필요하지만, 애플리케이션을 배포할 때 포함할 필요는 없다. (컴파일시점에사용하고 배포시점에는 포함 x,..
메이븐 의존 라이브러리 관리 메이븐 의존관리는 태그로 관리되며, 아래에는 여러개의 가 존재한다. 아래는 Junit 3.8.1 버전과 의존관계가 있다고 pom.xml에 설정한 것이다. junit junit 3.8.1 test 이 dependency를 설정한 후의 과정은 아래와 같다. 메이븐 중앙 저장소에 JUnit 3.8.1 버전이 있는지 확인 하고 버전이 있다면 groupId/artifactId/version에 있는 ${artifactId}-${​version}.jar 파일을 다운로드 한다. https://repo.maven.apache.org/maven2/junit/junit/3.8.1/junit-3.8.1.jar USER_HOME/.m2/repo..
메이븐 저장소 메이븐 저장소는 세 가지로 나눌 수 있다. 중앙 저장소 원격 저장소 로컬 저장소 중앙 저장소 : 오픈 소스 라이브러리, 메이븐 플러그인, 메이븐 아키타입을 관리하는 저장소. 메이븐 2.0의 중앙 저장소의 URL은 http://repo1.maven.org/maven2/ 이다. 중앙 저장소는 개발자가 임의로 라이브러리를 배포할 수 없다. 원격 저장소 : 중앙 저장소에 없는 라이브러리를 한 곳에 모아두기 위하여 별도의 메이븐 저장소를 설치해 관리하는 것이 가능한데 이것이 원격 저장소이다. 원격 저장소는 회사내에서만 사용하기 위한 용도로 많이 사용된다. 로컬 저장소 : 로컬 저장소는 메이븐을 빌드할 때 다운로드하는 라이브러리, 플러그인을 관리하는 개발자 PC의 저장소이다. (USER_HOME/.m..
테스트하기 mvn test test페이즈는 target/test-classes에 컴파일한 단위 테스트 클래스를 실행하고 그에 따른 결과물을 target/surefire-reports 디렉토리에 생성한다. (test-compile 페이즈에 의존 관계를 가진다.) 만약 테스트 스위트(TestSuite)별로 나누어서 테스트할 필요가 있다면 test 옵션을 사용한다. 다음과 같이 원하는 테스트 클래스를 지정할 수 있다. mvn -Dtest=원하는클래스 test mvn -Dtest=원하는클래스1,원하는클래스2 test 단위 테스트가 실패하여 빌드가 실패할 경우 (테스트케이스 관리가 안될 경우) 테스트를 스킵할 수 있다. mvn -Dmaven.test.skip=true test 매번 인자로 전달하기 싫다면 pom...
자원 복사 및 소스 코드 컴파일 process-resources와 compile 페이즈를 알아보자. 아래와 같은 명령어를 실행하면 src/main/java 디렉토리 아래의 모든 소스 코드가 컴파일된다. mvn compile compile 페이즈 실행 과정 의존 관계에 있는 process-resources 페이즈 실행 (resources 플러그인의 resources골이 실행) resources 골은 src/main/resources 디렉토리에 있는 모든 자원을 target/classes 디렉토리로 복사 만약 엘리먼트를 재정의했다면 재정의한 규칙에 따라 자원을 복사한다. ... src/main/resources src/main/java **/*.java ... 마이바티스 프레임워크..
메이븐 페이즈와 플러그인 메이븐이 제공하는 모든 기능은 플러그인 기반으로 동작한다. 메이븐 페이즈 또한 플러그인을 통하여 실질적인 작업이 실행된다. 고로 메이븐에서 플러그인은 매우 중요하다..! 메이븐 플러그인 ... org.apache.maven.plugins maven-compiler-plugin 2.1 ... 위의 소스는 compiler 플러그인을 사용하도록 설정한 것이다. 메이븐 플러그인은 하나의 플러그인에서 여러 작업을 수행할 수 있도록 지원한다. 실행할 수 있는 각각의 작업을 골(goal)이라고 정의한다. 예를 들면 compiler 플러그인은 하나지만 이 플러그인은 아래와 같은 골(goal)들을 지원한다. sourceDirectory의 소스 코드를 컴파일 하는 compile 골 testSour..
깡냉쓰
'메이븐' 태그의 글 목록