참고 사이트 : 

http://struts.apache.org/2.2.3/docs/struts-2-maven-archetypes.html


  메이븐을 이용하면 의존성을 가진 라이브러리들까지 손쉽게 다운로드 받아서 프로젝트를 생성할 수가 있다.

  2줄의 명령어만 넣어주면 된다.


스트럿츠 archetype을 생성하는 방법은 두 종류가 있다. 둘 중 마음에 드는 방법을 선택한다.


1.1. 메이븐의 archetype을 이용하여 스트럿츠 프로젝트를 생성(generate)한다.

  - 스트럿츠 2.2.3.1 버전을 사용했다. 

mvn archetype:generate -B
-DgroupId=tutorial
-DartifactId=tutorial
-DarchetypeGroupId=org.apache.struts
-DarchetypeArtifactId=struts2-archetype-blank

-DarchetypeVersion=<version>


1.2. 스트럿츠 archetype 을 생성한다. 
mvn archetype:generate -DarchetypeCatalog=http://struts.apache.org/

2. 메이븐으로 생성한 프로젝트를 이클립스에서 사용할 수 있는 프로젝트로 변경한다.

mvn eclipse:eclipse -Dwtpversion=1.5
이렇게 하면 된다. 
그럼 이클립스에서 사용할 수 있는 프로젝트가 간단하게 생성된다. 

1.2번과 2번을 같이하는 게... 편한 것 같기도 하다.


생성 과정 기록 : 


HoneyBook:dreaminfra ihoneymon$ mvn archetype:generate -DarchetypeCatalog=http://struts.apache.org/

[INFO] Scanning for projects...

[INFO]                                                                         

[INFO] ------------------------------------------------------------------------

[INFO] Building Maven Stub Project (No POM) 1

[INFO] ------------------------------------------------------------------------

[INFO] 

[INFO] >>> maven-archetype-plugin:2.1:generate (default-cli) @ standalone-pom >>>

[INFO] 

[INFO] <<< maven-archetype-plugin:2.1:generate (default-cli) @ standalone-pom <<<

[INFO] 

[INFO] --- maven-archetype-plugin:2.1:generate (default-cli) @ standalone-pom ---

[INFO] Generating project in Interactive mode

[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)

//원하는 유형을 선택하고 groupId, articleId 를 임의에 따라 지정한다.

Choose archetype:

1: http://struts.apache.org/ -> org.apache.struts:struts2-archetype-blank (Struts 2 Archetypes - Blank)

2: http://struts.apache.org/ -> org.apache.struts:struts2-archetype-convention (Struts 2 Archetypes - Blank Convention)

3: http://struts.apache.org/ -> org.apache.struts:struts2-archetype-dbportlet (Struts 2 Archetypes - Database Portlet)

4: http://struts.apache.org/ -> org.apache.struts:struts2-archetype-plugin (Struts 2 Archetypes - Plugin)

5: http://struts.apache.org/ -> org.apache.struts:struts2-archetype-portlet (Struts 2 Archetypes - Portlet)

6: http://struts.apache.org/ -> org.apache.struts:struts2-archetype-starter (Struts 2 Archetypes - Starter)

Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): : 1

Define value for property 'groupId': : StudyStruts

Define value for property 'artifactId': : StudyStruts

Define value for property 'version':  1.0-SNAPSHOT: : 

Define value for property 'package':  StudyStruts: : 

Confirm properties configuration:

groupId: StudyStruts

artifactId: StudyStruts

version: 1.0-SNAPSHOT

package: StudyStruts

 Y: : y

[INFO] ----------------------------------------------------------------------------

[INFO] Using following parameters for creating project from Archetype: struts2-archetype-blank:2.2.1

[INFO] ----------------------------------------------------------------------------

[INFO] Parameter: groupId, Value: StudyStruts

[INFO] Parameter: artifactId, Value: StudyStruts

[INFO] Parameter: version, Value: 1.0-SNAPSHOT

[INFO] Parameter: package, Value: StudyStruts

[INFO] Parameter: packageInPathFormat, Value: StudyStruts

[INFO] Parameter: package, Value: StudyStruts

[INFO] Parameter: version, Value: 1.0-SNAPSHOT

[INFO] Parameter: groupId, Value: StudyStruts

[INFO] Parameter: artifactId, Value: StudyStruts

[INFO] project created from Archetype in dir: /Users/ihoneymon/Documents/workspaces/dreaminfra/StudyStruts

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 15.347s

[INFO] Finished at: Wed Oct 12 10:45:18 KST 2011

[INFO] Final Memory: 7M/81M

[INFO] ------------------------------------------------------------------------

HoneyBook:dreaminfra ihoneymon$ cd StudyStruts/

HoneyBook:StudyStruts ihoneymon$ mvn eclipse:eclipse -Dwtpversion=1.5

