2009-07-22 북마크

maven 2009.07.22 22:44

메이븐2 사용시 직접 로컬저장소에 라이브러리를 등록하는 방법
http://boyrock.tistory.com/45

Artifactory를 이용하여 사내 Maven Repository 세팅하기
http://wiki.javajigi.net/pages/viewpage.action?pageId=82673677


일반적으로 자바소스는 MS949 캐릭터셋으로 많이들 쓸 것이다. 그런데 특수한 경우에는 자바소스까지도 UTF-8로 인코딩하여 쓸 경우가 있다.  이때 자바소스안에 있는 한글이나 기타 문자때문에 메이븐의 컴파일시 오류가 생길 수 있으니 다음처럼 pom.xml파일에 인코딩 관련 내용을 추가해 주자.

  <build>
    <finalName>Test</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
                <encoding>UTF-8</encoding>    <----- 이부분을 넣어주면 된다.
            </configuration>
        </plugin>
    </plugins>
  </build>





maven을 수동으로 설치하고 프롬프트에서 이용할 수도 있지만 이클립스를 쓴다면 m2eclipse플러그인을 통해 ide에서 maven기능을 이용할 수 있다. m2eclipse가 subclipse를 이용하는 것 같으니 subclipse도 설치해 준다.

1. 이클립스 업데이트 메뉴에서 추가 및 설치
   subclipse - http://subclipse.tigris.org/update_1.4.x
   m2eclipse - http://m2eclipse.sonatype.org/update/


2. 업데이트 후에는 이클립스에서 maven명령을 실행할 수 있다.

지난번 quickstart와 마찬가지로 maven을 통해 쉽게 웹어플리케이션 형태의 프로젝트를 생성할 수 있다.

1. 터미널이나 명령프롬프트에서 mvn:archetype실행 후 18번 A simple Java web application 선택

C:\Users\yjpark\workspace>mvn archetype:generate
.
.
Choose a number:  (1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30/
31/32/33/34/35/36/37/38/39/40/41) 15: : 18

2. 프로젝트가 생성되고 난 후의 디렉토리 구조는 다음과 같다.

src
  |_____ main
                 |______resources
                 |______webapp
                                  |____WEB-INF

resources에는 xml설정파일이나 properties파일이 들어가는 곳이고 webapp 밑에는 일반 jsp나 이미지 파일이 들어간다.
그런데 잘 살펴보면 자바소스 디렉토리는 생성이 안되어 있다. 따라서 다음과 같이 수동으로 추가해 주자

src
  |_____ main
                  |______java
                  |______resources
                  |______webapp
                                    |____WEB-INF
 |_____ test
                  |______java

3. 이클립스에서의 import
위와 같이 프로젝트를 생성하였다고 해도 이클립스에서 쓸수 있는 프로젝트구조가 아니기 때문에 wtp2.0형태로 다음과 같이 변환해 주어야 한다.

C:\Users\yjpark\workspace\SpringStudy>mvn -Dwtpversion=2.0 eclipse:eclipse

그리고 디렉토리를 보면 이클립스가 이해할 수 있도록 .project 파일과 .classpath 파일이 생성된 것을 확인할 수 있다.

2009-01-08  오후 04:42    <DIR>          .
2009-01-08  오후 04:42    <DIR>          ..
2009-01-08  오후 04:42               322 .classpath
2009-01-08  오후 04:42               729 .project
2009-01-08  오후 04:42    <DIR>          .settings
2009-01-08  오후 04:41               718 pom.xml
2009-01-08  오후 04:41    <DIR>          src


이클립스를 실행시키고 import명령을 이용해 프로젝트를 import한다.


다음은 정상적으로 이클립스에서  import된 모습이다.


 임포트 한 후에 자바 컴파일레벨 오류가 나면 Project faceset 메뉴에서 자바버전을 5.0으로 맞춰주면 된다.
그리고 imort후에는 소스폴더에 /main/java 와 /test/java 를 추가해 준다.



터미널이나 도스프롬프트에서 mvn archetype:generate 로 프로젝트를 생성한다.

yjpark@ubuntu:~/$mvn archetype:generate
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO]    task-segment: [archetype:generate] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] Preparing archetype:generate
.
.
Choose archetype:
1: internal -> appfuse-basic-jsf (AppFuse archetype for creating a web application with Hibernate, Spring and JSF)
2: internal -> appfuse-basic-spring (AppFuse archetype for creating a web application with Hibernate, Spring and Spring MVC)
.
.
15: internal -> maven-archetype-quickstart ()
.
.
Choose a number:  (1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41) 15: :

여기선 15를 입력하고 다음과 같이 나머지 항목도 입력한다.

Choose a number:  (1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41) 15: : 15
[INFO] artifact org.apache.maven.archetypes:maven-archetype-quickstart: checking for updates from central
Define value for groupId: : com.yjpark
Define value for artifactId: : MavenTest
Define value for version:  1.0-SNAPSHOT: :
Define value for package:  com.yjpark: :
Confirm properties configuration:
groupId: com.yjpark
artifactId: MavenTest
version: 1.0-SNAPSHOT
package: com.yjpark
 Y: : Y

