요새는 gradle 쓰지, ant 를 얼마나 쓸까 싶으냐만은 언제나 후다다닥 할땐-_-)s


.. 자

Ant 빌드에서 메이븐 명령어를 사용하는 방법이다.

전체적인 스텝은 다음과 같다. 

  1. maven-ant-task 다운로드
  2. build.xml 에 namespace 추가
  3. 메이븐 홈 위치 설정
  4. target 작성 후 target 안에 artifact:xxxxx 와 같은 task 추가
  5. target  실행

이제 각 단계 별로 자세히 알아보자.

1.Maven Ant Task 다운로드

ant 에서 maven 을 사용하기 위해서는 maven 이 제공해주는 ant 용 메이븐 task 가 필요한다.

다음 사이트에서 maven-ant-task-x.x.x.jar 파일을 다운로드받는다. (본 문서 작성시에 안정버젼은 2.1.3 이였다.)

Download Site : http://maven.apache.org/ant-tasks/

다운받은 maven-ant-task-x.x.x.jar 파일을 build.xml 이 참조할 수 있는 위치에 둔다. (ex: src/antlib/maven-ant-task-2.1.3.jar)

2.build.xml 에 namespace 추가

build.xml 의 루트 element 인 project 엘리먼트에 다음과 같이 artifact namespace 를 추가한다.

이때 maven-ant-task.classpath 패스에 1단계에서 내려받은 maven-ant-task-x.x.x.jar 를 참조할 수 있도록 위치를 지정한다.

build.xml
<?xml version="1.0" encoding="utf-8" ?>
<project name="ECM RPC Project" default="genkey" basedir="." xmlns:artifact="antlib:org.apache.maven.artifact.ant">
    <path id="maven-ant-tasks.classpath" path="src/antlib/maven-ant-tasks-2.1.3.jar" />   
    <typedef resource="org/apache/maven/artifact/ant/antlib.xml"
             uri="antlib:org.apache.maven.artifact.ant"
             classpathref="maven-ant-tasks.classpath" />
</project>

 

3.자신의 환경에 맞도록 메이븐 홈 위치 설정

사용할 메이븐 홈 디렉토리를 설정한다. 본 문서에서는 시스템 환경변수로부터 읽어들였다.

build.xml
<?xml version="1.0" encoding="utf-8" ?>
<project name="ECM RPC Project" default="genkey" basedir="." xmlns:artifact="antlib:org.apache.maven.artifact.ant">
    <path id="maven-ant-tasks.classpath" path="src/antlib/maven-ant-tasks-2.1.3.jar" />   
    <typedef resource="org/apache/maven/artifact/ant/antlib.xml"
             uri="antlib:org.apache.maven.artifact.ant"
             classpathref="maven-ant-tasks.classpath" />
     
    <property name="maven-home.path" value="${env.M2_HOME}" />
     
</project>

 

4.target 작성

메이븐 명령어(mvn)도 결국은 ant target 으로 실행된다. target 을 생성한 후 하위에 필요한 maven task 를 작성하도록 하자.

메이븐 task 들은 2단계에서 설정한 namespace 로 찾을 수 있다.

