Whiteship's Note


아키타입(메이븐 프로젝트 베이스) 만들기

Build/Maven : 2008.11.03 16:43


메이븐에는 아주 괜찮아 보이는 기능이 하나 있습니다. 프로젝트 기본 구조를 생성해주는 아키타입이라는 기능입니다. 매번 프로젝트 시작할 때마다 pom.xml에 필요한 라이브러리 정의한 것조차 매우 귀찮습니다. 웹 프로젝트일 경우에는 자주 사용하는 설정 파일들까지도 매번 다른 프로젝트에서 복사해서 붙여 넣던지 이클립스에 등록한 템플릿 코드를 사용해서 찍어내다시피 합니다. 이런 것들을 전부 처음부터 프로젝트 시작할 때 가지고 있는 상태에서 시작한다면...정말 좋겠죠? ㅎㅎ 하지만 공짜는 없었습니다.

OSAF 웹 애플리케이션 샘플을 아키타입으로 만들어서 OSAF를 사용한 웹 개발을 편리하게 할 수 있는 기능을 제공하려고 마음 먹고 아키타입 개발을 시작했습니다. (원래 오전에 할려고 했는데 블로깅하다보니. 밥먹을 시간이고 밥먹고 좀 놀다보니;;; 어느새 2시..ㄷㄷㄷㄷ)

http://maven.apache.org/plugins/maven-archetype-plugin-1.0-alpha-7/examples/archetype.html

위 링크에 나와있는 맨땅에서 아키타입을 만드는 방법은 완전 완전 완전 완전 완전 노가다입니다. pom.xml 만 살짝 수정하는 아키타입을 만들꺼라면 상관없는데.. 제가 만들고자 하는 아키타입을 기본으로 제공할 파일들이 엄청나게 많습니다. 그럴 때 저런 방법으로 아키타입을 만드는건.. 그냥... 너 좀 고생해봐라.. 라는 것 밖에 안 됩니다.

제가 선택한 방법은

http://maven.apache.org/plugins/maven-archetype-plugin/advanced-usage.html


링크에서부터 느껴지는 포스. 어드밴스드.. 하지만 이 녀석으로 아키타입 만드는 방법도 노가다가 필요합니다. 그다지 행복하진 않았습니다.

만드는 방법을 보죠. 아주 간단합니다.



0. 프로젝트 정리

기존 프로젝트에서 아키타입에 포함시키지 않을 폴더와 파일을 제거합니다. 버전 관리를 하고 있는게 안전하겠죠.

특 히 제거해야 할 폴더는 이클립스 빌드 패스에 output 폴더로 지정되어 있는 폴더 그걸 삭제해 줍니다. 그럼 폴더만 다시 생기고 그 안에 있는 파일과 폴더들은 삭제됩니다. 기본적으로 그 폴더는 Package Explorer에선 안 보이고 Navigator에서 봐야 보일 겁니다.

1. mvn archetype:create-from-project


아키타입으로 만들 프로젝트로 이동해서 위 명령을 입력해 줍니다. 아.. 아닙니다. 주의할 것이 있는 프로젝트 기본 인코딩이 UTF-8이면 그냥 저렇게 실행해도 되지만, 저처럼 euc-kr이면 -DdefaultEncoding=euc-kr 옵션을 추가합니다.

2. 생성된 파일들 확인(노가다)

위 명령을 실행하면 target/generated~~/archytype/ 밑에 아키타입에 추가할 파일들이 쫙 보입니다. 그 파일들을 전부 열어서 원하는 대로 생성될지 확인합니다. 특히 인코딩과 ${packageInPathFormat} 같은걸 제대로 확인합니다.

3. 로컬 저장소에 설치합니다.

target/generated~~/archytype/ 폴더로 이동해서 mvn install을 실행합니다. 그럼 로컬 저장소에 아키타입이 설치됩니다.

4. 로컬 저장소의 아키타입을 이용해서 프로젝트를 생성합니다.

mvn archetype:generate -DarchetypeCatalog=local

이 명령어를 사용하면 아키타입 목록을 메이븐 중앙 저장소가 아니라 로컬 저장소에서 읽어옵니다. 이 목록에 위에서 설치한 아키타입이 보일 겁니다. 그 번호를 선택해줍니다.

그리고 필요한 정보를 줘서 프로젝트를 생성하면 됩니다.

5. 원격 저장소에 배포

최종적으로 프로젝트를 확인하고 원하는대로 생성이되면 원격 저장소에 배포해서 다른 개발자도 이용할 수 있게하면 되겠습니다.

배포하는 방법은 mvn install하던 장소로 이동해서 mvn deploy를 하면 되겠죠. 간단 간단.

