민서네집

Maven archetype List 보기 본문

Java

Maven archetype List 보기

브라이언7 2012. 9. 1. 15:08

[참조] 자바 프로젝트 필수 유틸리티 - 박재성 지음 (2009년)

 

< Maven archetype List 보기 >

 

http://docs.codehaus.org/display/MAVENUSER/Archetypes+List

 

< Maven 이 사용하는 모든 라이브러리 목록 >

 

http://search.maven.org/#browse

 

groupId/artifactId 로 보여진다.

 

< Maven 중앙 저장소에서 관리하는 라이브러리 검색 >

 

http://mvnrepository.com/

 

group, artifact or description 으로 검색해서 찾을 수 있다.

 

< 플러그인에 대한 설명 >

 

* Resource 플러그인: http://maven.apache.org/plugins/maven-resources-plugin/

* Compiler 플러그인: http://maven.apache.org/plugins/maven-compiler-plugin/

* SureFire 플러그인: http://maven.apache.org/plugins/maven-surefire-plugin/

☞ test phase에 실행되는 플러그인

* Install 플러그인: http://maven.apache.org/plugins/maven-install-plugin/

* Deploy 플러그인: http://maven.apache.org/plugins/maven-deploy-plugin/

 

< 로컬 저장소 변경 >

 

Maven 을 사용할 때 기본 설정을 사용한다면 로컬 저장소의 경로는 USER_HOME/.m2/repository 가 된다.

 

만약 로컬 저장소의 경로를 바꾸고 싶다면 두가지 방법이 있다.

 

1. MAVEN_HOME/conf 디렉터리의  settings.xml 파일을 열어보면 <settings/> 루트 엘리먼트 아래에 <localRepository/> 엘리먼트가 주석으로 처리되어 있다. 이 주석을 제거한 다음 자신이 원하는 로컬 저장소의 경로를 지정해 준다. => 컴퓨터를 사용하는 모든 사용자에게 영향을 미친다.

 

2. USER_HOME/conf 디렉터리의 settings.xml 파일 바꾸기. => 해당 사용자에게만 영향을 미친다.

 

< 의존 관계 라이브러리 적용 범위 >

 

Maven 은 사용하는 라이브러리의 성격에 따라 범위를 지정할 수 있다. 예를 들어, JUnit 은 테스트에만 사용하고 실제 배포할 때는 필요없는 라이브러리이다. 이처럼 라이브러리가 필요한 Scope 설정에 따라 5가지 범위로 지정한다.

 

compile : 범위를 설정하지 않았을 때의 기본 범위이다. 컴파일할 때도 사용하며, 배포할 때도 같이 배포해야 하는 라이브러리이다.

 

provided : 예를 들어 servlet.jar 는 서블릿 컨테이너에서 제공하므로 컴파일 시점에는 필요하지만, 배포될 필요는 없다. 이럴 때 사용하는 범위이다.

 

runtime : 말 그대로 컴파일에는 사용되지 않지만, 애플리케이션을 실행할 때 사용되는 라이브러리일 경우에 설정한다.

 

test : 테스트에만 사용하는 라이브러리이다. 배포할 때 같이 배포되지 않는다.

 

system : system 범위는 provided 와 비슷하다. 그러나 jar 파일을 직접 제공해야 한다. 따라서 이 범위의 jar 파일은 저장소에서 관리되지 않을 수도 있다.

 

< p202 : 이클립스 플러그인을 활용한 WTP 프로젝트 생성 >

 

Maven의 이클립스 플러그인 : Maven 기반의 프로젝트를 이클립스 프로젝트로 자동 변환해 주는 플러그인

 

http://maven.apache.org/plugins/maven-eclipse-plugin/ 문서를 참고.

 

http://maven.apache.org/plugins/maven-eclipse-plugin/eclipse-mojo.html

 

[주의] wtpversion 을 지정하지 않으면 WTP configuration 파일이 생성되지 않는다.

 

Maven 빌드 툴의 설정 파일인 pom.xml 파일을 보면 프로젝트와 관련된 모든 정보가 포함되어 있다. Maven의 이클립스 플러그인은 pom.xml 파일의 정보를 바탕으로 이클립스 프로젝트로 자동으로 변환해준다. 특히 pom.xml 파일에 설정된 라이브러리 의존성 정보는 이클립스의 .classpath 파일을 생성하는데 유용하게 사용된다.

 

Maven 빌드 툴은 pom.xml 에 설정된 <packaging/> 정보를 바탕으로 이클립스 프로젝트를 생성한다.

예를 들어 <packaging/> 정보가 jar 이면 이클립스의 Java Project, war 이면 WTP의 Dynamic Web Project를 자동으로 생성한다. 이 절에서는 WTP 의 Dynamic Web Project 를 생성하는 방법을 살펴보겠다.

 