자세한 모든 task 는 공식 사이트(http://maven.apache.org/ant-tasks/) 를 참조하라.

다음은 "mvn clean war:exploded -Pcomas -Pslothink1" 과 동일한 명령어를 수행하는 task 이다.

build.xml
<target name="make-webapp-with-slothink1-profile">
    <artifact:mvn pom="pom.xml" mavenHome="${maven-home.path}" fork="true">
        <arg value="clean"/>
        <arg value="war:exploded"/>
        <arg value="-Pcomas"/>
        <arg value="-Pslothink1"/>
    </artifact:mvn>
</target>

 

5.target 실행

4단계에서 설정한 target 을 실행한다. 

 

참조 : http://maven.apache.org/ant-tasks

지금까지 jboss 등등 유명한 오픈소스들의 리파지토리를 넥서스에 직접 등록해서 사용하고 있었는데, 그럴 필요가 없었다. 이미 Sonatype 에서 다 모아서 서비스를 해주고 있었던 것-_-;


Sonatype 에서 제공하는 오픈소스용 Nexus 는 https://oss.sonatype.org/index.html 여기로 접속 가능하다.

그리고 릴리즈용과 스냅샷용 리파지터리는 다음과 같다.

  • https://oss.sonatype.org/content/repositories/releases/
  • https://oss.sonatype.org/content/repositories/snapshots/
스트라이프 소스 받아다가 할려고보니깐, parent 로 소나타입이 지정되있는걸 보고 깨달았다. 아.. 설마

<parent>
<groupId>org.sonatype.oss</groupId>
<artifactId>oss-parent</artifactId>
<version>5</version>
</parent>

여튼, 소나타입 덕분에 살맛 난다.. 감사감사..
그나저나 Java 8 이 나오면 maven 망하나? 


간만에 글을 쓴다. 굉장히 철지난 글일지만 모르지만, 계속 갈릴레오를 고집하다가 하이버네이트 플러그인이 Helios 를 더 잘 지원해줘서 결국 올렸다.
다른 많은 분들이 꼭 이 플러그인들을 필요로 할지는 모르겠으나, 깔아둬서 언제고 꼭 도움이 되었음 좋겠다.

1.Eclipse 설치

이 문서의 기준은 2011.03.09 현재 Eclipse 3.6 (helios) 를 기준으로 한다.

다음 링크에서 Eclipse IDE for Java EE Developers 버젼을 내려받는다. (물론 원하는 버젼을 내려받아야하지만, 자바 웹개발자라면 해당 버젼이 좋다)

http://eclipse.org/downloads/

 

2.Eclipse 필수 플러그인 설치

다음 플러그인은 JBoss 툴즈를 설치하기 위한 필수 플러그인들이지만, 꼭 JBoss 툴즈가 아니더라도 반드시 설치되어야하는 플러그인들이다.

JBoss Tools 플로그인은 다음의 주소로 업데이트 받는다. 

JBoss Tools 에 유용한 것이 많이 있으므로, 필요한 것만 선택한다. 단, 다음의 것들은 반드시 설치한다.

  • Hibernate Tools
  • JMX Console
  • JBoss GWT Integration
  • FreeMakrder IDE
  • Maven Support 하위 모든 Plugins
  • Web and Java EE Developement 하위 모든 Plugins

JBoss Tools Update URL 에 대한 접속이 원할하지 않을 경우에는 JBoss Tools 페이지(https://www.jboss.org/tools/download/stable.html)에서 JBoss 툴즈 안정버젼을 내려받아서 설치할 수 있다.

현 시점에 JBoss Tool 에 대한 최신 버젼은 3.2.0.GA Stable 이다. 오프라인 설치에 대한 자세한 설명은 https://www.jboss.org/tools/download/installation/update_3_2.html#fromzip 링크를 참조한다.

요약하여, 설명하자면 플러그인 사이트 주소를 추가할 때, 주소 입력이 아닌 Archive 를 눌러서 다운받은 파일을 선택하라는 내용이다.

 

3.설치 Screen Shot

1. 이클립스 실행 후 [Help -> Install New Software] 클릭

eclipse-helios-plugin-01.png

2. [Add] 버튼을 클릭하여 플러그인 저장소를 추가한다.
추가할 저장소들은 위 내용을 참조한다.

eclipse-helios-plugin-02.png

3. 설치할 항목들을 선택한다.

eclipse-helios-plugin-03.png

4. 설치할 항목들이 나타난다. 만일 설치해야할 플러그인이 옳바르지 않거나, 선행으로 설치해야할 플러그인이 존재하지 않거나 할 경우에는 [Back] 을 클릭하여 해당 항목을 제거하고 진행하면 된다.

eclipse-helios-plugin-04.png

5. 라이센스에 동의한다.

eclipse-helios-plugin-05.png

6. 플러그인을 설치하면 이클립스를 재시작한다는 메시지가 나온다. 재시작한 후, 다른 플러그인도 위 1~5단계를 반복하여 설치한다.

eclipse-helios-plugin-06.png

eclipse-helios-plugin-07.png

eclipse-helios-plugin-08.png

eclipse-helios-plugin-09.png

eclipse-helios-plugin-10.png

eclipse-helios-plugin-11.png

eclipse-helios-plugin-12.png

eclipse-helios-plugin-13.png

eclipse-helios-plugin-14.png

eclipse-helios-plugin-15.png

eclipse-helios-plugin-16.png

eclipse-helios-plugin-17(1).png

#URL 로부터 받아지지 않거나, 또는 빠르게 설치하고 싶은 경우에는 위 내용처럼 jboss tool 플러그인 파일을 직접 내려받은 후 [Archive] 를 선택하여 해당 파일을 선택후 설치할 수 있다.

이후 과정은 동일하다.

eclipse-helios-plugin-18(2).png

 eclipse-helios-plugin-19.png

#아래와 같이 나오는 것은, "서명되지 않은 플러그인이라서 위험할 수 있다. 그래도 진행하겠냐?" 라는 내용이다. [OK] 를 클릭하여 진행한다.
eclipse-helios-plugin-20.png


끝이긴 한데, 혹시 이 글을 읽는 분들 중에 "개발자라면 이정도는 가지고 있어야하는거 아니냐? 이 무개념아"라고 말씀해주실분은 플러그인 추천도 부탁드립니다. ^^ 

  1. 지나가는 개발자 2011.04.20 13:52

    정말 좋은 정보 감사합니다!!!

Archetype 만드는 방법은 매우 쉽다.

간단히 말하면, 

  1. 우선 Archetype 으로 사용된 maven 프로젝트를 먼저 만들고,
  2. archetype 플러그인으로 실제 archetype 용 프로젝트를 자동 생성한다.
  3. 생성된 archetype 프로젝트에 필요한 설정을 더 추가하여 배포한다.

 

1. Archetype 을 위한 샘플 프로젝트 생성

우선 pom.xml 이 있는 maven 프로젝트를 먼저 만든다.
이 프로젝트가 archetype 에 들어갈 기본 골격이다. 물론, archetype 프로젝트 생성 후에도 수정이 가능하다.
만일, 샘플로 사용할 프로젝트가 있다면 별도 프로젝트 생성 없이 해당 프로젝트를 사용해도 된다.

 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>kr.pe.slothink</groupId>
  <artifactId>slothink-webapp</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>
  ...
</project>

archetype 프로젝트시 생성될 프로젝트에 소스를 포함고 싶다면, 소스를 추가하되 공통적인 패키지명만 유지한다. 패키지명은 어떤 패키지명을 사용해도 상관없다.

archetype 프로젝트 생성시에는 소스의 패키지의 공통적인 부분을 archetype 을 이용해 프로젝트 생성시 입려되는 패키지명의 값으로 치환을 시켜준다.

2.Archetype 용 프로젝트 생성

해당 프로젝트에서 다음의 maven 플러그인 골을 수행한다.

>mvn archetype:create-from-project

해당 골이 성공적으로 수행되면 target/generated-sources/archetype 에 archetype 용 프로젝트가 생성된다.

생성된 프로젝트의 pom.xml 을 보면 다음과 비슷할것이다.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>kr.pe.slothink</groupId>
  <artifactId>slothink-webapp-archetype</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>maven-archetype</packaging>
  <name>slothink-webapp-archetype</name>
  ....
</project>

 

주목할 만한것은 패키징 타입이 'maven-archetype' 이라는 것과 생성된 프로젝트 이름에 '-archetype' 이 붙었다는 것이다.

  

3.Archetype 프로젝트 배포하기

이제 archetype 프로젝트를 다룰 준비가 완료되었다.(이전 샘플 프로젝트는 이제 버린다.)
이전 샘플 프로젝트에서 미처 추가하지 못한 소스라던지, 설정들은 생성된 프로젝트에서 추가 및 수정한다.
아마 생성된 리소스들을 확인하면 무슨 뜻인지 이해가 잘 갈 것이다.
그래도 이해가 안된다면 메이븐 공식 사이트를 참조한다. http://maven.apache.org/guides/mini/guide-creating-archetypes.html 

 

배포 방법은 일반 메이븐 프로젝트 배포방법과 동일하다.

install 을 사용해서 local 에 저장할 수 있으며

> mvn install

 deploy 를 이용해서 사내 저장소에 저장도 가능하다.

> mvn deploy

하지만 deploy 를 할경우에는 생성된 archetype 프로젝트 pom 에 배치 정보를 추가 해야할것이다.
(샘플 프로젝트에 있던 배치 정보는 의미 없다. 새로 생성된 pom 에 다시 작성해야한다.)

 

4.생성한 archetype 으로 프로젝트 만들기

install 과정을 거쳤다면 local 카탈로그에서 해당 achetype 을 조회할 수 있다.

임의의 위치에서 다음과 같이 실행하여보자.

mvn archetype:generate -DarchetypeCatalog=local

 이제 아름다운 광경을 목격하게 될 것이다. ^^


hibernate3:hbm2doc 를 실행하던 중

[org.hibernate.connection.DriverManagerConnectionProvider]
problem closing pooled connection java.sql.SQLException: Io exception: Socket closed


와 같은 오류가 났다.

하이버네이트 JIRA(http://opensource.atlassian.com/projects/hibernate/browse/HBX-948) 에 의하면 오라클 서버 버젼과 jdbc 버젼이 다를 경우에 저런 메세지가 떨어진다고 한다.


나의 경우는 오라클 11g 버젼을 사용하고 있었는데, 예전 버젼을 사용하고 있어서 그랬다.

<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.3.0</version>
</dependency>


다음의 최신 버젼을 사용하면 문제가 해결된다.
다음 버젼은 JDK 1.5 이상에서만 동작하며, JDBC 3.0 과 Oracle 9, 10, 그리고 11 을 지원한다. 올레!

<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc5</artifactId>
<version>11.1.0.7.0</version>
</dependency>

Unable to find resource 'jdbc.artifact.groupid:jdbc-driver:pom:1.0' in repository daeati


이런 오류가 발생했다. 만약 maven 실행시 이런 오류가 발생했다면 지금 당신은 어처구니 없는 짓을 한거다.

PS D:\workspace\lotte_xcms\lottexcms> mvn hibernate3:hbm2doc
[INFO] Scanning for projects...
Downloading: http://211.52.77.7:8081/nexus/content/groups/public/jdbc/artifact/groupid/jdbc-driver/1.0/jdbc-driver-1.0.pom
[INFO] Unable to find resource 'jdbc.artifact.groupid:jdbc-driver:pom:1.0' in repository daeati (http://211.52.77.7:8081/nexus/content/groups/public)
Downloading: http://repo1.maven.org/maven2/jdbc/artifact/groupid/jdbc-driver/1.0/jdbc-driver-1.0.pom
[INFO] Unable to find resource 'jdbc.artifact.groupid:jdbc-driver:pom:1.0' in repository central (http://repo1.maven.org/maven2)
Downloading: http://211.52.77.7:8081/nexus/content/groups/public/jdbc/artifact/groupid/jdbc-driver/1.0/jdbc-driver-1.0.jar
[INFO] Unable to find resource 'jdbc.artifact.groupid:jdbc-driver:jar:1.0' in repository daeati (http://211.52.77.7:8081/nexus/content/groups/public)
Downloading: http://repo1.maven.org/maven2/jdbc/artifact/groupid/jdbc-driver/1.0/jdbc-driver-1.0.jar
[INFO] Unable to find resource 'jdbc.artifact.groupid:jdbc-driver:jar:1.0' in repository central (http://repo1.maven.org/maven2)
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.
[INFO] Unable to find resource 'jdbc.artifact.groupid:jdbc-driver:pom:1.0' in repository daeati (http://211.52.77.7:8081/nexus/content/groups/public)
Downloading: http://repo1.maven.org/maven2/jdbc/artifact/groupid/jdbc-driver/1.0/jdbc-driver-1.0.pom
[INFO] Unable to find resource 'jdbc.artifact.groupid:jdbc-driver:pom:1.0' in repository central (http://repo1.maven.org/maven2)
Downloading: http://211.52.77.7:8081/nexus/content/groups/public/jdbc/artifact/groupid/jdbc-driver/1.0/jdbc-driver-1.0.jar
[INFO] Unable to find resource 'jdbc.artifact.groupid:jdbc-driver:jar:1.0' in repository daeati (http://211.52.77.7:8081/nexus/content/groups/public)
Downloading: http://repo1.maven.org/maven2/jdbc/artifact/groupid/jdbc-driver/1.0/jdbc-driver-1.0.jar
[INFO] Unable to find resource 'jdbc.artifact.groupid:jdbc-driver:jar:1.0' in repository central (http://repo1.maven.org/maven2)
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.

Missing:
----------
1) jdbc.artifact.groupid:jdbc-driver:jar:1.0

  Try downloading the file manually from the project website.

  Then, install it using the command:
      mvn install:install-file -DgroupId=jdbc.artifact.groupid -DartifactId=jdbc-driver -Dversion=1.0 -Dpackaging=jar -Dfile=/path/to/file

  Alternatively, if you host your own repository you can deploy the file there:
      mvn deploy:deploy-file -DgroupId=jdbc.artifact.groupid -DartifactId=jdbc-driver -Dversion=1.0 -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]

  Path to dependency:
        1) com.daeati:lottexcms:war:0.0.1-SNAPSHOT
        2) jdbc.artifact.groupid:jdbc-driver:jar:1.0

----------
1 required artifact is missing.

for artifact:
  com.daeati:lottexcms:war:0.0.1-SNAPSHOT

from the specified remote repositories:
  central (http://repo1.maven.org/maven2),
  daeati (http://211.52.77.7:8081/nexus/content/groups/public)



내가 했던 어처구니 없는 일을 풀어보노라면,,,,

좀전에 하이버네이트 플러그인을 사용하려고 다음의 의존성을 추가했다.

<dependency>
    <groupId>jdbc.artifact.groupid</groupId>
    <artifactId>jdbc-driver</artifactId>
    <version>1.0</version>
</dependency>


그리고 나서 이 오류가 발생했다. 즉, jdbc.artifact.groupid:jdbc-driver:jar:1.0 을 maven 저장소로부터 찾을 수 없다는 것이다.

그래서 코드하우스도 점검해보고, 메이븐 저장소를 샅샅이 찾았지만. 찾을 수 없다.

............



그렇다. 자신에게 맞는 jdbc 를 넣으세요(알아서 하세요요요요)

<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc14</artifactId>
    <version>10.2.0.3.0</version>
</dependency>


를 추가했다. Success. 좀 부끄러워질 필요가 있다ㅡㅡ*

저의 전공들입니다. 배워도 배워도 끝도 없는 세상. 언제쯤 마무리 지을런지..

오픈 소스, Maven, Hibernate, Spring ,Stripes , Spring, Spring Security, Java,Css,Web 2.0,iBatis,EJB,J2EE,Dojo Toolkit, Prototype.js, Script.aculo.us, jQuery, Trac, Eclipse

 

이젠 저 혼자 아는 것도 외로워서리, Java 개발자라면 Java 개발자다운 세상을 만들어 가보고 싶네요.

궁금한게 있으시다면 질문 언제나 환영입니다. 비록 포스팅은 많이 하지 않지만..;;


Spring

이제 거의 모든 프로젝트에 스프링을 필수 입니다. 물론 스프링 프레임웍이 최고라고 단정할 수 없겠습니다만, 세계적으로 이만한 기반을 쌓아놓았다는 것 자체가 힘입니다.

스프링은 그저 Dependency Injection(Inversion of Control), AOP(Aspect Oriental Programming) 밖에 없습니다. 이2개로 다 해결하죠. 

또한 이놈을 씀으로서 자연스럽게 소스를 구조화시키죠. 스파게티로부터 일단 한단계는 벗어나는겁니다.

묻지 마시고, 일단 이건 시작하십시오.

 

Maven

정말 이놈을 만난 순간 이런 세상에 내가 태어났다는게 참으로 감사했죠. 이놈이 나오기전에 내가 있엇으면 참 얼마나 뻘짓들을 하면서 살았을련지.

Ant 를 대체하며, 태스크 중심이 아닌 프로젝트 빌드에 초점을 맞춘 툴입니다.

전세계의 97% 오픈소스가 Maven 으로 기반으로 되어있다고 합니다.

우리 회사는 오픈 소스 아니니깐 상관없어?

무슨 그런 말씀을..ㅡㅡ;;; Maven 을 도입하고 조금 더 게을러져봅시다. 

Hibernate

오랜 시간동안 하이버네이트를 다뤄왔습니다. 국내에서는 별로 쓰이지도 않음에도 불구하고, 그 매력에 빠져 헤어나오지를 못하네요..^^

이제 하이버네이트에 대한 부담감이 없지만, 초창기에는 국내 커뮤니티가 참으로 작아 힘들었더랬죠.

이젠 제가 여러분에 도움을 드릴 수 있지 않을까 합니다.

 

 

Stripes

스트라이프를 써보셨나요? 들어본 적도 없으시죠?

스트럿츠, 스프링 웹MVC 모두 저리가라입니다. 프레임워크에 학을 때시나요?

현재는 스트라이프가 답일 거라 생각합니다. 이또한 국내 커뮤니티가 전무하군요..

워낙 쉬워서 사실 국내문서화가 얼마나 필요할까 싶기도 합니다만..^^

스트러츠를 갈아버리는 그 날까지 제가 일조를 했으면 하는군요


Prototype.js, jQuery, Dojo Toolkit, Ajax

사실 Ajax 라는 것은 무척쉽습니다. 한줄이면 끝나는 말인걸요.

비동기적으로 서버에 메시지 보내서 받아오는 것

이미 알고 계신가요ㅎㅎ 그저 자바스크립트가 싫을 뿐인거죠? 

이러한 자바스크립트 라이브러리를 사용해 보십시오. 자바 스크립트도 나름 재밌구나라는 생각도 듭니다.

지긋한 스크립트 지옥으로부터 탈출하는 습관을 만들어 줄겁니다.



이 글은 스프링노트에서 작성되었습니다.

SVN 플러그인 subclipse 설치하기

 

  1. [Help] -> [Install New Software] 클릭
    install-eclipse-galileo-m2eclipse-subclipse-00.png
  2. [Add] 를 클릭한다.
    install-eclipse-galileo-m2eclipse-subclipse-01.png
  3. 추가하는 업데이트 사이트명을 지정하고, 로케이션은 다음과 같이 지정한다.
    Name : subclipse
    Location : http://subclipse.tigris.org/update_1.6.x
    install-eclipse-galileo-m2eclipse-subclipse-02.png
  4. 사이트를 추가하고 나면 해당 업데이트 URL 에 다음과 같은 설치할 수 있는 플로그인 목록이 나타난다. 적절한 항목을 선택한다.
    반드시 설치해야하는 것은 다음과 같다
    Core SVNKit Library, Subclipse
    install-eclipse-galileo-m2eclipse-subclipse-03.png
  5. 선택한 항목에 대한 자세한 정보가 기술된다. 만약 플러그인 의존성에 의해 설치할 수 없다고 나온다면, 이전 항목으로 돌아가 설치할 수 없는 항목을 제거하면 된다.
    install-eclipse-galileo-m2eclipse-subclipse-04.png
  6. 라이센스에 동의한다.

    install-eclipse-galileo-m2eclipse-subclipse-05.png

  7. 업데이트가 진행된다. 잠시 기다리자
    install-eclipse-galileo-m2eclipse-subclipse-06.png
  8. 사인되지 않은 경우, 다음과 같은 경고창이 될 수 있다. 그러나 우리는 믿을 수 있는걸 받고 있다. [OK]를 클릭하여 무시하고 진행한다.

    install-eclipse-galileo-m2eclipse-subclipse-07.png

  9. 플러그인 설치 후 이클립스를 재시작한다고 물어본다. [Yes] 를 클릭하여 재시작한다.

    install-eclipse-galileo-m2eclipse-subclipse-08.png

 

Maven 플러그인 m2eclipse 설치하기

 

m2eclipse 는 maven 이클립스 플러그인으로서 sonatype 에 의해 지원된다.

  1. 이클립스 기동 후 [Help] -> [Install New Software] 클릭한다
  2. [Add] 를 클릭한다.
    install-eclipse-galileo-m2eclipse-subclipse-10.png
  3. 추가할 사이트명과 주소를 지정한다.
    0.98 버젼의 update url 은 "http://m2eclipse.sonatype.org/update" 이었으나(스크린샷), 1.0에선 코어와 엑스트라로 구분되었다.
    현재는 0.98 버젼에 대한 지원이 사라졌다.
    따라서 2번의 추가가 필요한다.

  4. 업데이트 사이트를 추가하면, 다음과 같이 설치할 수 있는 플러그인 항목이 나타난다. 다음의 항목을 체크한다.
    install-eclipse-galileo-m2eclipse-subclipse-12.png
  5.  

    설치할 플러그인에 대한 세부 정보가 나타난다. 플러그인 의존성 실패로 메세지가 나올 경우엔 이전 화면으로 돌아가서 해당 항목을 제거하면 된다.
    install-eclipse-galileo-m2eclipse-subclipse-14.png

  6.  

    라이센스에 동의한다.
    install-eclipse-galileo-m2eclipse-subclipse-15.png

  7. 서명되지 않은 플러그인일 경우에 다음과 같은 경고창이 뜰 수 있다. 믿을만할걸 받고 있다. 무시한다.
    install-eclipse-galileo-m2eclipse-subclipse-16.png
  8. 모든 플러그인 설치 후 이클립스 재시작을 요구한다. [Yes] 클릭

    install-eclipse-galileo-m2eclipse-subclipse-17.png

이 글은 스프링노트에서 작성되었습니다.

war 프로젝트의 경우에는 war 배포시 WEB-INF/lib 안에 dependency 하고 있는 jar 들이 배포된다.
그러나 jar 프로젝트의 경우에는 컴파일을 하기 위해서 dependency 하고 있는 라이브러리들을 사용할 뿐이지 배포물에는 포함되지 않는다.


1. maven 프로젝트에서 단일 jar 만들기

배포물(jar) 에 해당 라이브러리도 같이 넣고 싶다면 assembly 골을 사용하면 된다.
$emds-core> mvn assembly:assembly

단, 이것을 실행하기 위해선 pom.xml 의 build/plugins 하위에 다음과 같은 설정을 추가해야한다.
만약, 단일 jar 파일을 실행 jar 로 만들 경우엔 manifest 설정도 추가한다
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
이 골은 의존하고 있는 프로젝트의 파일들을 전부 풀어서 하나의 jar 로 만들어버린다. 따라서 많은 수의 라이브러리를 하나의 jar 로 만들고 싶은 경우 사용할 수 있다.

2. maven 프로젝트에서 의존하고 있는 jar 추출하기

그러나 현재 프로젝트에서 사용하고 있는 dependency 라이브러리들에 대해서 다 추출하고 싶다면(실제로 파일로 가져오고 싶다면) dependency:copy-dependencies 명령을 이용해서 가져올 수 잇다.

$emds-core> mvn dependency:copy-dependencies


이 명령은 프로젝트에서 참조하는 라이브러리들을 target/dependency 에 모두 복사해넣는다.
따라서 소스를 풀어서 재결합한 assembly 방식을 피하고 싶다면 이 명령과
package 명령을 통해 만들어진 프로젝트.jar 파일을 사용한다면 해당 프로젝트를 완전히 배포할 수 있다.

java.lang.OutOfMemoryError: Java heap space


maven 을 별도로 세팅하지 않고 대체로 war 패키지를 deploy 할 경우에 흔히 일어나는 현상이다.
war 의 경우 파일의 사이즈가 큰 편인데 jvm 옵션을 주지 않으면 완성된 war 를 deploy시 java.lang.OutOfMemoryError 가 나곤 한다.

이러한 일련의 문제는 jvm option 을 주므로서 해결할 수 있는데, 환경 변수에 MAVEN_OPTION 을 등록하면 된다.

나는 다음의 JVM_OPTION 을 MAVEN_OPTION 으로 등록하였다.

-XX:PermSize=32m -XX:MaxPermSize=128m -Xms128m -Xmx512m



pom.xml 의 build plugins 하위에 다음의 플러그인 속성을 추가한다.
이후에는 install 또는 deploy 시 자동으로 소스까지 같이 배포된다.

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
       <executions>
       <execution>
<id>attach-sources</id>
<goals>
    <goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>


$Prompt>mvn deploy

  1. BlogIcon NYA 2009.11.18 17:00

    오홍 이 녀석이었군요. 저는 deploy 에 뭔가 옵션이 있을까 했는데... 별도 플러그인으로 execution 으로 넣는거네요. 근데 goal 이 deploy 가 아니라 jar 라서 갸우뚱 하게 되네요..

    • BlogIcon slothink 편현장 2010.03.17 10:46 신고

      만들어지는 결과물 형식에 대해서 goals 이 정해집니다. 그래서 결과물이 xxx-sources.jar 가 되지요. 만약 테스트 소스도 결과물을 만들어 내고 싶으면 <goals> 안에 <goal>test-jar</goal> 까지 넣으시면 된답니다. 메이븐을 쓰는 사람이 있으니 반갑네요^^

maven 으로 프로젝트를 버젼 관리할 경우, 소스를 branche 를 딴 경우 주의가 필요하다.
branches 를 따서 별도의 소스로 관리한다고 했으니 안심할 수는 없다.
maven 을 사용하고 있다면 trunk 버젼과 branche 버젼이 공통으로 사용되고 있는 부분이 존재하는데 바로 메이븐 로컬 저장소다.

다음의 예를 들어보자


여기서는 app-1.0 모듈이 core-1.0 에 의존하고 잇다.
만일 core-1.0 에 대해서 branche 를 생성했다면, 각각의 작업시에 install 을 하게 될 경우엔 로컬 저장소에 라이브러리가 적재될 것이다. 그러하다면 app-1.0 은 상황에 따라 trunk 버젼을 사용할 수도 있고, branche 버젼을 사용할 수 있을 것이다.

만약 deploy를 한다면 다른 팀원들에게까지 영향을 미쳐버리는 상황이 발생할 것이다. 따라서 branche 를 한경우 별도의 버젼으로 재정의하는 것은 필수다.
얼마전 사내 svn 서버를 이동하면서 svn 서버를 업그레이드를 해버렸다.
visual svn 1.6 대에서 1.7버젼으로.
덕분에 기존 소스를 동기화시킬때, 오류가 났다. svn 스펙에 따라 서버 버젼이 정의되고 있는지 모른것이 화근.


Visual SVN Server 1.6.x 는 SVN 1.4.x 스펙
Visual SVN Server 1.7.x 는 SVN 1.6.x 스펙이다.

그래서 이 기회에 다시 한번 기본 환경구축에 대한 가이드를 작성해본다.

==================================================

* Eclipse 설치.
eclispe 는 eclipse.org 에서 j2ee 용으로 설치한다. 현재 버젼은 3.4.2 버젼까지 릴리즈되어있다.

* svn 플러그인 설치
1. Eclipse 실행 후 [Help] -> [Software Updates] 를 클릭하여 플러그인 업데이트 화면을 연다.

2.[Available Software] 탭을 선택한 후 [Add Site] 클릭

3.다음 업데이트 URL 을 기입한다.
http://subclipse.tigris.org/update_1.6.x

만일 svn 서버가 1.4.x 스펙을 사용한다면 다음 url 을 사용하라.
http://subclipse.tigris.org/update_1.4.x

4.업데이트 URL 을 추가하면 아래와 같이 플러그인 사이트가 등록된다. 해당 항목에 체크한 후 [Install] 클릭

5.의존 플러그인에 대해서 확인을 진행한다. 시간이 좀 걸릴거다-_-

6.의존 플러그인에 대해 적합하고, 이미 설치되어있는 것이 없다면 아래와 같이 나타난다. 만약 Details 항목에 에러 메세지가 뜬다면 영어만 잘 읽어도 오류 원인을 파악할 수 있을 거다. [Next] 클릭

7.라이센스에 동의한 후 [Finish] 클릭

8. 실제 설치가 진행된다.

9. 설치 완료 후 이클립스의 재실행을 요구한다. [Yes] 클릭

10. 끝

* mylyn, trac 플러그인 설치
trac 은 버그 추적 관리 툴이다. jira 등, 다른 bts 를 사용한다면 이 플러그인은 설치하지 않아도 좋다. 그러나 mylyn 플러그인은 필요할 것이다. (bts 가 용어가 맞던가?-_-a)
아래의 url 을 추가한다.
http://trac-hacks.org/svn/eclipsetracplugin/eclipse/update


또한 [Manage] 를 클릭하여
http://download.eclipse.org/tools/mylyn/update/extras 항목을 체크한다.



그리고 다음 2개의 항목에 대해서 체크 후 [Install] 한다. 만일 jira 를 사용한다면 extras 항목에서 trac 대신 jira 를 선택하면 된다.




* Maven 플러그인 설치
maven 플러그인은 sonatype 의 m2clipse 플러그인을 이용한다.
설치 과정은 svn 플러그인과 동일하다. 다만 업데이트 URL 과 설치 항목에 대해서만 적절하게 설정하면 된다.
필자는 아래와 같이 설정하였다.
(m2eclipse update url : http://m2eclipse.sonatype.org/update )



* Spring IDE 플러그인 설치
스프링을 사용한다면 이 플러그인은 필수다. 물론 없어도 되지만, 사용한다면 엄청.. 유용할것이다
스프링 플러그인 URL : http://springide.org/updatesite

스프링에서 사용하는 부분들에 대해서 적절히 체크한 후 [Install]


끝.

작성자. 편현장(slothink)

작성일. 09-01-13

 

이 문서는 동일한 소스를 이용하지만, 환경에 의해 서로 다른 설정을 사용할 경우 profile filter 를 이요한 maven build 방법을 소개하고 있다. 또한 maven 의 실행에 대해서도 간략하게 설명한다.

 

maven의 명령을 실행하는 방법은 2가지가 있다.

 

l  command 창에서 명령어 직접 입력

l  m2clipse maven/build 명령을 이용하여 실행

 

command 창에서의 명령어 입력

command 창에서의 입력은 이전 개발 환경 구축하기 문서에서 적용하였던 패스 설정에 의하여(M2_HOME 또는 MAVEN_HOME 패스 설정) mvn.bat 을 실행하면 된다.

또한 이것을 실행할 경우엔 해당 pom 의 디렉토리로 이동하여 실행하면 된다.


d:\workspace\vines\vine\edms\edms-webapp>mvn package

 

m2clipse 를 이용한 maven 명령어 입력

프로젝트를 선택한 후 마우스 우클릭을 실행하면 run 항목 하위로 build 2가지를 찾을 수 있다. 단축키가 없는 하위 build 를 실행하여 실행할 속성들을 정의할 수 있다. 단축키가 있는 상위 build 항목은 이전에 실행했던 build 명령을 나열해준다. 단축키를 활용하면 매우편하다.


 

작품을 떨궈내려면 package goal 을 실행하면 된다. 실행방법은 위 2가지 중 어느 것을 선택해도 무방하다. m2clipse 의 경우 run as/maven package 가 이미 존재한다.

 

그러나 사이트별로 프로퍼티가 교체된 작품을 떨구기 위해선 package 실행 중에 profile 을 적용하여 실행하여야한다. 콘솔에선 아래와 같이 입력한다.

 

mvn package –P [profile id]

 

캐논용으로 떨구기 위한 예제는 아래와 같다.


mvn package -P canon



m2clipse 를 이용할 경우엔 profile 설정을 적용하기 위해서 Run as/package 가 아니라 Run as/build 항목을 이용하여 별도의 profile 을 기입해야한다.


위와 같이 실행하면 ${base}/target 디렉토리에 결과물(war,jar,pom 등이 생성된다.)

 

profile 이해하기

그러면 위 profile 은 어떤식으로 돌아가게 되는 것일까?

뒤에서부터 쫓아가보도록 하자.

 

goal 실행시 profile 옵션을 주게 되면(ex. mvn package –P slothink) (실행위치의)pom.xml, (실행위치의)profiles.xml, ${user.home}/settings.xml, ${M2_HOME}/conf/settings.xml 순으로 profile 항목을 찾는다. 이와 같이 찾는 도중에 profile id 가 동일한 경우가 나타나면 해당 profile 에서 선언된 내용을 적용한다.

 

다음은 profiles.xml 에 적용된 내용이다.



위에 경우에 profile 마다 별도의 property 를 설정하고 있다. slothink 의 경우 env 라는 프로퍼티의 값으로 slothink 를 할당하고 있다.

 

위와 같이 profile 을 적용하였다면 해당 적용사항은 pom 에서 사용한다. (사용안할 속성은 당연히 적을 필요가 없다).

 

pom.xml 을 살펴보자.


여기서 주의 깊게 볼 부분은 build/filters build/resources 항목이다. 이것이 의미하는 바는 filtering true 가 적용된 resource 안에 filters 에 등록된 값을 치환하라는 의미이다.

resource 항목은 치환대상이 되며 치환할 값은 filter 에 기술되어있다는 뜻이다. 치환된 resource build 시에 사용된다. 그리고 filter 파일을 선택하기 위해 이전 profile 항목에서 기술된 property 속성이 filter 경로에 사용된 것을 볼 수 있다.(i.e. ${env} )

 

실제 샘플을 보자.

src/main/resource/edms.properties (치환 대상 : 리소스)


 

src/main/filters/edms.properties (치환 값 : 필터)



위와 같이 치환 대상(리소스)은 치환할 부분을 ${[속성명]} 과 같이 기술하며 필터 파일에서는 [속성명]=[속성 값] 과 같이 기술한다.

 

이러한 메커니즘을 이용하여, 각 개발자는 자신의 환경에 맞게 profile filter 를 추가하여 사용할 수 있다.

 

그러나 매번 profile 사용하기 위해서 console 상에서 profile 옵션을 주거나 m2clipse build 항목을 이용하는 것은 불편할 것이다. 이것은 ${user.home}/settings.xml 이나 ${M2_HOME}/conf/settings.xml 에서 기본으로 실행할 profile 을 기술하므로 해결할 수 있다.

 

${M2_HOME}/conf/settings.xml


Maven Definitive Guide 는 sonatype 에서 제공한 온라인북인데(출판도 되었다), maven 에 대해 학습하기에 매우 좋다. 그러나 번역본으로 현재 나온 것은 없으나

http://homo-ware.tistory.com/48
에서 7장까지는 구할 수 있다. 7장까지라면 적어도 maven 이 무엇인가에 대해서는 충분히 알게 할 수 있는 분량이다. 번역을 해준 Elvis Lee 에게 감사를 드린다.

(그리고 whiteship 의 블로그도 많은 도움을 준다. http://whiteship.tistory.com/category/Build/Maven?page=2 )

다음의 내용은 위 문서에서 가져왔다.


원본 : http://www.sonatype.com/community/definitive_guide.html

Copyright

서문

1장. 아파치 메이븐 소개

2장. 메이븐 설치와 실행

I부. 메이븐 예제

II부. 메이븐 심화

8장. POM 최적화와 리팩토링

9장. 프로젝트 객체 모델

10장. 빌드 생명주기

11장. 빌드 프로필

12장. Maven 어셈블리

13장. 속성과 리스소 필터링

14장. 메이븐과 이클립스 : m2eclipse

15장. 사이트 생성

16장. 레파지토리 관리

17장. 플러그인 개발

18장. 다른 언어의 플러그인 개발

III부. 부록

부록 A. Settings 세부 내용

부록 B. 명세 대안들

+ Recent posts