세미나:Appfuse2.x

From JCFWiKi

Jump to: navigation, search

Appfuse2.x을 다 함께 한 번 살펴봅시다. 뭘 받으란 얘긴가 하고 찾아봐도 다운받을 것은 없고 주어진 것은 maven2 커맨드 명령어 하나뿐이죠. 이게 Maven2의 archetype이란 겁니다. 우리도 애플리케이션 뼈대를 제공하려면 이런 형식으로 제공하면 좋지 않을까요?

하여간에 뭘 어찌 시작할지 모르겠으니 한 번 받아보고 돌려보고, 구경을 조금 한 다음에 어떻게 할 지 결정하도록 하겠습니다.

목차

[편집] AppFuse 2.0 홈페이지

AppFuse2.0 홈페이지 한글번역 (원문)


그림:warning.gif

커맨드라인 및 이클립스의 실행 PATH의 우선순위에 JRE가 아닌 JDK를 놓는다.

그래도 java.home 환경변수가 jdk 내의 jre 디렉토리로 잡히게 된다.

PATH에 JRE를 놓을 경우 struts2-core.jar 등의 artifact에서 tools.jar를 못 찾는 경우가 생긴다.

[편집] 그럼 한 번 받아볼까

이제부터 난항이다. 뭔가 그럴싸한 느낌은 들었는데 막상 받으려고 해보니 사내 침입탐지 시스템인지 하는 것에서 jar 파일 다운로드를 막는다. 장과장님이 네트워크 담당자와 통화해서 우리의 자랑스런 internal repository 서버와 central repository간의 전송은 뚫었다.

그러나 이게 다가 아닌 것이, appfuse는 또 자신들의 repository를 별도로 가지고 있어서 거기에만 있는 artifact들이 있고, 일부 dependency들은 그쪽에서 다운방아야한다. 그런데 또 침입탐지시스템에 걸리는 것 같다. 흠.

  1. settings.xml 설정 파일을 수정한다.
  2. mvn 커맨드들을 맘대로 이용한다.

Proximity에 프록시 저장소를 추가는 할 필요 없고 그냥 central을 공동으로 세팅해놓으면 되고 없는 artifact는 pom.xml 파일에 설정된 저장소 위치 쪽으로 다시 확인을 하게 되므로 그냥 둔다.

참고 : | AppFuse 2.0 퀵스타트 가이드

위 가이드 중 Struts2 Basic를 가지고 해보도록 하겠다.

Struts 2 Basic

mvn archetype:create 
-DarchetypeGroupId=org.appfuse 
-DarchetypeArtifactId=appfuse-basic-struts 
-DremoteRepositories=http://static.appfuse.org/repository 
-DarchetypeVersion=2.0-m5 
-DgroupId=com.mycompany.app 
-DartifactId=myproject

잠깐 위의 archetype 플러그인의 create 골이 가져오게 될 부분을 살펴보자.

  • 저장소 위치 : http://static.appfuse.org/repository
  • 디렉토리는 그룹아이디가 org.appfuse 니까 org/appfuse/
  • 서브디렉토리는 아티팩트 아이디가 appfuse-basic-struts 에 버전 2.0-m5니까 appfuse-basic-struts/2.0-m5

그림:repository of appfuse-basic-struts archetype.jpg


이러면 현재 디렉토리 밑에 pom.xml 파일을 포함한 기본 프로젝트 디렉토리를 생성해준다.

 D:.
 └─src
     ├─main
     │  ├─java
     │  │  └─com
     │  │      └─mycompany
     │  │          └─app
     │  ├─resources
     │  │  └─META-INF
     │  └─webapp
     │      ├─common
     │      └─WEB-INF
     ├─site
     └─test
         ├─java
         │  └─com
         │      └─mycompany
         │          └─app
         └─resources

[편집] 빌드 프로파일

Appfuse 2.0을 처음에 실행하려고 하면 MySQL이 기본 데이터베이스로 세팅되어 있다. 그러나 깔기 싫은 본인, H2를 이용하기로 했다. 어떻게 처리하면 될까?