ps: 한글 문제는 해결했지만, 패키지가 동적으로 안 바뀌는 문제가 남아있습니다. -_-;; 흠... 이상하네. package명을 주면 만들 때 알아서 바껴야지 왜 패키지는 고정적으로 만들고 import 문에 있는 package만 바뀌는거얌.. 어쩌라구 ㅠ.ㅠ


top


Spring Dynamic Modules Maven Archetype

Spring DM/Appendix D : 2008.07.09 11:16


스프링 DM은 메이븐 아키타입archetype을 제공하여 스프링 DM 번들 개발 시에 사용할 수 있는 자바 프로젝트 기본 틀을 제공한다. 아키타입을 실행하려면 다음의 명령어를 사용하면 된다.

mvn archetype:generate

메이븐 플러그인이 가용한 archetype을 보여줄 것이다. 그 중에서 spring-osgi-bundle-archetype을 선택하면 된다.(현재 32번으로 설정되어 있다.) 그리고 프로젝트에 필요한 몇 가지 정보를 입력한다.(그룹id, 아티팩트id, 버전, 패키지) 가용한 모든 아키타입과 버전은 여기를 참조하라.

물론 archetype:create를 사용해서 직접 아키타입을 설정하여 프로젝트를 생성할 수도 있다.

mvn archetype:create \
-DarchetypeGroupId=org.springframework.osgi \
-DarchetypeArtifactId=spring-osgi-bundle-archetype \
-DarchetypeVersion=   \
-DgroupId=<your-project-groupId>  \
-DartifactId=<your-project-artifactId> \
-Dversion=<your-project-version>

(과연 누가 저렇게 쓸까;;; 오타 없아 커맨드 창에 저걸 전부 입력 할 수 있는 사람~?)

둘 모두 같은 프로젝트 구조를 생성해준다. 그 안에 두 개의 스프링 설정 파일 src/main/resources/META-INF/spring/bundle-context.xml 와 src/main/resources/META-INF/spring/bundle-context-osgi.xml 가 있다. 프로젝트는 OSGi 번들로 패키지 형태가 설정되어 있다.

프로젝트에 MANIFEST.MF 파일이 없는데, 이 건 메이븐의 bnd 플러그인으로 자동 생성한다. 따라서 번들을 생성하고 싶으면 다음과 같이 하면 된다.

mvn package

번들 말고, MANIFEST.MF 파일만 생성하고 싶을 때는 다음과 같이 한다.

mvn org.apache.felix:maven-bundle-plugin:manifest

D.1. 생성한 프로젝트 살펴보기
  • OSGi 번들로 패키징 함.
  • MATA-INF/MANIFEST.MF 는 자동 생성함.
  • src/main/java/<package> 번들이 공개할 패키지
  • src/main/java/<package>/internal 번들이 공개하지 않을 패키지
  • src/main/resources/META-INF/spring/bundle-context.xml 번들 내부에서 사용할 스프링 설정 파일
  • src/main/resources/META-INF/spring/bundle-context-osgi.xml OSGI 관련 스프링 설정 파일
  • .project, .classpath, 그리고 build.properties 파일은 이 프로젝트를 이클립스 PDE 플러긴 프로젝트로 인식하게 해 줌.



'Spring DM > Appendix D' 카테고리의 다른 글

Spring Dynamic Modules Maven Archetype  (0) 2008.07.09
top


Maven의 archetype:create DEPRECATED 되다.

Build/Maven : 2008.05.13 21:14


이런.. 아랫 글은 쓰자마자 Deprecated 해야겠네요.

mvn archetype:create 어쩌구 저쩌구를 실행하고 콘솔에 뜨는 메시지를 잘 보면, generate로 Deprecated 됐다는 메시지를 볼 수 있습니다. 돌리다가 나중에 해봐야지 그러고 그냥 지나쳤다가, 토비 사부님께서 언급하셔서 실행해보고 놀랐습니다.

사용자 삽입 이미지

처음엔 저렇게 중간에 한 번 확인하는 기능이 추가됐구나.. 어째 좀 귀찮을 수도 있겠는데.. 하고 넘어가려다 다시 mvn archetype:generate만 쳐보라고 하셔서 쳐봤더니..

어머나..
사용자 삽입 이미지

아키타입을 선택하고 그룹 아이디, 아티팩트 아이디, 버전, 기본 패지키를 입력할 수 있게 되었습니다. 잘 보시면 32번에 스프링 DM 프로젝트도 있습니다.

에구구.. 아랫글은 쓰자마자 삶이 끝나네요. 하루살이도 아니고 한시간살이급 포스팅이었습니다.

저 목록들은 archetype-catalog.xml에서 읽어오는데, Q4E 플러그인을 사용해서 커스텀 아키타입을 설정하는 방법도 있습니다.
top


Archetype 만들기

Build/Maven : 2007.12.21 11:49


참조 : http://sonatype.com/book/archetypes.html#creating_your_own_archetypes

