요새는 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

허드슨 마스터 서버외에 다른 서버에서 허드슨 마스터의 서버를 통제받고 싶다면 허드슨 슬레이브를 추가하면 된다. 

1.슬레이브 서버에 허드슨 슬레이브 jar 다운로드

우선, 슬레이브가 추가될 서버에서 마스터에 접속해 라이브러리를 받아야한다.

다음과 같이 허드슨 마스터 URL 하위에 붙여서 라이브러리를 다운 받는다.

download_slave.sh
shell> mkdir hudson
shell> cd hudson
shell> wget http://yourserver:port/jnlpJars/slave.jar

2. 관리콘솔에서 허드스 슬레이브 서버 등록

hudson 관리콘솔에서 Manage/Manage Nodes 페이지로 접속한다.


2.1 '신규노드'를 클릭한다.



2.2 노드명 입력

노드명을 입력한다. 슬레이브가 설치되는 서버명을 입력하고 'OK' 를 클릭한다.



2.3 기본 정보 입력

노드의 기본 정보를 입력하는데, 주요 필수 속성은 다음과 같다. 잘 입력해주자.

PropertyDescriptionExample
Name관리콘솔에서 식별하는 슬레이브 서버(노드)명

demo-app

 

#of executors
작업이 한번에 돌아가는 수. 일반적으로 cpu 코어의 수 만큼 맞춘다.1
Remote FS root

슬레이브 서버의 hudson slave 가 설최드는 물리적인 경로

slave.jar 파일이 받아진 위치를 지정한다.

/home/slothink/hudson
Launch Method

마스터와 슬레이브 연결 지정방식이다.

  • Launch slave agents vis JNLP : JNLP 프로토콜을 이용해서 슬레이브에서 마스터로 접속한다.
  • Launche slave via execution of command on the Master : 마스터에서 커맨드 입력을 통해 슬레이브로 접속한다.

여기에서는 JNLP 프로토콜을 사용하도록 한다.

 



2.4 Tool Location 입력

그리고 엄청 중요한 노드 속성들을 입력한다.

Node Properties 의 Tool Locations 를 설정하지 않으면, 해당 툴을 이용한 작업들이 원격(슬레이브)에서 실행되지 않는다.

슬레이브 서버에 존재하는 툴에 대한 물리적인 경로를 입력해준다.



'save' 를 클릭한다. 그러면 다음과 같이 추가된 노드를 볼 수 있다. 



아직 슬레이브 연결을 하지 않았으므로 공포의 X가 보인다.

3. Hudson Slave 연결

이제 노드 관리 화면에서 방금 추가한 노드를 선택하면 다음과 같은 화면이 나온다.



여기서 나온 실행명령어를 슬레이브 서버의 허드슨 디렉토리(slave.jar 있는 곳)에서 실행한다.

slave-start.sh
java -jar slave.jar -jnlpUrl http://source.comas.co.kr:12080/hudson/computer/demo-app/slave-agent.jnlp

콘솔에 Connected 라는 메시지가 나오고 관리 콘솔에 다음과 같이 나오면 정상 연결된것이다.



4.작업 생성

이제 작업을 원격에서 실행할 수 있도록 하면 된다.

4.1 새 작업 생성

'새 작업' 을 클릭한다. 

기본 작업명 하고, 이건 알아서 스스로 어린이.



4.2 실행할 노드 선택

그리고 'Restrict where this job can be run' 을 체크한다.

작업을 실행할 슬레이브 노드 선택방법에 따라 다음과 같이 선택한다.

ValueDescription
Node and label menu특정한 노드를 선택한다.
Advanced Node and Label expressions

표현식으로써 여러개의 노드를 선택할 수 있다. 예로 들어

aix1 -> aix2 -> demo-app 라고 지정하면, aix1 번에서 작업 후, aix2 에서 작업 후, 마지막으로 demo-app 에서 작업하게 된다.

자세한 것은 오른쪽의 도움말 참조.


그리고 저장하고 실행해본다.


Building remotely on ... 가 나오면 이제 울면 된다. TT-TT 

이제 진정한 노가다 배포에서 해결할 준비가 되었다.

Nexus 에 배포(deploy)할 때, 400 에러가 날 경우 (보통 릴리즈 버젼) 에는 넥서스의 리파지토리의 중복 등록 허용이 불가로 설정되어있을 경우 그러하다.

