반응형

 

일반적으로는 리눅스에서 빌드를 하는 경우가 많이는 없다.

 

보통은 git과 jenkins를 통해 빌드 배포하고 있기 때문에 하지만 내가 가지고 있는 프로젝트중에

 

hadoop mapreduce작업을 해서 cassandra에 밀어 넣는 처리를하는 경우가 있다.

 

이 경우 hadoop관련 jar파일이 필요한데 pom.xml  dependency 경로가 서버내의 cloudera경로에 걸려있어 

 

서버내에서 maven 빌드를 진행해주어야만 하는 경우가 있었다.(물론 해당 jar파일을 공통 레파지토리나 프로젝트내에 넣어 묶을 수 있긴한데...)

 

먼저 리눅스에서 maven 빌드를 실행하려면 서버에 maven이 깔려있는지 확인이 필요한다.

 

 

> mvn -v

 

깔려있지 않다면 먼저 maven 설치가 필요하다.

 

그리고 빌드를 해서 jar파일을 만들고자하는 프로젝트 경로로 이동해서 pom.xml이 위치한 곳에서 

 

mvn package를 실행해주면 된다. (profile이나 다른 옵션을 주는 경우 해당 명령어에 -P 등을 추가해주자)

 

 

> mvn package (pom.xml이 위치하고 있는 곳에서)

 

 

이렇게 빌드를 하게되면 필요한 dependency들을 다운받아와 jar를 만드는 것을 확인할 수 있다.

 

 

 

반응형

'Programming > Maven' 카테고리의 다른 글

mvn package시 test 코드 건너뛰기  (0) 2018.01.31
MAVEN과 ANT 비교  (0) 2017.05.10
반응형


maven으로 빌드시 정상적으로 동작하지 않는 test케이스들로 인해 실패하는 경우가 많다.


테스트케이스를 작성한지 오래됬거나 변경된 정보들로 인해 성공못하는 경우가 빈번하다.


물론 가장 좋은 케이스는 테스트케이스들도 같이 꾸준히 관리를 해주는 것이지만


그게 쉬운일이던가???....


무튼 이런 경우 보통 jenkins 등 ci 툴에서도 빌드시 skip test 명령어를 명시적으로 넣어주곤 한다.


방법은 세 가지다.


첫 번째, 메이븐 빌드 실행 커맨드 라인에 다음과 같이 실행


package -Dmaven.test.skip=true


두 번째, 메이븐 빌드 실행 커맨드 라인에 다음과 같이 실행

package -DskipTests


세 번째, 커맨드 라인에 명령어를 명시적으로 주어서 사용하고 싶지 않은 경우 (pom.xml plugin 추가)

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <skipTests>true</skipTests>
  </configuration>
</plugin>


위와 같이 세 가지 방법으로 사용할 수 있고 나의 경우는 두 번째 방법을 스프링 부트내에서 자주 사용해 packing하곤 한다.





반응형

'Programming > Maven' 카테고리의 다른 글

리눅스 환경에서 mave으로 빌드하기(mvn package)  (1) 2018.05.09
MAVEN과 ANT 비교  (0) 2017.05.10
반응형

한가지. 메이븐이란 무엇인가?

메이븐을 한 마디로 정의해서 말을 하자면 개발자로 하여금 프로젝트 관리를 쉽게 도와주는 빌드 툴이라고  할 수 있습니다.

메이븐은 pom.xml이라는 파일에 기반합니다. POM(Project Object Model)이란 Xml 파일에 기반하여 반복적으로 진행되어 왔던 프로젝트 빌드, 리포팅, 문서화 작업등을 도와주는 문서라고 할 수 있습니다.

두가지. 많이 사용되고 있는 ANT와 MAVEN의 비교

아파치 앤트(Apache Ant)는 공통적인 프로젝트 디렉토리 구조와 같은 공식적인 관례를 가지고 있지 않으며, 개발자가 직접 소스코드의 위치와 소스코드의 빌드가 된 파일의 위치, 산출물을 어디에 위치시켜야 하는지 정확하게 지정해주어야 한다. 또한 앤트는 빌드를 실행하는 goal과 goal의 디펜던시를 정의할 수 있는 라이프 사이클을 가지고 있지 않다. 따라서 각 goal에 일일이 작업에 대한 순서를 지정해 주어야한다. 반면,

아파치 메이븐(Apache Maven)은 관례를 가지고 있다. 메이븐은 COC(Convetion over Configuration)의 개념에 입각한다. 설정보다 관례라는 뜻으로 앤트와는 다르게 하나 하나 작업에 대한 순서를 지정해주고 산출물에 대한 위치등을 정해줘야 한다면 메이븐은 어디에 소스코드가 위치하고, 소스코드 컴파일, 컴파일 된 소스코드의 산출물의 위치 등이 이미 다 지정되어 있어 따로 일일히 작업을 해주지 않아도 된다. 메이븐은 pom.xml 파일을 생성하고 기본 디렉토리 안에 소스를 위치시키는 것이 위의 빌드, 리포팅 등의 많은 작업들을 위해 해주어야하는 것의 전부이다.나머지는 메이븐의 특정 관례에 따라 처리하게 된다.