새로운 프로젝트 구조를 만들고 싶을 때 사용합니다.

1. 프로젝트 생성

mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes
                     -DarchetypeArtifactId=maven-archetype-archetype
                     -DarchetypeVersion=1.0
                     -DgroupId=com.mycompany
                     -DartifactId=my-archetype

2. pom.xml 파일 수정하기

이곳에서 기본 소스 디렉터리 설정, 기본으로 사용할 의존성들을 설정합니다.

3. src/main/resources/META-INF/maven/archetype.xml 파일 작성하기

특정 파일을 리소스로 등록하는 xml 파일 인듯 합니다.
<archetype>
  <id>my-archetype</id>
  <allowPartial>true</allowPartial>
  <resources>
    <resource>src/main/resources/META-INF/MANIFEST.MF</resource>
  </resources>
</archetype>

토비님께서 이 파일을 자동으로 만들어주는 애플리케이션을 만들어 두셨습니다.
Maven archetype 설정파일 자동생성기 - ArchetypeXmlWriter

4. 설치

mvn install

5. 새로운 아치타입으로 프로젝트 생성하기

mvn archetype:create -DarchetypeGroupId=com.mycompany \
                     -DarchetypeArtifactId=my-archetype \
                     -DarchetypeVersion=1.0-SNAPSHOT
                     -DgroupId=com.mycompany \
                     -DartifactId=my-project \


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

이클립스용 Maven 플러그인 Q4E  (10) 2008.04.18
기본적인 managed dependency 사용법  (2) 2008.04.17
Managed Depedency 네 녀석의 정체를 드디어 알았다.  (0) 2008.04.17
Managed dependency는 무슨 뜻인가요?  (0) 2008.04.14
Maven을 쓴다고 해서 종속성을 안중에서 Out 시킬 수 있느냐?  (2) 2008.03.03
Archetype 만들기  (4) 2007.12.21
Assemblies  (0) 2007.12.04
Maven 괜찮은데~  (0) 2007.12.04
Site Generation  (0) 2007.12.03
http://mvnrepository.com/  (0) 2007.12.02
Profile  (0) 2007.11.30
top


Archetype

Build/Maven : 2007.11.29 14:21


Archetype은 한국어로 원형(prototype), 전형과 같은 뜻이라고 네이버 사전이 알려줬습니다. Maven에서도 그와 비슷하게 프로젝트의 기본 레이아웃 구조를 생성할 때 사용할 템플릿으로 사용하고 있습니다. RoR의 scaffold랑 비슷한 것 같네요.

archetype:create Goal을 실행하면 다음과 같은 구조의 기본 Archetype을 만들어 줍니다. 이것을 quickstart라고 하며, Hello World 를 출력하는 자바 코드를 가지고 있습니다.

mvn archetype:create -DgroupId=com.mycompany -DartifactId=my-proj

my-proj
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- com
    |           `-- mycompany
    |               `-- App.java
    `-- test
        `-- java
            `-- com
                `-- mycompany
                    `-- AppTest.java

이런 프로젝트 구조를 만들어 낸 기반은 META-INF/maven/archetype.xml 리소스 정의 파일과 src/main/resources/archetype-resources 디렉터리 밑에 위치한 Archetype 리소스 파일들 입니다.

maven-quickstart-archetype
|-- pom.xml
`-- src
    `-- main
        `-- resources
            |-- META-INF
            |   `-- maven
            |       `-- archetype.xml
            `-- archetype-resources
                |-- pom.xml
                `-- src
                    |-- main
                    |   `-- java
                    |       `-- App.java
                    `-- test
                        `-- java
                            `-- AppTest.java

Maven에서 가용한 Archetype들은 http://repo1.maven.org/maven2/org/apache/maven/archetypes/ 에서 확인할 수 있습니다.
사용자 삽입 이미지
위에있는 Atchetype 중에서 맘에 드는 것이 없거나, 자신이 자주 사용하는 프로젝트 템플릿이 있다면 그것을 mvn install로 등록하여 사용할 수도 있습니다. 자세한 내용은 http://sonatype.com/book/archetypes.html
위 글의 후반부에는 사용자 정의 archetype 구성에 대하 나왔습니다.

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

Assemblies  (0) 2007.12.04
Maven 괜찮은데~  (0) 2007.12.04
Site Generation  (0) 2007.12.03
http://mvnrepository.com/  (0) 2007.12.02
Profile  (0) 2007.11.30
Archetype  (0) 2007.11.29
Plugin  (4) 2007.11.28
Build Lifecycle(site)  (0) 2007.11.27
Build Lifecycle(default 자세히)  (0) 2007.11.27
Build Lifecycle(default)  (0) 2007.11.27
Build Lifecycle(clean)  (2) 2007.11.27
top