간단하게 mvn 커맨드 끝에 -P h2를 넣어주기만 하면 된다. 이것은 Maven2의 빌드 프로파일 기능으로 하나의 POM 파일을 가지고 여러 가지 Dependency를 처리할 수 있도록 하는 기능이다. Oracle을 이용하려면 -P oracle을 넣어주고, pom.xml 파일 맨 아래 부분 쯤에 있는 Oracle 프로파일의 프로퍼티들을 수정해주면 된다.


[편집] Eclipse 프로젝트로 임포트

mvn으로 프로젝트 파일 뼈대는 받아왔다. 이제 뼈대 위에서 작업을 시작하기 위해 편안한 이클립스 IDE 환경으로 임포트 시켜보자.

그림:forbidden.gif

현재 플러그인은 이클립스 WTP 프로젝트를 제대로 생성하지 못하고 있다. 컴파일이 전혀 안되고 있으므로 좀 더 조사가 필요하다.

그림:check.gif

m2eclipse 플러그인이 있으면 좀 더 편리하게 이용할 수 있으나 없어도 라이브러리 추가/삭제 시 mvn 커맨드를 이용해야한다는 점 빼고는 별 문제는 없다.


[편집] maven-eclipse-plugin

이클립스 프로젝트 파일, 클래스 파일 및 세팅 디렉토리를 생성시켜준다. 이 플러그인이 제공하는 goal로는 clean, eclipse 등등이 있다. (자세한 설명은 여기로)

  • mvn eclipse:clean을 하면 .project, .classpath, .settings 등의 이클립스 프로젝트 관련 파일들이 삭제가 된다.
  • mvn eclipse:eclipse를 하면 이클립스 프로젝트 파일들을 업데이트(주로 추가?) 시켜준다. 기존에 있는 경우 기존 항목을 삭제하지 않는다.


아쉬운 점은 처음 세팅할 때 eclipse classpath에 M2_REPO라는 Variable을 로컬 Maven 저장소 위치로 해서 추가해주어야하는 번거로움이 있다는 점이다. mvn 커맨드를 이용하거나 이클립스에서 M2_REPO Variable을 추가시켜주어도 된다.


[편집] 이클립스 프로젝트 속성에 maven을 추가

그림:warning.gif

이클립스 플러그인인 m2clilpse 을 이용하였을 경우 이용할 수 있는 방법이다.

그림:forbidden.gif

현재 버전의 m2eclipse는 사용자별 setting.xml을 읽지 못하는 것 같다. 특히 repository 디렉토리 위치는 사용자 디렉토리의 .m2/repository로 고정되어 있다.

이클립스에서 해당 프로젝트의 컨텍스트 메뉴를 보면 Maven 메뉴의 Enable Dependency Management 항목을 선택해 준다. 그러면 Maven2 Dependencies라는 Container가 생기고 그 안에 라이브러리들이 들어가 있는 것을 볼 수 있다.

이제 프로젝트 루트 디렉토리에 있는 pom.xml 파일의 dependency를 수정하게 되면 플러그인에 의해 프로젝트 클래스 경로가 자동으로 추가/삭제 된다.

[편집] eyecandy를 이용하는 방법

새 프로젝트를 AppFuse 2.0 스타일로 만들어주는 이클립스 플러그인인데, 아주 보잘 것 없는 플러그인이라고 조촐하게 소개를 하고 있다.

이 플러그인의 지속적인 지원 여부는 알 수 없다.


Archetype 생성 가이드 (원문보기)

Maven Plug-in 가이드 (원문보기)

[편집] AppFuse 2.0 전체 소스 받아보기

AppFuse가 프로젝트를 만드는 프로젝트이다보니 프로젝트만 받아서는 전체 모양을 알 수가 없다. 특히 핵심 소스 부분이 class jar로 묶여있어 궁금증을 가중시킨다.

그래서 전체 소스를 받아보기로 했다.

  • Subversion 1.x client
svn checkout https://appfuse.dev.java.net/svn/appfuse/trunk/ appfuse --username guest