'mvn eclipse:eclipse' 명령을 정상적으로 실행하면 이클립스 프로젝트에 필요한 .project, .classpath 파일 및 WTP Dynamic Web Project 를 생성하는데 필요한 .settings 디렉터리까지도 생성된다.

 

WTP 설정 파일 .settings/org.eclipse.wst.common.component 파일도 자동 생성된다.

 

pom.xml 파일에 변경 사항이 발생하면 이클립스 설정 정보를 새로 생성해야 한다. 이클립스 설정 정보를 새로 생성할 때는 다음과 같이 이전 프로젝트 설정 정보를 제거한 다음 새로 생성하는 것이 안전하다.

 

mvn eclipse:clean eclipse:eclipse

 

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>net.javajigi</groupId>
  <artifactId>mywebproject</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>mywebproject Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <properties>
   <webapp.context>/</webapp.context>
  </properties>
  <build>
    <finalName>mywebproject</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-eclipse-plugin</artifactId>
        <version>2.9</version>
        <configuration>
          <workspace>D:\dev\workspace\workspace-sts-2.9.1.RELEASE</workspace>
          <sourceExcludes>
            <sourceExclude>**/.svn/**</sourceExclude>
          </sourceExcludes>
          <sourceIncludes>
            <sourceInclude>**/*.xml</sourceInclude>
          </sourceIncludes>
          <wtpContextName>${webapp.context}</wtpContextName>
          <downloadSources>true</downloadSources>
          <downloadJavadocs>true</downloadJavadocs>
          <wtpversion>1.5</wtpversion>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

 

http://maven.apache.org/plugins/maven-eclipse-plugin/

 

에 보면

 

eclipse:configure-workspace is used to add the classpath variable M2_REPO to Eclipse which points to your local repository and optional to configure other workspace features.

 

이라고 나와 있어서 workspace 설정을 추가하고

 

mvn eclipse:configure-workspace

 

라고 해줬더니 Preferences > Java > Build Path > Classpath Variable 에

 

M2_REPO 변수에 C:\Users\{로그인 사용자}\.m2\repository 가 추가되는데,

 

이상하게도 이클립스(sts)에서는 Warning 이 발생했다.

 

Classpath entry M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar will not be exported or published. Runtime ClassNotFoundExceptions may result.

 

생성된 .project 파일을 보니

 

<comment>NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>

 

위와 같이 comment 가 되어 있다.

 

Maven 이클립스 플러그인이 m2eclipse 플러그인과 호환되지 않는다니 실망이다.

 

< p210 M2Eclipse 플러그인을 활용하여 빌드하기 >

 

홈페이지 - http://eclipse.org/m2e/

 

M2Eclipse 의 update URL 은 http://download.eclipse.org/technology/m2e/releases

 

< Maven - maven 과 eclipse WTP 연동하기 >

 

http://javastore.tistory.com/111

 

< Maven - 기본 webapp(webroot) 위치 변경하기 >

 

http://javastore.tistory.com/147

 

< Maven - .java 파일과 함께 있는 rsource 파일만 걸러내 classes 디렉터리에 복사하기 >

 

http://javastore.tistory.com/145

 

< p212 Profile 기능 활용하기 >

 

매번 mvn eclipse:eclipse -Plocal 와 같이 Profile 정보를 넘겨주기 귀찮다면 기본으로 local profile 의 모든 속성을 pom.xml 파일의 전체 속성으로 사용하게 설정하면 된다.

 

<project>

... 중간 생략 ...

 

<properties>

<maven.test.skip>true</maven.test.skip>

<environment>local</environment>

<jdbc.host>localhost</jdbc.host>

</properties>

 

... 중간 생략 ...

 

</project>

 

그러나 더 좋은 방법은 settings.xml 파일에 기본으로 실행할 profile 을 기술하는 것이 더 좋을 듯 하다.

 

[참고] http://slothink.tistory.com/58


다음과 같이 기본으로 실행할 profile을 지정해 줄 수도 있다.


<profile>

<id>local</id>

<activation>

<activeByDefault>true</activeByDefault>

</activation>

<properties>

<!-- resource 필터 사용시 개발자 PC에 적용되는 필터 properties 의 폴더 위치 -->

<deployTarget>local</deployTarget>

</properties>

<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-war-plugin</artifactId>

<version>2.1.1</version>

</plugin>

</plugins>

</build>

</profile>

 

[일부 발췌]

goal 실행시 profile 옵션을 주게 되면(ex. mvn package –P slothink) (실행위치의)pom.xml, (실행위치의)profiles.xml, ${user.home}/settings.xml, ${M2_HOME}/conf/settings.xml 순으로 profile 항목을 찾는다. 이와 같이 찾는 도중에 profile id 가 동일한 경우가 나타나면 해당 profile 에서 선언된 내용을 적용한다.

위와 같이 치환 대상(리소스)은 치환할 부분을 ${[속성명]} 과 같이 기술하며 필터 파일에서는 [속성명]=[속성 값] 과 같이 기술한다.