물론 설명으로만 보면 Maven이 Ant보다 훨씬 편해보이지만 그 어떤 것이 더 좋고 나쁘다고 말하기는 힘들 것 같다. 적적한 때에 적절한 툴을 사용하는 것이 중요하고 Maven이 Ant보다 더 많은 작업들을 개발자 입장에서 훨씬 쉽게 처리할 수 있지만 Ant보다 자유도가 떨어지기 때문에 세세한 컨트롤을 필요한 부분에 있어서는 Ant가 이점이 있다. 그러나 Ant는 너무나도 큰 자유도 때문에 script를 재사용하기 어렵고 문법 또한 훨씬 복잡하므로 개발을 하면 할수록 더욱 복잡해지고, 같은 내용을 반복적으로 사용해야하는 단점이 있다.

세가지. 메이븐의 장점

   1. 메이븐은 편리한 Dependency Libaray관리 기능을 제공한다.

프로젝트를 진행하다 보면 특정 기능을 구현하기 위해 jar파일 등의 라이브러리가 필요할 경우가 있다. 이 경우 메이븐 pom.xml에 단지 denpency만 추가시켜주면 알아서 해당 라이브러리를 다운받아 주게 된다.


이렇게 단순히 dependency만 추가하게 되면 junit을 사용할 수 있는 라이브러리를 다운 받아준다. 이러한 특징으로 인해 여러명이서 프로젝트 작업을 진행 할 경우 라이브러리 파일을 git이나 svn과 같은 도구를 통해 주고 받지 않고도 프로젝트에 필요한 라이브러리들을 pom.xml 하나로 쉽게 관리할 수 있는 큰 장점이 있다.

  2. 모든 프로젝트가 일관된 디렉토리 구조와 빌드 프로세스를 유지할 수 있다.


 설정보다 관례(Convention over Configuration)라는 아이디어에 따르면 옆과 같이 메이븐 프로젝트로 시작하게 되면 src/main/java, src/main/resouces, src/test/java, src/test/resources와 같은 구조를 발견할 수 있다. 이렇게 메이븐 프로젝트는 공통 구성을 가지게 되고누군가가 이 프로젝트를 봤을 경우 메이븐에 기반한 프로젝트라는 것을 쉽게 인식할 수 있을 뿐만 아니라 프로젝트의 전반적인 내용에 대해 어느정도 유추할 수 있게 된다. 이렇게 메이븐 템플릿 프로젝트로 프로젝트를 생성하면 프로젝트의 뼈대를 자동으로 생성할 수 있게 되는데 이 같은 기능을 아키타입(archetype)이라고 한다.

  3. 메이븐이 제공하는 다양한 플러그인을 활용할 수 있다.

  4. 신규프로젝트 세팅을 쉽고 빠르게 진행할 수 있다. (Archetype 기능을 통해)

사가지. Pom.xml의 기본 구성요소

Maven 프로젝트를 생성하면 pom.xml 파일이 프로젝트 루트 디렉터리에 생성된다. 이 pom.xml 파일은 Project Object Model 정보를 담고 있는 파일로서, 이 파일에서 다루는 주요 정보는 다음과 같다.

  1. 프로젝트 정보 : 프로젝트의 이름, 개발자 목록, 라이선스 등의 정보를 기술

  2. 빌드 설정 : 소스, 리소스, 라이프 사이클 별 실행할 플러그인 등 빌드와 관련된 설정을 기술

  3. 빌드 환경 : 사용자 환경 별로 달라질 수 있는 프로파일 정보를 기술

  4. POM 연관 정보 : 의존 프로젝트 (모듈), 상위 프로젝트, 포함하고 있는 하위 모듈 등을 기술


잘 안보이지만 왼쪽 위에 보이는 Group Id, Artifact Id, Packagin, Version 에 대해 설명하겠다.

Group Id : 프로젝트를 생성하는 조직의 고유 아이디어를 결정. 보통 Domain Name을 사용

Artifact Id : 프로젝트를 식별하는 유일한 아이디를 말한다. 보통 Project Name을 사용

Packaging : 프로젝트를 어떤 형태로 패키징 할지 결정한다. 진행하고 있는 프로젝트의 경우 웹 프로젝트이기 때문에 war로 설정되어 있다.

Version : 프로젝트 버전 구조 [메이버 버전.마이너 버전. 순차 버전 - 식별자]가 되겠다. 현재는 1.0.0-BUILD-SNAPSHOT으로 지정되어 있는 것을 볼 수 있다.

밑에 보이는 Overview, Dependencies, 등등이 있는 탭에 pom.xml을 눌러보면

과 같이 pom.xml에 표시되어 있는 것을 확인할 수 있다. pom.xml 은 workspace상에 여러 군데 있을 수 있고 hierarchy에 따라 overwrite 또는 상속을 받게 된다.

참고.

자바 세상의 빌드를 이끄는 메이븐 - 박재성 저

[포스팅을 하며]

글을 쓰는 일이 정말 쉽지 않다는 것을 다시 한 번 느낀다. 앞으로 현업에서 새롭게 습득한 지식이나 어려움을 겪었던 경험들에 대해서도 포스팅 해볼 생각이다. 아직은 많이 부족하지만 꾸준히 지식 습득에 노력을 기울이고 학습한 내용에 대해 포스팅 하며 더욱 지식을 굳건히 할 수 있도록 해야 겠다. 미흡하거나 잘못 된 부분의 경우 댓글을 통해 얘기해주면 감사하겠습니다.



반응형

+ Recent posts