개인이 원하는 Maven으로 Archetype을 직접 만들어보자~
원래는 Maven 사이트의 가이드 문서(http://maven.apache.org/guides/mini/guide-creating-archetypes.html)를 이용하려 하였으나, 검색을 해보니, Arawn 님이 너무나 정리를 잘해주셔서, 이를 참고하여 작성하였습니다.
Maven archetype 만들기
위의 내용을 참고로, 아래와 같이 정리하였는데요. 약간의 사족을 붙여가며 작성해보도록 하겠습니다.
1. Mavne Archetype 프로젝트 생성하기
커맨드 명령 창에서는 아래와 같이 이 Archetype을 위한 Archetype 프로젝트를 생성합니다.
이클립스 플러그인(이하 m2clipse) 을 이용하여 Maven Project로 작성하면 보다 간단하게 작성할 수 있습니다.
(플러그인 사용 화면은 추후 보강)
2. Archetype 프로젝트 내 원하는 프로젝트내, 초기 설정 내용 넣기
일반적인 Maven Project와는 다른 프로젝트 구조가 나타나는데 구조는 아래와 같이 나타납니다.

- archetype-resources/src or /test
: Maven 프로젝트 생성시 기본적으로 존재해야할 파일(java, xml, properties) 을 넣습니다.
- archetype-resources/pom.xml
: Maven 프로젝트 생성시 필요한 빌드정보(dependency) 를 넣습니다. 이 파일이 생성될 프로젝트의 pom.xml 파일이 됩니다.
※ archetype-resource 폴더 내에서의 파일은 Maven 프로젝트 생성시 할당되는 변수(groupId, version 등)들을 이용하여 치환이 가능합니다. (${변수명} 형식)
- META-INF/maven/archetype.xml (archetype discriptor)
: archtype-resources/src or /test 내의 파일 및 경로 정보를 메타데이터 정보로 넣습니다. 이때 분류에 따라,
sources, resources, testSources, testResources siteResources 로 구분합니다.
3. Archetype 프로젝트 패키징 및 배포
Archetype 프로젝트내에 작성을 완료하였다면, mvn install 명령을 통하여 프로젝트내 내용을 패키징하고 Local Repository에 배포를 합니다. 그리고, 생성된 Archetype 프로젝트를 가지고 프로젝트를 생성하려면, Repository 내에, archetype-catalog.xml 파일을 작성하여(기존에 있다면 내용 추가) 저장합니다.
※ archetype-catalog.xml 파일은 mvn archetype:update-local-catalog 명령을 통해서 자동으로 등록하는 방법도 있습니다. 하지만, 위치가. ~/.m2/ 하위에만 저장이 되기 때문에 기본 Repository 를 사용하지 않고 다른 경로로 사용할 경우 찾는데 낭패를 볼수 있으니 주의해야합니다.
4. 생성한 Archetype 프로젝트를 가지고 프로젝트 생성하기
이제 만들어진 Archetype 프로젝트를 가지고 프로젝트로 생성해야 합니다.
커맨드 창에 아래 명령어를 입력하거나, m2clipse를 통해 Local에 있는 archetype을 검색한후, 이를 이용하여 Maven Project를 생성하면 됩니다.(m2clipse를 통해 Local에 있는 archetype를 검색하는 방법은 추후 보강)
간단하게 이클립스를 통하여 프로젝트를 생성하여 첨부해 보았습니다. 참고하실분은 참고해주세요.
원래는 Maven 사이트의 가이드 문서(http://maven.apache.org/guides/mini/guide-creating-archetypes.html)를 이용하려 하였으나, 검색을 해보니, Arawn 님이 너무나 정리를 잘해주셔서, 이를 참고하여 작성하였습니다.
Maven archetype 만들기
위의 내용을 참고로, 아래와 같이 정리하였는데요. 약간의 사족을 붙여가며 작성해보도록 하겠습니다.
1. Mavne Archetype 프로젝트 생성하기
커맨드 명령 창에서는 아래와 같이 이 Archetype을 위한 Archetype 프로젝트를 생성합니다.
mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes
-DarchetypeArtifactId=maven-archetype-archetype
-DarchetypeVersion={version}
-DgroupId={groupId}
-DartifactId={artifactId}
-DarchetypeArtifactId=maven-archetype-archetype
-DarchetypeVersion={version}
-DgroupId={groupId}
-DartifactId={artifactId}
이클립스 플러그인(이하 m2clipse) 을 이용하여 Maven Project로 작성하면 보다 간단하게 작성할 수 있습니다.
(플러그인 사용 화면은 추후 보강)
2. Archetype 프로젝트 내 원하는 프로젝트내, 초기 설정 내용 넣기
일반적인 Maven Project와는 다른 프로젝트 구조가 나타나는데 구조는 아래와 같이 나타납니다.
- archetype-resources/src or /test
: Maven 프로젝트 생성시 기본적으로 존재해야할 파일(java, xml, properties) 을 넣습니다.
- archetype-resources/pom.xml
: Maven 프로젝트 생성시 필요한 빌드정보(dependency) 를 넣습니다. 이 파일이 생성될 프로젝트의 pom.xml 파일이 됩니다.
※ archetype-resource 폴더 내에서의 파일은 Maven 프로젝트 생성시 할당되는 변수(groupId, version 등)들을 이용하여 치환이 가능합니다. (${변수명} 형식)
(예시 1) pom.xml
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
(예시 2) App.java
package ${package};
public class App {
public static void main( String[] args ) {
System.out.println( "Hello World!" );
}
}
package ${package};
public class App {
public static void main( String[] args ) {
System.out.println( "Hello World!" );
}
}
- META-INF/maven/archetype.xml (archetype discriptor)
: archtype-resources/src or /test 내의 파일 및 경로 정보를 메타데이터 정보로 넣습니다. 이때 분류에 따라,
sources, resources, testSources, testResources siteResources 로 구분합니다.
(예시)
<archetype>
<id>nogoon-archtype</id>
<allowPartial>true</allowPartial>
<sources>
<source>src/main/java/App.java</source>
<source>src/main/java/nogoon/NogoonClass.java</source>
</sources>
<resources>
<resource>src/main/resources/conf/spring/ApplicationContext.xml</resource>
<resource>src/main/resources/commons-logging.properties</resource>
<resource>src/main/resources/log4j.properties</resource>
</resources>
<testSources>
<source>src/test/java/AppTest.java</source>
<source>src/test/java/nogoon/NogoonClassTest.java</source>
</testSources>
</archetype>
※ archetype discriptor 에 대한 설명은 http://maven.apache.org/archetype/archetype-common/archetype.html 을 참조해주세요.<archetype>
<id>nogoon-archtype</id>
<allowPartial>true</allowPartial>
<sources>
<source>src/main/java/App.java</source>
<source>src/main/java/nogoon/NogoonClass.java</source>
</sources>
<resources>
<resource>src/main/resources/conf/spring/ApplicationContext.xml</resource>
<resource>src/main/resources/commons-logging.properties</resource>
<resource>src/main/resources/log4j.properties</resource>
</resources>
<testSources>
<source>src/test/java/AppTest.java</source>
<source>src/test/java/nogoon/NogoonClassTest.java</source>
</testSources>
</archetype>
3. Archetype 프로젝트 패키징 및 배포
Archetype 프로젝트내에 작성을 완료하였다면, mvn install 명령을 통하여 프로젝트내 내용을 패키징하고 Local Repository에 배포를 합니다. 그리고, 생성된 Archetype 프로젝트를 가지고 프로젝트를 생성하려면, Repository 내에, archetype-catalog.xml 파일을 작성하여(기존에 있다면 내용 추가) 저장합니다.
※ archetype-catalog.xml 파일은 mvn archetype:update-local-catalog 명령을 통해서 자동으로 등록하는 방법도 있습니다. 하지만, 위치가. ~/.m2/ 하위에만 저장이 되기 때문에 기본 Repository 를 사용하지 않고 다른 경로로 사용할 경우 찾는데 낭패를 볼수 있으니 주의해야합니다.
(예시) $repository_home/archetype-catalog.xml
<archetype-catalog>
<archetypes>
<archetype>
<groupId>com.nogoon.maven.archtypes</groupId>
<artifactId>nogoon-archtype</artifactId>
<version>0.1</version>
<description>Archetype - nogoon-archtype</description>
</archetype>
</archetypes>
</archetype-catalog>
※ archetype-catalog.xml 에 대한 자세한 설명은 http://maven.apache.org/archetype/maven-archetype-plugin/specification/archetype-catalog.html 을 참조해주세요<archetype-catalog>
<archetypes>
<archetype>
<groupId>com.nogoon.maven.archtypes</groupId>
<artifactId>nogoon-archtype</artifactId>
<version>0.1</version>
<description>Archetype - nogoon-archtype</description>
</archetype>
</archetypes>
</archetype-catalog>
4. 생성한 Archetype 프로젝트를 가지고 프로젝트 생성하기
이제 만들어진 Archetype 프로젝트를 가지고 프로젝트로 생성해야 합니다.
커맨드 창에 아래 명령어를 입력하거나, m2clipse를 통해 Local에 있는 archetype을 검색한후, 이를 이용하여 Maven Project를 생성하면 됩니다.(m2clipse를 통해 Local에 있는 archetype를 검색하는 방법은 추후 보강)
mvn archetype:generate -DarchetypeGroupId={generated archtype groupId}
-DarchetypeArtifactId={generated archtype artifactId}
-DarchetypeVersion={version}
-DgroupId={groupId}
-DartifactId={artifactId}
-DarchetypeArtifactId={generated archtype artifactId}
-DarchetypeVersion={version}
-DgroupId={groupId}
-DartifactId={artifactId}
간단하게 이클립스를 통하여 프로젝트를 생성하여 첨부해 보았습니다. 참고하실분은 참고해주세요.
참고 자료 : http://pigtail.net/LRP/printsrv/cygwin-sshd.html
< 윈도우 초기 설정 >
- Administarator 계정으로 로그인
- 현재 Administarator 계정과, 다른 User 계정에 Password를 지정해준다.
< CYGWIN 설치 >
- C:\cygwin 폴더를 생성한후, http://www.cygwin.com/ 에서 다운로드 받은 setup.exe 파일을 폴더에 저장한다.
(Cygwin의 setup.exe 파일은 초기 설치 후에도 cygwin package들을 추가하고 삭제하고 재설치 할때 사용된다.)
- setup.exe 파일을 실행시켜 cygwin을 설치한다.
1) 설치 정보 화면
2) Choose A Download Source 화면에서 Install from Internet 선택
3) Select Root Install Directory 화면 에서 Root Directory 는 C:\cygwin 으로 Install For 는 All User 선택, Default Text File Type 은 Unix/Binary 선택
4) Local Package Directory 는 C:\cygwin -> Select Your Internet Connection 은 DirectConnection 선택
5) Select package to install 화면
+ View 버튼을 클릭하면 버튼 옆에 Full 이라고 표시된다.
+ 목록 중에 openssh, tcp_wrappers, diffutils, zlib 패키지 중 New 칼럼에 skip 이라고 표시되있는 상태이면 skip을 클릭하여 설치 상태로 변경한다.
< 시스템 환경 변수 설정 및 기타 설정 >
- 시스템 등록 정보 화면에서 고급탭의 환경 변수 설정
-> 새로운 변수 설정 : 변수 이름 - CYGWIN, 변수 값 - ntsec tty
-> Path 변수 수정 : 뒤에 ;c:\cygwin\bin 를 추가한다.
< Cygwin 설치후, 실행 및 설정 >
- 권한 문제가 발생할 가능성이 있으므로 아래 세 명령어 실행
# chmod +r /etc/passwd
# chmod +r /etc/group
# chmod 755 /var
- ssh 설정 스크립트 실행
# ssh-host-config -y
privilege separation -> yes
create a local user sshd on this machine -> yes
install sshd as a service -> yes
environment variable CYGWIN= -> ntsec tty
- Windows 사용자 정보와 cygwin좨의 사용자정보를 싱크(중요)
# mkpasswd -cl > /etc/passwd
# mkgroup --local > /etc/group
- ssh 서비스 실행
# net start sshd
or
# cygrunsrv --start sshd
- ssh 서비스 로컬 테스트
#whoami
#ssh localhost
or
#ssh -vvv localhost
or
#ssh "$USERNAME@127.0.0.1"
(사용자 명이 스페이스가 존재한다면, 스페이스 자리에 \[space]를 대신한다. ex> ab cd -> ab\ cd )
처음 접속시, The authenticity of host '....<xxx.x.x.xx>" can't be established......
라는 문구가 나오는데.. 이는 yes라고 답하고 계속 진행한다.
그리고 명령어 입력 프롬포트가 나타나면 다음과 같이 명령한다.
cd /cygdrive/c
ls
ls 명령이 정상적으로 수행이 되, 디렉토리와 파일 리스트가 출력되면 정상이다.
- 윈도우(XP SP2 기준) 방화벽 설정 : 제어판 - 보안센터 - Windows 방화벽 - 예외 탭
1) 포트 추가 설정
: 포트추가 화면에서 이름 SSH 포트번호 22 로 설정하고 TCP 선택
2) 프로그램 추가 설정
: 프로그램 추가 설정에서 프로그램 경로를 C:\cygwin\bin\ssh.exe 를 설정
- 원격지에서 접속 테스트
-> 원격지에서 Putty나 기타 클라이언트 프로그램에서 접속 확인
-> 접속이 되지 않을 경우, /etc/hosts.deny , /etc/hosts.allow 파일확인(참조 링크 확인)
-> 참고사항 : SSHD 가 실행된 이후로, 윈도우의 환경 변수(특히 PATH)를 변경하면 적용되지 않는다. 윈도우 서비스의 SSHD를 재시작하거나, 윈도우를 재시작하면 된다.
더욱정리가 잘되어있는 사이트는 요아래에 있으니 참고해주세요~~
처음 Action Script를 접했을때, Object 타입의 객체에 as 문 뒤에 형 변환(Type Casting) 할 클래스를 넣어주면 형변환이 되는 줄알고.. "아~ 그냥 그렇구나.." 라고 이해하고 넘어갔었다.
그런데..
var i:i = 1;
var intStr:String = String(i);
흐음.. 클래스이름과 함께 괄호로 감싸면 또 타입캐스팅이 되는줄 알고.. 둘다 가능하구나.. 그런데.."as" 가 더 쓰기 편하니 "as" 만 쓰자.. 하고.. 넘어갔다.
그런데 어플리케이션을 만들다가.. 문제가 발생하였다.
var i:int = str as int
로 썻더니.. 계속 i 값이 0 으로 넘어왔다.. 왜이래? ㅡㅡ;
ActionScript 3.0 메뉴얼을 확인해보니, as 는 연산자로써, 표현식 즉 객체가 지정된 데이터 타입의 멤버인지 확인할 수 있다고 한다. 정확히 말하면, 데이터 타입을 검사하는 용도로 만들어진 것이었다.
데이터 타입을 검사하는 용도 3 형제를 먼저 알아보면..
◆ is 연산자
정확한 상속 계층 구조를 검사하며 객체가 특정 클래스의 인스턴스인지 뿐아니라 객체가 특정 인스턴스를 구현하는 클래스의 인스컨스인지 여부를 확인하는 데 사용한다.
var mySprite:Sprite = new Sprite();
trace( mySprite is Sprite ); -> true
trace( mySprite is DisplayObject ); -> true
trace( mySprite is IEventDispatcher ); -> true
trace( mySprite is Sprite ); -> true
trace( mySprite is DisplayObject ); -> true
trace( mySprite is IEventDispatcher ); -> true
◆ instanceof 연산자
3.0 이전 버젼에서 instanceof 가 is 연산자 역할을 수행했지만, 3.0버젼에서는 거의 쓰지 않는 듯하다. 이는 상속관계는 표현을 해주지면. interface구현 여부를 확인하는데는 확인을 할수 없다.
왜 이렇게 바꾸었을까...ㅡㅡa.(아시는분 댓글 부탁드립니다. ㅜ.ㅜ)
var mySprite:Sprite = new Sprite();
trace( mySprite is Sprite ); -> true
trace( mySprite is DisplayObject ); -> true
trace( mySprite is IEventDispatcher ); -> false
trace( mySprite is Sprite ); -> true
trace( mySprite is DisplayObject ); -> true
trace( mySprite is IEventDispatcher ); -> false
Flex Builder에서 확인해보니..얘네들도 Warning 표시를 내여 "이제 instanceof 연산자는 사용되지 않습니다. is 연산자를 대신 사용하십시오." 라는 메시지를 출력해주네..ㅡㅡ;;
◆ as 연산자
is 연산자와는 달리..as 연산자는 boolean 값을 반환하지 않고, true 대신 표현식의 값을 반환하고, false 대신 null을 반환한다.
var mySprite:Sprite = new Sprite();
trace( mySprite as Sprite ); -> [object Sprite]
trace( mySprite as DisplayObject ); -> [object Sprite]
trace( mySprite as IEventDispatcher ); -> [object Sprite]
trace( mySprite as UIComponent ); -> null
trace( mySprite as int ); -> null
trace( mySprite as Sprite ); -> [object Sprite]
trace( mySprite as DisplayObject ); -> [object Sprite]
trace( mySprite as IEventDispatcher ); -> [object Sprite]
trace( mySprite as UIComponent ); -> null
trace( mySprite as int ); -> null
이제야 궁금증이 풀렸다.
왜.. as 연산자를 사용해서.낭패를 봤는지..이는 상속 계층을 검사하여 해당 타입이 맞으면, 해당 타입의 객체로 반환을 하는 역할을 수행하기 때문에, 데이터 형 변환과는 좀 거리가 있네..
"DataType()" 형태의 데이터 형 변환은 Primitive Type의 명시적 형 변환과 관련이 더 깊다는 사실을 깨닫고. 그부분은 담에...
정리도 어렵구나..ㅜ.ㅜ

archtype_sample.zip
Prev
