레이블이 maven인 게시물을 표시합니다. 모든 게시물 표시
레이블이 maven인 게시물을 표시합니다. 모든 게시물 표시

2014년 2월 4일 화요일

maven profile 설정(3rd party jar파일을 로컬레파지토리에 저장)

집에서 환경 셋팅하는데 자꾸 pom.xml에서 에러가 발생
즉 사용자 임의 jar파일을(3rdParty) 로컬레파지토리에 저장해 불러올때 초기에 로컬레파지토리에 저장하지 않아서 에러가 남
그래서 우선 cmd > pom.xml파일 위치에서 mvn -Pinstall-3rd install을 실행하니 BUILD FAILURE..ㅠ.ㅠ
한시간 삽질해서 알아낸 결과는 아주 간단했다.
우선 pom.xml 파일에 들어가서 현재 로컬에 저장되지 않은 dependency를 주석처리하고 mvn -Pinstall-3rd install하니 성공
그리고 나서 pom.xml파일로 다시 와서 방금 주석했던 파일을 주석 해제..


-------------------------참고----------------------------------------------------------------------------------------------
환경에 따라 설정을 다르게 해야 하는 경우 profile을 이용하면 수정없이 쉽게 사용이 가능하다.
case에 따라 변경되어지는 키값을 설정해 둔다.

<project>
...
<profiles>
<profile>
<id>appserverConfig-dev</id>
<activation>
<property>
<name>env</name>
<value>dev</value>
</property>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<appserver.home>/path/to/dev/appserver</appserver.home>
</properties>
</profile>
<profile>
<id>appserverConfig-dev-2</id>
<activation>
<property>
<name>env</name>
<value>dev-2</value>
</property>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<appserver.home>/path/to/another/dev/appserver2</appserver.home>
</properties>
</profile>
</profiles>
..
</project>


명령
mvn -P[profile id] [phase]
예제
mvn -PappserverConfig-dev test
mvn -Denv=dev-2 integration-test <-- activation property를 이용한 방법
"activeByDefault" 이 값을 true로 하면 명령 실행시 특정 값을 지정하지 않은 경우 true인 id를 실행한다.
참고 링크 : http://maven.apache.org/guides/introduction/introduction-to-profiles.html
프로파일을 통해 개발, 로컬, 운영버전을 각각 패키징하여 처리하고 있습니다.
알아두면 좋은점이 많은거 같습니다.

maven Jar 생성시 dependency 라이브러리 처리(포함)하기

maven 으로 jar 를 생성하여 배포할때 종속적인(dependency) 라이브라리들이 실행시 필요합니다.
war 프로젝트는 WEB-INF 라는 폴더아래로 필요한것들을 넣어주지만 jar에서는 일일히 dependency로 추가된
라이브러리들을 처리하는것이 무척 귀찮고 막막합니다.
하나씩 잡아줘보지만 한두개도 아니고....
이럴땐 2가지 방법이 있습니다.
첫번째는 dependency를 따로 폴더안으로 모두 복사해오는 것입니다.
아래와 같이 플러그인을 추가하고 goal로 install을 실행하면 모든 dependency 들이 lib안으로 복사되어 모입니다.
  1. <plugin>  
  2.     <groupId>org.apache.maven.plugins</groupId>  
  3.     <artifactId>maven-dependency-plugin</artifactId>  
  4.     <executions>  
  5.         <execution>  
  6.             <id>copy</id>  
  7.             <phase>install</phase>  
  8.             <goals>  
  9.                 <goal>copy-dependencies</goal>  
  10.             </goals>  
  11.             <configuration>  
  12.                 <outputDirectory>  
  13.                      ${project.build.directory}/lib  
  14.                 </outputDirectory>  
  15.             </configuration>  
  16.         </execution>  
  17.     </executions>  
  18. </plugin>  
두번째방법은 jar 안에 모든 dependency를 포함시키는 것입니다. jar하나로 모든 라이브러리들이 포함되어 실행이 되는 구조입니다. 당연히 파일크기가 커지겠지요.
  1. <project>  
  2.   <build>  
  3.     <plugins>  
  4.       <plugin>  
  5.         <groupId>org.apache.maven.plugins</groupId>  
  6.         <artifactId>maven-assembly-plugin</artifactId>  
  7.         <version>2.2.1</version>  
  8.         <configuration>  
  9.           <descriptorRefs>  
  10.             <descriptorRef>jar-with-dependencies</descriptorRef>  
  11.           </descriptorRefs>  
  12.         </configuration>  
  13.       </plugin>  
  14.     </plugins>  
  15.   </build>  
  16. </project>  
그리고
maven assembly:assembly 라고 콘솔에서 실행하면
abc-0.0.1-SNAPSHOT.jar
abc-0.0.1-SNAPSHOT-jar-with-dependencies.jar
위와 같이 라이브러리가 포함된 jar와 일반 jar 가 생성된것이 보입니다.
참조
http://entireboy.egloos.com/4615383
http://redrebel.tistory.com/entry/maven-으로-생성한-jar-파일이-실행이-안될때-NullPointerException