정상적으로 완료되면 프로젝트의 구조는 다음과 같다.

MavenTest
|___pom.xml
|___src
          |___main
                     |___java
                             |___com
                                     |___yjpark
          |___test
                   |___java
                            |___com
                                     |___yjpark

- pom.xml 은  Project Object Model 정보를 담고 있는 파일로 프로젝트 정보나 dependency, plugin 등의 정보가 들어간다.
- /src/main/java  : 메인 자바 소스가 들어가는 곳
- /src/test/java : 유닛테스트용 자바 소스가 들어가는 곳

소스를 컴파일 할때는 다음과 같이 compile goal을 실행한다.

yjpark@ubuntu:~/MavenTest$mvn compile
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building MavenTest
[INFO]    task-segment: [compile]
[INFO] ------------------------------------------------------------------------
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:compile]
[INFO] Compiling 1 source file to /home/yjpark/MavenTest/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5 seconds
[INFO] Finished at: Thu Jan 01 13:31:09 KST 2009
[INFO] Final Memory: 5M/10M
[INFO] ------------------------------------------------------------------------
yjpark@ubuntu:~/MavenTest$
디렉토리를 보면 target 디렉토리가 생성되었고 그곳에 클래스파일이 저장되어 있는것을 확인할 수 있다.

컴파일된 파일을 packaging할때는 다음과 같이 package goal을 실행한다.

yjpark@ubuntu:~/MavenTest$ mvn package
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building MavenTest
[INFO]    task-segment: [package]
[INFO] ------------------------------------------------------------------------
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:compile]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:testCompile]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test]
[INFO] Surefire report directory: /home/yjpark/MavenTest/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.yjpark.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.115 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] [jar:jar]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7 seconds
[INFO] Finished at: Thu Jan 01 13:33:30 KST 2009
[INFO] Final Memory: 7M/12M
[INFO] ------------------------------------------------------------------------
yjpark@ubuntu:~/MavenTest$

위와같이 컴파일,유닛테스트까지 모두 수행하고 target디렉토리에 .jar파일이 생성된 것을 확인할 수 있다.

yjpark@ubuntu:~/MavenTest/target$ ls -al
합계 28
drwxr-xr-x 6 yjpark yjpark 4096 2009-01-01 13:33 .
drwxr-xr-x 4 yjpark yjpark 4096 2009-01-01 13:31 ..
-rw-r--r-- 1 yjpark yjpark 2100 2009-01-01 13:33 MavenTest-1.0-SNAPSHOT.jar
drwxr-xr-x 3 yjpark yjpark 4096 2009-01-01 13:31 classes
drwxr-xr-x 2 yjpark yjpark 4096 2009-01-01 13:33 maven-archiver
drwxr-xr-x 2 yjpark yjpark 4096 2009-01-01 13:33 surefire-reports
drwxr-xr-x 3 yjpark yjpark 4096 2009-01-01 13:33 test-classes
yjpark@ubuntu:~/MavenTest/target$


Maven 설치하기

maven 2009.01.01 13:06
mavenant 와 같이 소프트웨어 빌드에 관련된 일을 해주는 툴이다. ant와 다른점은 기본적으로 소프트웨어 개발에 필요한 템플릿을 가지고 있으며 dependancy기능을 통해 여러 라이브러리들을 자동으로 추가할 수 있다.
다음은 maven홈페이지에 나와 있는 정의다.

Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.

maven을 쓰지 않는다면 라이브러리를 어떻게 처리할지 난감하다. 소스저장소에 두자니 버전이 정확히 어떻게 되는지 관리하기가 쉽지 않기 때문이다.


설치방법

우분투를 사용한다면 다음 명령으로 쉽게 maven 2.0.9를 설치할 수 있다.
sudo apt-get install maven

또는 maven홈페이지에서 zip파일이나 tar.gz파일을 받아서 다음과 같이 설치할 수 있다.
1. http://maven.apache.org에서 maven 다운
2. 적당한 곳에 압축파일을 푼다 (예: c:\maven)
3. 환경변수에 M2_HOME을 등록한다. (예: M2_HOME = c:\maven)
4. 환경변수에 M2를 등록한다. (예: M2 = c:\maven\bin)
5. PATH에 M2 를 추가한다. (예: PATH = %PATH%;%M2%)
6. 환경변수에 JAVA_HOME이 정확히 설정되어 있는지 확인한다.
  (예 : JAVA_HOME = c:\java1.6.0_10 )

정상적으로 설치되었다면 다음과 같이 mvn -version 명령을 입력하면 maven이 설치되었는지 확인할 수 있다.
yjpark@ubuntu:~$ mvn -version
Maven version: 2.0.9
Java version: 1.6.0_10
OS name: "linux" version: "2.6.27-9-generic" arch: "i386" Family: "unix"
yjpark@ubuntu:~$

티스토리 툴바