[INFO] Scanning for projects...

[INFO]                                                                         

[INFO] ------------------------------------------------------------------------

[INFO] Building Struts 2 Blank Webapp 1.0-SNAPSHOT

[INFO] ------------------------------------------------------------------------

[INFO] 

[INFO] >>> maven-eclipse-plugin:2.8:eclipse (default-cli) @ StudyStruts >>>

[INFO] 

[INFO] <<< maven-eclipse-plugin:2.8:eclipse (default-cli) @ StudyStruts <<<

[INFO] 

[INFO] --- maven-eclipse-plugin:2.8:eclipse (default-cli) @ StudyStruts ---

[INFO] Adding support for WTP version 1.5.

[INFO] Using Eclipse Workspace: /Users/ihoneymon/Documents/workspaces/dreaminfra

[WARNING] Workspace defines a VM that does not contain a valid jre/lib/rt.jar: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

[INFO] no substring wtp server match.

[INFO] Using as WTP server : VMware vFabric tc Server Developer Edition (Runtime) v2.5

[INFO] Adding default classpath container: org.eclipse.jdt.launching.JRE_CONTAINER

[INFO] Not writing settings - defaults suffice

[INFO] Wrote Eclipse project for "StudyStruts" to /Users/ihoneymon/Documents/workspaces/dreaminfra/StudyStruts.

[INFO] 

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 2.254s

[INFO] Finished at: Wed Oct 12 10:45:34 KST 2011

[INFO] Final Memory: 6M/81M

[INFO] ------------------------------------------------------------------------

HoneyBook:StudyStruts ihoneymon$ 

이클립스를 열고, 이 StudyStruts라는 폴더를 import하면 스트럿츠 라이브러리가 설치된 프로젝트를 바로 이용해볼 수 있다. 여기에는 간단한 예제 코드가 포함되어 있다. 이 프로젝트를 서버에 추가하고 실행해보면 다음처럼 나온다.

자! 스트럿츠를 시작해보자.