패스워드 : ""


[편집] IDE 작업환경 세팅하기

AppFuse - Providing integration and style to open source Java.


AppFuse로 IDE에서 작업하도록 세팅하는 방법이 밑에 나와 있다. 현재 Eclipse와 IDEA에 대한 방법만 나와있고 Netbeans는 아직 로드맵에만 있다. 만들어주면 매우 감사하겠다.

먼저 Maven 2.0.4+를 다운받아서 설치하고 $M2_HOME/bin을 실행경로에 추가한다. MAVEN_OPTS 환경변수의 값은 -Xms512M -Xmx512M 로 한다.


모든 이슈는 JIRA http://issues.appfuse.org 에 기록한다. 궁금한 점은 메일링 리스트에서 물어본다. http://appfuse.org/forums.

[편집] Eclipse 3.2+

커맨드 명령행에서 appfuse 디렉토리로 들어가서 다음을 실행시킨다.

mvn eclipse:eclipse -DdownloadSources=true

커피나 사이다 (맥주가 더 낫다)를 마시면서 Maven이 dependency들을 다운로드하도록 기다린다.

그림:warning.gif

  • 무슨일 때문인지는 모르겠지만 xwork2.0.3.jar을 다운로딩하다가 중간에 멈추는 현상이 발생한다.(아마도 방화벽 때문인 것 같음.)
  • xwork2.0.3.jar는 최신버전이기 때문에 opensymphony의 repository에만 있으므로 repository를 변경해서는 해결할 수 없다.
  • struts2core에 dependency가 걸려져 있는데 로컬 maven 저장소에서 struts2core로 직접가서 pom파일을 수정하자.
  • xwork2.0.2로 변경하면 원활하게 다운이 되는 것을 볼 수 있다.


Eclipse는 로컬 Maven 저장소의 경로를 알아야 한다. 그러므로 M2_REPO라는 클래스패스 변수를 잡아줘야 한다. 다음 명령을 실행시킨다.

mvn -Declipse.workspace=<path-to-eclipse-workspace> eclipse:add-maven-repo 

M2_REPO는 이클립스 안에서 잡아줘도 된다. 메뉴에서 Window > Preferences를 선택하고 Java > Build Path > Classpath 변수 페이지로 간다. M2_REPO라는 이름으로 새로 생성하고 로컬 Maven 저장소 위치를 잡아준다. 윈도우에서는 보통 C:\Documents and Settings\${username}\.m2\repository 이다.

계층구조 프로젝트를 셋업하려면 Eclipse 3.2+에서는 다음 과정을 밟는다.

  1. appfuse/data/.project 파일 이름을 다른 걸로 바꾼다.
  2. 메뉴에서 File -> Import -> General -> Existing Projects 로 가서 workspace 의 appfuse/data 루트를 조회한다. 거기는 .project 파일이 없기 때문에 Eclipse 는 가능한 모든 서브프로젝트 종류를 보여줄 것이다. 그것들을 고르고 OK 버튼을 누른다.
  3. appfuse/data/.project 파일을 원래 이름으로 돌려놓고 왼쪽 판에서 새로고침을 누른다.
  4. "web" 디렉토리에 대해서 위 과정을 한 번 더 한다.

[편집] IDEA 6.0+

명령행에서 appfuse 디렉토리로 들어가서 "mvn idea:idea"라고 친다.

커피나 사이다 (맥주가 더 낫다)를 마시면서 Maven이 dependency들을 다운로드하도록 기다린다.

IDEA에서 프로젝트를 열어보고, 프로젝트 JDK를 알맞게 변경해준다.

[편집] AppFuse 2.0 M5 소스 구성

  1. 웹프레임워크 및 모듈화 여부에 따라 archetype과 jar artifact를 만들어 deploy하고
  2. Persistency 프레임워크별로 jar artifact를 만들어 deploy한다.
  3. 데모 service 부분도 별도의 jar artifact로 나누어 deploy한다.

AppFuse2 프로젝트 정책

AppFuse2 릴리즈 절차