err.log
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.5:deploy (default-deploy) on project ecm-parent: Failed to deploy artifacts: Could not transfer artifact com.comas.solme.ecm:ecm-parent:pom:5.0.0 from/to releases (http://nexus.yourcompany.co.kr:8081/nexus/content/repositories/releases): Failed to transfer file: http://nexus.yourcompany.co.kr:8081/nexus/content/repositories/releases/com/comas/solme/ecm/ecm-parent/5.0.0/ecm-parent-5.0.0.pom. Return code is: 400 -> [Help 1]

다음과 같이 'Allow Redeploy'로 바꿔주자.



  1. BlogIcon 서류 2013.12.17 16:03

    구글링하다 따뜻한 한글 문서가~ 권한문제인 줄로만 알고 삽질하다ㅋ 감사합니다.

    • BlogIcon slothink 편현장 2014.01.02 11:06 신고

      도움이 되셨다니, 참 다행이네요. 댓글까지 달아주니, 포스팅 하는 것에 대한 보람을 느낍니다. 감사해요 ㅠ_ㅠ

지금까지 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 망하나? 

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

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


이런 경우가 있습니다. 이클립스에서 컴파일을 하면 문제가 되는 패키지 없이 컴파일이 잘되는데, 유독 maven 에서 클린을 해서 날려버린다음 빌드를 하려하면 특정 패키지를 못 찾는 경우가 있습니다.
도대체 감을 못잡으시겠죠?

원인은 간단합니다. 오타와 이클립스 빌드 구조의 한계죠.
예를 들어 pom.xml 에서 depdency 하는 것이 다음과 같다면 발생합니다.

<dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-activation_1.1_spec</artifactId>
            <version>1.0.2</version>
            <scope>provide</scope>
</dependency>

provide 가 아니라 provided 죠?

<dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-activation_1.1_spec</artifactId>
            <version>1.0.2</version>
            <scope>provided</scope>
 </dependency>


가 맞습니다. 그럼 이클립스에서는 왜 잘 되나구요?
이클립스는 provide 나 compile 이나, test 나 똑같이 빌드패스에 등록을 하여 사용합니다. 즉, 구분을 하지 않습니다. 따라서 이클립스 프로젝트의 빌드에서는 scope 를 처리 안한다는거죠. 그래서 빌드가 됩니다

반면! 메이븐이 컴파일 할 경우에는 scope 를 따지니깐, 오타가 있으면 무시해버리죠. 즉, 저 패키지를 가져오지 않아 빌드가 실패가 됩니다.

이넘 때문에 오랜 시간 고생하고 있었네요. 매번 이클립스 빌드 후 인스톨...ㅡㅡ;;
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 repository 에서 소스를 내려받는 명령어입니다.
오픈소스도 마구마구 내려받아서 디버깅 할 수 있다는거 참 감격이죠~

mvn dependency:sources
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]


끝.
오랫만에 글을 남겨본다. 바쁜 일정 속에서. 블로그에 글을 남겨도 그닥 의미없는 거 같고.
그냥 회사 위키에나 남기는게 나은거 같기도 하고..
어찌 되었든 중요하지 않더라도 이제부터 하나하나 그냥 잡글이라도 다 남겨보자 한다.
무심코 들어오는 블로거들에게 귀찮다면 죄송한 일이다만;;

----------------------------------

svn 저장소가 변경될 일이 있다. 이를테면 사내 svn 저장소의 ip 가 바뀌었다든지.
svn 서버 이동은 svn 저장소만 카피해서 옮겨가면 되지만 클라이언트는 변경작업을 해주어야한다.

설마, 다시 지우고 내렵다는다던가. 그러진 않겠지?;

Eclipse 메뉴에서 SVN Repository View 를 활성화한다. View 안에는 자신이 기등록된 svn 정보가 등록되어있다.

1. 변경할 저장소를 선택한 후 우클릭하여 [Relocate] 를 실행한다.


2. 저장소가 사용되는 프로젝트가 나열된다.[Next] 를 클릭한다.

3. 변경할 새로운 주소를 입력한후 [Finsih] 를 클릭한다.

4. 해당 저장소에 대하여 계정 확인이 필요하다면 아래와 같은 창이 나타날 수 있다. 계정 정보를 입력할 수 있는 [Accept Permanently] 를 클릭한다.

5. 비밀번호를 입력한 후 [OK]을 클릭한다.


6. 끝



  1. 궁금히 2015.04.28 12:01

    궁금한게 있어요!

    이렇게 하면
    기존에 히스토리 들은 어떻게 되나요?
    각 프로젝트의 히스토리들도 전부 이전백업 되나요?

CVS

01. 기본 설정
환경 변수 설정
c:\>set CVSROOT=:pserver:127.0.0.1:<repository name>
<repository name>에는 시스템 저장소이름 지정

ex)set CVSROOT=:pserver:127.0.0.1:/cvsrepo

또는 환경변수에 CVSROOT 값에 입력한다.

:pserver:127.0.0.1:<repository name>


02. 사용자 추가
c:\>cvs login
(패스워드는 현재 로그인한 OS 계정의 패스워드를 입력)


cvs 명령을 사용하여 사용자를 추가

cvs passwd -a -r <OS사용자 이름> <CVS 서버 사용자 이름>

ex) c:\>cvs passwd -a -r administrator orange


<os 사용자 이름>에는 현재 윈도우에 존재하는 사용자 이름을 지정

<cvs 서버 사용자 이름>에는 cvs 서버에 접근할 때 사용할 사용자 이름을 지정


주의 ) cvs 파일을 다른 시스템에 옮길시,  os 사용자 계정도 동일하게 생성해야 한다.

+ Recent posts