110525_egovFramework 세미나

  • 제목 : Dive into Maven
  • 장소 : 청계광장 정보화진흥원 지하1층 세미나실
  • 발표내용
    • 표준프레임워크 오픈커뮤니티를 통해서 프레임워크연구개발이 활성화되길 바란다.
    • Maven is ...
      • 프로젝트 관리(Project Management) 와 빌드 자동화(Build Automation)
      • 2002년, Apache Turbine 에서 비롯되었다.
      • Maven 도입이유
        • 라이브러리 관리의 문제점
          • commons.fileupload 1.0 버그 -> 1.1 해결
          • classpath : 같은 패키지 상에서는 제일 상단에 존재하는 패키지 부터 실행됨
        • 오픈소스를 사용하는 경우 의존성을 지니게 되는 라이브러리
        • 자유도(Ant 확장성이 뛰어남, Maven 정형화 되어 있음)
    • Maven Simple Project
      • project home : pom.xml
      • src/main/java
      • src/main/resource
      • src/test/java
      • src/test/resource
    • Maven vs Ant
      • Maven is formal convensions.
      • Ant isn't formal conventions.
      • Ant is procedural, Maven is declarative
      • Maven has a lifecycle(Ant를 잘 구성하면 lifecycle 구현이 가능하다)
    • Super POM(CoC)
      • 모든 프로젝트의 POM은 SUPER POM을 상속 받는다(All project POMs extends Super POM
    • Simple POM
    • POM.xml
      • POM 의 구조 설명
    • Library Search Path
      • Repository
        • Local repository
          • maven -> installation -> setting.xml
        • Remote repository
          • Repository with WebServer
          • Repository with Nexus
    • Repository
      • <repositories> ~~ </repositories>
      • snapshot 은 상속받지 않는 것으로 되어 있다.
    • Repository with WebServer
      • Maven은 인터넷이 안되면 쥐약
      • 인터넷이 안된다면, 자체적인 저장소를 생성하여 관리한다.
        • Local 저장소에서 복사하여 사용하는 방법
        • Webserver : Apache / document_root / 에 저장
        • apache 에 index를 볼 수 있도록 설정되어 있느냐? search가 안됨
    • Repository with Nexus
    • Nexus 관련 주의사항
      • 플러그인이 설치되지 않는 경우...
      • 넥서스를 이용하여 업로드한 경우
      • <pluginRepositories></pluginRepositories>를 선언해줘야한다.
      • maven_home/sonatype_work/nexus/storage 에 넣은 뒤에는 Nexus를 재기동 시켜줘야 한다.
    • Dependency Scope
      • 종류
        • compile(default)
        • provided : 컴파일과 유사하나 패키지에는 포함되지 않음
        • test
        • runtime
        • system
      • Specify dependency range
        • [,]
        • (,]
        • (,)
    • Transitive Scope
    • Conflict Resolution
      • Exclude Transitive scope
        • <exclusions> ~~ </exclusions>
    • Build LifeCycle
      • phases, goals, plugin
      • Lifecycle을 가지고 있는 장점 : 테스트를 돌릴 수 있다. TestCase를 작성해야 한다.
    • Developing java plugin for Maven
      • Maven Project 생성방법
      • Create Simple Mojo
    • Complie Configure
      • <plugin>
      • Maven plugin <source>, <target>
    • Skip Test
      • <configuration>
 <skipTest>
</configuration>
    • ProGuard
      • 역컴파일 방지기
      • Ddependency, plugin에 넣기
    • Site Reporting
    • PMD
      • plugin rulesets ㅇ르 정의해줘야 한다.
    • Maven Archetype
      • Maven을 이용하여 목적에 따라 Archetype들을 사용하여 지정할 수 있다.
      • 전자정부용 Archetype가 존재한다.
      • 초창기에 만들었는데 알려주지 않는 이유
      • 필요에 따라서 만들면 된다.
    • m2Eclipse
      • Maven projects를 만들고 첨가하는 경우
      • 의존성 저장 및 갱신
      • SCM 저장소로부터 maven Porject 추가
      • WTP에서 통합 -> WTP 쪽 Runtime 에서 오류가 발생, 톰캣 실행시 오류가 발생한다. 오류 가능성을 숙지하고 있을 것
      • 의존성 그래프를 프래픽적으로 추가
      • Maven 의 기능은 다양하다. 많이 써보고, 필요한 기능을 능숙하게 다루면 되겠지.
    • Maven 3.x new Feature
      • dependency 일 경우에는 프로젝트에만 영향을 미치지만...
      • dependency-management 를 구분해서 사용하라.
  • 결론 : 전자정부 프레임워크에는 Maven을 사용했다. 



최근 스프링 프레임워크를 기반으로 하는 프로젝트를 진행하게 되면서 메이븐Maven의 사용이 익숙해져가고 있다. <dependency> 를 추가하는 것만으로 관련한 라이브러리들이 주루룩 다운로드 되는 그 맛이란...

가까운 곳에서 이런 Maven에 대한 내용으로 발표가 있다고 해서 참가했다. 샌드위치 때문에 참가신청(?)을 한 사람들이 많았는가 보다. 160명분을 준비했는데 모두 소진되었다고 하는 걸 보니... 봐도 넓은 회의실을 꽉채우고 있었다. 냉방시설을 가동시킬 수 없어서 꽤나 답답하고 더웠다. 

발표는 한시간, Qn A 시간이 한시간 잡혀 있었지만, 발표내용 자체가 워낙 Maven에 대한 개괄적인 발표이다보니 딱히 무엇을 물어야할지 애매했다. 발표내용도 애매모호한 부분들이 많았다. 차라리, 전자정부 프레임워크를 적용한 프로젝트들에서 Maven과 관련되어 발생한 문제들의 예시와 해결방법을 30분 정도 추가해서 설명하는 건 어땠을까 하고 생각한다.
 
  전체적으로 많이 아쉬운 세미나였다.
  크게 개선되지는 않겠지....

  메이븐Maven에 대해 궁금하시다면
메이븐
카테고리 컴퓨터/IT > 프로그래밍/언어 > 웹프로그래밍 > 웹프로그래밍일반
지은이 박재성 (한빛미디어, 2011년)
상세보기
 이 책과
책의 저자가 운영하던 스터디 사이트 : http://www.javajigi.net/display/IDE/Maven
Maven Project 사이트 : http://maven.apache.org/
에서 필요한 정보들을 찾아보기 바란다.
  1. 안녕하세요? 표준프레임워크 오픈커뮤니티 사무국에 김현진입니다.
    저희쪽 관련 기사를 찾다가 허니몬님의 블로그를 찾았네요^^ 오픈커뮤니티 기술세미나에 참석해 주셔서 진심으로 감사드립니다.
    말씀하신 것 처럼 9차 기술세미나는 세미나 환경도 강의 시간도 많이 부족하여 너무 죄송했습니다.
    9차 기술세미나에서 놓친 부분들을 개선하여 7월 기술세미나를 준비하고 있습니다^^ 이번에는 데모 시연을 하면서 직접 개발자분들이 듣고 싶어하시는 주제로 준비하였습니다. 기술세미나에 대한 기대감을 저버리지 마시고 한번 더 기회를 주세요^^ 7월에 기술세미나에서 뵐 수 있기를 진심으로 희망합니다. 마지막으로 기술세미나에 대한 포스팅 너무 감사드립니다. 좋은 하루 되세요^^

+ Recent posts