이러한 메커니즘을 이용하여, 각 개발자는 자신의 환경에 맞게 profile filter 를 추가하여 사용할 수 있다.

그러나 매번 profile 사용하기 위해서 console 상에서 profile 옵션을 주거나 m2clipse build 항목을 이용하는 것은 불편할 것이다. 이것은 ${user.home}/settings.xml 이나 ${M2_HOME}/conf/settings.xml 에서 기본으로 실행할 profile 을 기술하여 해결할 수 있다.

 

<activeProfiles>

<activeProfile>slothink</activeProfile>

</activeProfiles>

  

 

p255  AppFuse로 기본 프로젝트 생성하기.

 

Maven 기반으로 템플릿 프로젝트 생성을 지원해주는 오픈 소스가 AppFuse 이다.

 

AppFuse(http://appfuse.org)는 자바 진영에서 많이 사용하는 오픈 소스 프레임워크 조합을 기반으로 템플릿 프로젝트를 생성할 수 있게 지원한다. Maven을 처음 시작할 때 가장 어려운 부분이 의존 관계에 있는 라이브러리를 추가하는 것이다. AppFuse는 이 같은 문제를 해결하기 위해 다음과 같은 다양한 오픈 소스 프레임워크를 지원한다.

 

웹 프레임워크

* Java Server Faces(JSF)

* Spring MVC

* Struts 1, Struts 2

* Tapestry

 

퍼시스턴스 프레임워크

* Hibernate

* iBatis

* JPA

 

기타

* 위 프레임워크들의 가교 역할을 해주는 Spring

* 페이지의 레이아웃을 관리해주는 Sitemesh

* Ajax 프레임워크

 

AppFuse를 활용할 경우 위 프레임워크의 모든 조합으로 Maven 기반 프로젝트를 생성할 수 있다. 위 프레임워크 조합을 기반으로 프로젝트를 시작하는 경우라면 AppFuse로 생성할 수 있는 템플릿 프로젝트를 활용해야 좋다. AppFuse는 Maven 기반의 템플릿을 제공하는 대신 간단한 사용자 관리 예제까지 제공하므로 위 프레임워크의 조합으로 어떻게 프로젝트를 구축할 수 있는지에 대한 지침서 역할까지 해 주고 있다.

 

p256 AppFuse 프로젝트 생성

 

AppFuse는 프레임워크의 조합에 따라 제공하는 Archetype이 다르다. AppFuse에서 제공하는 Archetype은 http://appfuse.org/display/APF/AppFuse+QuickStart 에서 확인할 수 있다.

 

생성한 Maven 기반의 템플릿 프로젝트가 생성되는데, AppFuse가 포함하는 모든 예제는 의존 관계에 있는 war 프로젝트가 포함하고 있어서 예제를 테스트 하려면 추가적인 설정이 필요하다.

 

pom.xml 파일을 열어보면 다음과 같이 war 파일과 의존 관계에 있는 것을 알 수 있다.

 

<dependency>

<groupId>org.appfuse</groupId>

<artifactId>appfuse-${web.framework}</artifactId>

<version>${appfuse.version}</version>

<type>war</type>

</dependency>

 

Maven은 war 파일과 의존 관계에 있을 경우 빌드 시 war 파일을 다운로드하여 target 디렉터리에 압축을 풀어 같이 배포한다.

 

mvn package 명령으로 빌드하면 target 디렉터리에 웹어플리케이션이 구성된다.

이 같은 결과는 myappfuse가 의존 관계에 있는 war 프로젝트 때문이다.

 

Maven의 이클립스 플러그인은 'src/main/webapp'를 기본 웹 리소스 디렉터리로 인식한다. 그러나 빌드 후 의존 관계에 있는 war 파일이 target 디렉터리에 배포되므로 WTP 설정 파일을 다음과 같이 변경해야 한다.

 

p260 .setting 디렉터리 아래의 org.eclipse.wst.common.component 파일을 열어 다음과 같이 설정을 변경한다.

 

<wb-resource deploy-path="/" source-path="src/main/webapp"/> -> 삭제

<wb-resource deploy-path="/" source-path="target/myappfuse-1.0-SNAPSHOT"/> -> 추가

<wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/> -> 삭제

 

Tomcat 서버를 시작하여 로그인 하면이 나타나면 성공한 것이다.

 

admin/admin 으로 로그인하여 AppFuse의 기능을 확인할 수 있다.

 

AppFuse가 제공하는 기능은 단순히 사용자 관리 기능이다. AppFuse를 분석하여 개발 환경을 설정하려는 예제 프로젝트로 활용하기에 충분하다. 오픈 소스 프레임워크를 활용하기 어려워하는 개발자들이 분석하기에 규모면에서 좋은 예제라고 생각한다. 또한, AppFuse가 제공하는 Maven 활용 예제를 분석하는 것도 좋은 공부가 될 것이다.

Comments