2013년 8월 17일 토요일

Maven 프로젝트를 Eclipse에서 활용하기


Maven이 작성한 프로젝트 구조를 이클립스에서 인식할 수 있도록 하는 방법

1. Maven에서 생성한 프로젝트 구조를 이클립스에 인식할 수 있도록 필요한 파일을 작성합니다.


-> C:\Users\kdyoung\web\mywebapp>mvn eclipse:eclipse

[INFO] Using Eclipse Workspace: null
[INFO] Adding default classpath container: org.eclipse.jdt.launching.JRE_CONTAINER
[INFO] Not writing settings - defaults suffice
[INFO] Wrote Eclipse project for "mywebapp" to C:\Users\kdyoung\web\mywebapp.
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------


-> C:\Users\kdyoung\web\mywebapp>dir

2013-08-17  오후 12:41               466 .classpath
2013-08-17  오후 12:41               457 .project
2013-08-17  오후 12:17             1,197 pom.xml
2013-08-17  오전 10:19    <DIR>          src
2013-08-17  오후 12:03    <DIR>          target

C:\Users\kdyoung\web\mywebapp\.classpath
------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
  <classpathentry kind="src" path="src/main/java" including="**/*.java"/>
  <classpathentry kind="output" path="target/classes"/>
  <classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.4/servlet-api-2.4.jar"/>
  <classpathentry kind="var" path="M2_REPO/javax/servlet/jsp/jsp-api/2.1/jsp-api-2.1.jar"/>
  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
</classpath>
------------------------------------------------------------------------------------------------------------

C:\Users\kdyoung\web\mywebapp\.project
------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
  <name>mywebapp</name>
  <comment>NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
  <projects/>
  <buildSpec>
    <buildCommand>
      <name>org.eclipse.jdt.core.javabuilder</name>
    </buildCommand>
  </buildSpec>
  <natures>
    <nature>org.eclipse.jdt.core.javanature</nature>
  </natures>
</projectDescription>
------------------------------------------------------------------------------------------------------------




이클립스(예, http://ftp.daum.net/eclipse//technology/epp/downloads/release/kepler/R/eclipse-jee-kepler-R-win32.zip)를 실행합니다.

2. 이클립스에서 C:\Users\kdyoung\web\mywebapp 프로젝트를 Import합니다.


3. 이클립스에서 Maven 빌드를 수행합니다.



Trouble Shooting

M2_REPO 변수



설치된 JRE



디폴트 JRE


JDK Compliance





...

Maven 빌드 플러그인 사용하기 - Jetty 빌드 플러그인

Jetty 빌드 플러그인은 http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html를 참고합니다. (Maven 빌드 플러그인 전반적인 내용은 http://maven.apache.org/plugins/를 참고합니다.)
!주의 : You need to use Maven 3 and Java 1.7 for this plugin.

<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${project.version}</version>


여기서는 이클립스 프로젝트 사이트로 옮기기 전의 http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin 사이트 내용을 기준으로 합니다.

<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.10</version>


1. pom.xml을 수정합니다.


C:\Users\kdyoung\web\mywebapp\pom.xml
-----------------------------------------------------------------------------------------------------------
<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.samples.maven</groupId>
  <artifactId>mywebapp</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>mywebapp</name>
  <url>http://maven.apache.org</url>

  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.4</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.1</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>maven-jetty-plugin</artifactId>
        <version>6.1.10</version>
      </plugin>
    </plugins>
  </build>
</project>
-----------------------------------------------------------------------------------------------------------

2. jetty를 실행합니다.


-> C:\Users\kdyoung\web\mywebapp>mvn jetty:run

[INFO] Configuring Jetty for project: mywebapp
[INFO] Webapp source directory = C:\Users\kdyoung\web\mywebapp\src\main\webapp
[INFO] web.xml file = C:\Users\kdyoung\web\mywebapp\src\main\webapp\WEB-INF\web.xml
[INFO] Classes = C:\Users\kdyoung\web\mywebapp\target\classes
[INFO] Logging to org.slf4j.impl.SimpleLogger(org.mortbay.log) via org.mortbay.log.Slf4jLog
[INFO] Context path = /mywebapp
[INFO] Tmp directory =  determined at runtime
[INFO] Web defaults = org/mortbay/jetty/webapp/webdefault.xml
[INFO] Web overrides =  none
[INFO] Webapp directory = C:\Users\kdyoung\web\mywebapp\src\main\webapp
[INFO] Starting jetty 6.1.10 ...
[INFO] jetty-6.1.10
[INFO] No Transaction manager found - if your webapp requires one, please configure one.
[INFO] Started SelectChannelConnector@0.0.0.0:8080
[INFO] Started Jetty Server

3. Jetty 서버가 실행된 것을 확인하고 mywebapp 사이트로 이동합니다.





4. JSP 파일을 수정하고 브라우저를 새로 고침하면 바로 확인됩니다.


C:\Users\kdyoung\web\mywebapp\src\main\webapp\index.jsp
-----------------------------------------------------------------------------------------------------------
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Hello World Updated!</h1>
    </body>
</html>
-----------------------------------------------------------------------------------------------------------



5. Java 클래스가 수정되면 동적으로 반영하기 위해서는 pom.xml을 수정합니다.


C:\Users\kdyoung\web\mywebapp\pom.xml
-----------------------------------------------------------------------------------------------------------
<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.samples.maven</groupId>
  <artifactId>mywebapp</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>mywebapp</name>
  <url>http://maven.apache.org</url>

  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.4</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.1</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>maven-jetty-plugin</artifactId>
        <version>6.1.10</version>
<configuration>
            <scanIntervalSeconds>5</scanIntervalSeconds>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
-----------------------------------------------------------------------------------------------------------



...

Maven을 이용한 샘플 Web 빌드 및 컴파일러 플러그인 구성

1. Web 애플리케이션을 작성할 폴더에서 Archetype에 기초해 프로젝트 구조를 작성합니다.

-> C:\Users\kdyoung\web>mvn archetype:generate

500: remote -> org.codehaus.mojo.archetypes:webapp-j2ee13 (-)
501: remote -> org.codehaus.mojo.archetypes:webapp-j2ee14 (-)
502: remote -> org.codehaus.mojo.archetypes:webapp-javaee6 (-)
503: remote -> org.codehaus.mojo.archetypes:webapp-javaee7 (Archetype for a web application using Java EE 7.)
504: remote -> org.codehaus.mojo.archetypes:webapp-jee5 (-)
-> Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 294: 501

Choose org.codehaus.mojo.archetypes:webapp-j2ee14 version:
1: 1.0
2: 1.0.1
3: 1.1
4: 1.2
5: 1.3
-> Choose a number: 5: 엔터키

-> Define value for property 'groupId': : org.samples.maven
-> Define value for property 'artifactId': : mywebapp
-> Define value for property 'version':  1.0-SNAPSHOT: : 엔터키
-> Define value for property 'package':  org.samples.maven: : 엔터키
Confirm properties configuration:
groupId: org.samples.maven
artifactId: mywebapp
version: 1.0-SNAPSHOT
package: org.samples.maven
-> Y: : 엔터키

-> C:\Users\kdyoung\web>cd mywebapp
-> C:\Users\kdyoung\web\mywebapp>dir

2013-08-17  오전 10:19             1,218 pom.xml
2013-08-17  오전 10:19    <DIR>          src

2. pom.xml 파일 내용을 살펴 봅니다.

C:\Users\kdyoung\web\mywebapp\pom.xml
---------------------------------------------------------------------------------------------------------
<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.samples.maven</groupId>
  <artifactId>mywebapp</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>mywebapp</name>
  <url>http://maven.apache.org</url>

  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.4</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.1</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.0.2</version>
        <configuration>
          <source>1.4</source>
          <target>1.4</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
---------------------------------------------------------------------------------------------------------

3. 샘플 JSP 파일을 살펴봅니다.
C:\Users\kdyoung\web\mywebapp\src\main\webapp\index.jsp
---------------------------------------------------------------------------------------------------------
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Hello World!</h1>
    </body>
</html>
---------------------------------------------------------------------------------------------------------

4. 샘플 web.xml 파일을 살펴봅니다.
C:\Users\kdyoung\web\mywebapp\src\main\webapp\WEB-INF\web.xml
---------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <display-name>mywebapp</display-name>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>
---------------------------------------------------------------------------------------------------------

5. 샘플을 빌드합니다.
-> C:\Users\kdyoung\web\mywebapp>mvn package
[INFO] Packaging webapp
[INFO] Assembling webapp [mywebapp] in [C:\Users\kdyoung\web\mywebapp\target\mywebapp-1.0-SNAPSHOT]
[INFO] Processing war project
[INFO] Copying webapp resources [C:\Users\kdyoung\web\mywebapp\src\main\webapp]
[INFO] Webapp assembled in [105 msecs]
[INFO] Building war: C:\Users\kdyoung\web\mywebapp\target\mywebapp-1.0-SNAPSHOT.war
[INFO] WEB-INF\web.xml already added, skipping
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

6. Tomcat을 실행한 뒤 mywebapp를 Deploy합니다.



7. mywebapp 사이트로 이동합니다.


Maven은 빌드 관련 플러그인들로 빌드를 수행하며 각각의 플러그인에 대한 환경 구성이 가능합니다. Archetype 선택 후 생성된 pom.xml에서 compiler는 JDK 1.4 기준으로 구성되어 있어 generic 구문을 사용시 에러가 발생하게 됩니다.

---------------------------------------------------------------------------------------------------------
참고: http://maven.apache.org/plugins/maven-compiler-plugin/index.html

The Compiler Plugin is used to compile the sources of your project. Since 3.0, the default compiler is javax.tools.JavaCompiler (if you are using java 1.6) and is used to compile Java sources. If you want to force the plugin using javac, you must configure the plugin option forceJavacCompilerUse.

Also note that at present the default source setting is 1.5 and the default target setting is 1.5, independently of the JDK you run Maven with. If you want to change these defaults, you should set source and targetas described in Setting the -source and -target of the Java Compiler.
---------------------------------------------------------------------------------------------------------


8. MyClass.java 파일을 작성합니다.
C:\Users\kdyoung\web\mywebapp\src\main\java\org\samples\maven\MyClass.java
---------------------------------------------------------------------------------------------------------
package org.samples.maven;

import java.util.*;

public class MyClass {

public static void main(String[] args)
{
List<String> stringList = new ArrayList<String> ();
}
}


---------------------------------------------------------------------------------------------------------

9. 컴파일을 시도합니다.

-> C:\Users\kdyoung\web\mywebapp>mvn compile

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.
0.2:compile (default-compile) on project mywebapp: Compilation failure
[ERROR] C:\Users\kdyoung\web\mywebapp\src\main\java\org\samples\maven\MyClass.java:[9,6] generics are not supported in -source 1.4
[ERROR] (use -source 5 or higher to enable generics)
[ERROR] List<String> stringList = new ArrayList<String>();

10. pom.xml 파일을 수정합니다.

(방법 1) 아래와 같이 source/target 값을 1.4에서 1.5로 수정합니다.
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.0.2</version>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
    </plugins>
  </build>

(방법 2) <configuration> 또는 <plugin> 또는 또는 <plugins> 또는 <build> block을 제거합니다. 디폴트 구성으로 1.5를 사용하기 때문입니다.

11. 컴파일을 합니다.

-> C:\Users\kdyoung\web\mywebapp>mvn compile

[INFO] Compiling 1 source file to C:\Users\kdyoung\web\mywebapp\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
...

2013년 8월 16일 금요일

Maven 의존성 관리 기능 및 3rd party lib 이용한 샘플 Java 수정하기

아래에서는 Maven에서 제공하는 의존성관리의 편리함을 활용합니다.

1. 특정 라이브러리에서 제공하는 클래스를 사용하도록 소스를 변경합니다.

C:\Users\kdyoung\myapp\MyMavenTest\src\main\java\org\samples\java\App.java
---------------------------------------------------------------------------------------------------------
package org.samples.java;

import org.slf4j.*;

/**
 * Hello world!
 *
 */
public class App
{
    public static void main( String[] args )
    {
        //System.out.println( "Hello World!" );
Logger logger = LoggerFactory.getLogger(App.class);
logger.info( "Hello World!" );
    }
}
---------------------------------------------------------------------------------------------------------

2. 소스 컴파일을 시도합니다.

-> C:\Users\kdyoung\myapp\MyMavenTest>mvn compile

[INFO] Compiling 1 source file to C:\Users\kdyoung\myapp\MyMavenTest\target\clas
ses
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] C:\Users\kdyoung\myapp\MyMavenTest\src\main\java\org\samples\java\App.java:[3,0] package org.slf4j does not exist
[ERROR] C:\Users\kdyoung\myapp\MyMavenTest\src\main\java\org\samples\java\App.java:[14,2] cannot find symbol
symbol  : class Logger
location: class org.samples.java.App
[ERROR] C:\Users\kdyoung\myapp\MyMavenTest\src\main\java\org\samples\java\App.java:[14,18] cannot find symbol
symbol  : variable LoggerFactory
location: class org.samples.java.App
[INFO] 3 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------


3. pom.xml을 수정하여 dependency를 추가합니다.

Maven Repository Search 사이트중 하나(예, http://mvnrepository.com/)로 이동하여  "slf4j"를 검색하고 slf4j API Module 링크로 이동합니다.



결과 중 하나를 선택하여 클릭합니다.

상세 내용에서 Maven관련 정보를 Copy합니다.



복사한 내용을 pom.xml에 붙여넣기를 합니다.

C:\Users\kdyoung\myapp\MyMavenTest\pom.xml
---------------------------------------------------------------------------------------------------------
<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.samples.java</groupId>
  <artifactId>MyMavenTest</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>MyMavenTest</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
  </dependencies>
</project>
---------------------------------------------------------------------------------------------------------

junit과 달리 scope를 지정하지 않으면 디폴트로 compile 단계로 scope이 지정됩니다.

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version> <scope>compile</scope>
</dependency>




4. 소스 컴파일을 합니다.

-> C:\Users\kdyoung\myapp\MyMavenTest>mvn compile

[INFO] ------------------------------------------------------------------------
[INFO] Building MyMavenTest 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: http://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.pom
Downloaded: http://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.pom (3 KB at 1.3 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/slf4j/slf4j-parent/1.7.5/slf4j-parent-1.7.5.pom
Downloaded: http://repo.maven.apache.org/maven2/org/slf4j/slf4j-parent/1.7.5/slf4j-parent-1.7.5.pom (12 KB at 28.8 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar
Downloaded: http://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar (26 KB at 44.6 KB/sec)


[INFO] Compiling 1 source file to C:\Users\kdyoung\myapp\MyMavenTest\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------


...

Maven 설치 및 샘플 Java 빌드하기

1. http://maven.apache.org에서 Maven을 다운로드하고 설치합니다.


-> apache-maven-3.1.0-bin.zip를 다운로드하고 C:\에 압축을 해제하면 C:\apache-maven-3.1.0 폴더가 만들어 집니다.

2. 환경 변수 M2_HOME=C:\apache-maven-3.1.0를 설정합니다.


->

3. 환경 변수 path에 C:\apache-maven-3.1.0\bin을 추가합니다.


->

4. 커맨드 창에서 mvn --version을 실행해서 설치 및 설정을 확인합니다.


->

5. 이제 인터넷이 연결되어 있는 상태에서 샘플 프로젝트 구조를 만들어 봅니다.


(1) "myapp" 폴더를 작성하고 해당 폴더로 이동합니다.


-> C:\Users\kdyoung>mkdir myapp

-> C:\Users\kdyoung>cd myapp

(2) 다음으로 mvn archetype:generate를 호출하여 프로젝트 구조를 작성합니다.


-> C:\Users\kdyoung\myapp>mvn archetype:generate

821: remote -> pro.savant.circumflex:webapp-archetype (-)
822: remote -> ru.circumflex:circumflex-archetype (-)
823: remote -> ru.nikitav.android.archetypes:release (-)
824: remote -> ru.nikitav.android.archetypes:release-robolectric (-)
825: remote -> se.vgregion.javg.maven.archetypes:javg-minimal-archetype (-)
826: remote -> sk.seges.sesam:sesam-annotation-archetype (-)
827: remote -> tk.skuro:clojure-maven-archetype (A simple Maven archetype for Clojure)
828: remote -> uk.ac.rdg.resc:edal-ncwms-based-webapp (-)

-> Choose a number or apply filter (format: [groupId:]artifactId, case sensitive co
ntains): 294: 엔터키 

디폴트 294 Archetype를 기초로 선택하여 프로젝트 구조를 작성합니다.

Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
-> Choose a number: 6: 엔터키

디폴트 6을 선택하여 최신 버전을 사용합니다.

Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/1.1/maven-archetype-quickstart-1.1.jar
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/1.1/maven-archetype-quickstart-1.1.jar (7 KB at 7.5 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/1.1/maven-archetype-quickstart-1.1.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/1.1/maven-archetype-quickstart-1.1.pom (2 KB at 5.7 KB/sec)

-> Define value for property 'groupId': : org.samples.java

Group Id로 사용할 임의의 문자열을 입력합니다.

-> Define value for property 'artifactId': : MyMavenTest

Artifact Id로 사용할 임의의 문자열을 입력합니다.

-> Define value for property 'version':  1.0-SNAPSHOT: : 엔터키

디폴트 값을 Version 문자열로 사용합니다.

-> Define value for property 'package':  org.samples.java: : 엔터키

Package로 사용할 문자열로 Artifact Id 문자열을 사용합니다.

Confirm properties configuration:
groupId: org.samples.java
artifactId: MyMavenTest
version: 1.0-SNAPSHOT
package: org.samples.java
-> Y: : 엔터키

마지막으로 확인을 합니다.

[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype:
 maven-archetype-quickstart:1.1
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: org.samples.java
[INFO] Parameter: packageName, Value: org.samples.java
[INFO] Parameter: package, Value: org.samples.java
[INFO] Parameter: artifactId, Value: MyMavenTest
[INFO] Parameter: basedir, Value: C:\Users\kdyoung\myapp
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:\Users\kdyoung\myapp\MyMavenTest
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16:58.392s
[INFO] Finished at: Fri Aug 16 15:55:56 KST 2013
[INFO] Final Memory: 8M/25M
[INFO] ------------------------------------------------------------------------



6. 프로젝트 구조를 확인합니다.


-> C:\Users\kdyoung\myapp>dir

2013-08-16  오후 03:55    <DIR>          MyMavenTest

-> C:\Users\kdyoung\myapp>cd MyMavenTest

-> C:\Users\kdyoung\myapp\MyMavenTest>dir

2013-08-16  오후 03:55               785 pom.xml
2013-08-16  오후 03:55    <DIR>          src

7. pom.xml 파일 내용을 확인합니다.

---------------------------------------------------------------------------------------------------------
<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.samples.java</groupId>
  <artifactId>MyMavenTest</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>MyMavenTest</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
---------------------------------------------------------------------------------------------------------

8. src 폴더 내용을 확인합니다.


-> C:\Users\kdyoung\myapp\MyMavenTest>cd src

-> C:\Users\kdyoung\myapp\MyMavenTest\src>dir

2013-08-16  오후 03:55    <DIR>          main
2013-08-16  오후 03:55    <DIR>          test

살펴보면 두개의 파일이 작성되어 있습니다.
(1) C:\Users\kdyoung\myapp\MyMavenTest\src\main\java\org\samples\java\App.java
---------------------------------------------------------------------------------------------------------
package org.samples.java;

public class App 
{
    public static void main( String[] args )
    {        System.out.println( "Hello World!" );    }
}
---------------------------------------------------------------------------------------------------------
(2) C:\Users\kdyoung\myapp\MyMavenTest\src\test\java\org\samples\java\AppTest.java
---------------------------------------------------------------------------------------------------------
package org.samples.java;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

public class AppTest extends TestCase
{
    public AppTest( String testName )
    {        super( testName );    }

    public static Test suite()
    {        return new TestSuite( AppTest.class );    }

    public void testApp()
    {        assertTrue( true );    }
}
---------------------------------------------------------------------------------------------------------

9. pom.xml이 있는 폴더에서 컴파일을 합니다.


-> C:\Users\kdyoung\myapp\MyMavenTest>mvn compile

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building MyMavenTest 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom
중략
Downloaded: http://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-compiler-api/1.9.1/plexus-compiler-api-1.9.1.jar (21 KB at 22.9 KB/sec)
[INFO] Compiling 1 source file to C:\Users\kdyoung\myapp\MyMavenTest\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.028s
[INFO] Finished at: Fri Aug 16 16:22:27 KST 2013
[INFO] Final Memory: 6M/16M
[INFO] ------------------------------------------------------------------------

10. pom.xml이 있는 폴더에서 패키징을 합니다.


-> C:\Users\kdyoung\myapp\MyMavenTest>mvn package

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building MyMavenTest 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.12.4/maven-surefire-plugin-2.12.4.pom
중략
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-junit3/2.12.4/surefire-junit3-2.12.4.jar (26 KB at 63.6 KB/sec)

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.samples.java.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 sec

Results :

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

[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ MyMavenTest ---
Downloading: http://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-arch
iver/2.1/plexus-archiver-2.1.jar
중략
Downloaded: http://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-archi
ver/2.1/plexus-archiver-2.1.jar (181 KB at 235.8 KB/sec)
[INFO] Building jar: C:\Users\kdyoung\myapp\MyMavenTest\target\MyMavenTest-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14.747s
[INFO] Finished at: Fri Aug 16 16:26:35 KST 2013
[INFO] Final Memory: 7M/19M
[INFO] ------------------------------------------------------------------------


11. 생성된 패키지를 실행하여 결과를 확인합니다.


-> C:\Users\kdyoung\myapp\MyMavenTest>java -cp target\MyMavenTest-1.0-SNAPSHOT.jar org.samples.java.App

Hello World!

12. (옵션) 빌드된 패키지를 로컬 리파지토리에 설치합니다.


-> C:\Users\kdyoung\myapp\MyMavenTest>mvn install

[INFO] --- maven-install-plugin:2.4:install (default-install) @ MyMavenTest ---
[INFO] Installing C:\Users\kdyoung\myapp\MyMavenTest\target\MyMavenTest-1.0-SNAPSHOT.jar to C:\Users\kdyoung\.m2\repository\org\samples\java\MyMavenTest\1.0-SNAPSHOT\MyMavenTest-1.0-SNAPSHOT.jar
[INFO] Installing C:\Users\kdyoung\myapp\MyMavenTest\pom.xml to C:\Users\kdyoung\.m2\repository\org\samples\java\MyMavenTest\1.0-SNAPSHOT\MyMavenTest-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.943s
[INFO] Finished at: Fri Aug 16 17:25:05 KST 2013
[INFO] Final Memory: 5M/15M
[INFO] ------------------------------------------------------------------------


13. Maven 빌드를 수행하고 나면 target 폴더가 생성됩니다.


-> C:\Users\kdyoung\myapp\MyMavenTest>dir

2013-08-16  오후 03:55               785 pom.xml
2013-08-16  오후 03:55    <DIR>          src
2013-08-16  오후 05:25    <DIR>          target


14. (옵션) 생성된 target 폴더를 다음과 같이 삭제할 수 있습니다.


-> C:\Users\kdyoung\myapp\MyMavenTest>mvn clean
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building MyMavenTest 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ MyMavenTest ---
[INFO] Deleting C:\Users\kdyoung\myapp\MyMavenTest\target
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.364s
[INFO] Finished at: Fri Aug 16 17:57:09 KST 2013
[INFO] Final Memory: 2M/15M
[INFO] ------------------------------------------------------------------------

-> C:\Users\kdyoung\myapp\MyMavenTest>dir

2013-08-16  오후 03:55               785 pom.xml
2013-08-16  오후 03:55    <DIR>          src

99. 결론적으로 Maven은 편리한 프로젝트 및 빌드 구조를 만들어 줍니다.





참고: http://www.youtube.com/playlist?list=PLMUNVW3VsMWWbU6HExbztVskPH6lhpt-J
...

IBM RELM의 제품 정의 기능들

IBM RELM에서는 제품을 정의할 수 있는 기능을 제공합니다.

아래는 "SuperiorMeter"라는 제품을 정의하고 "Antenna", "Battery Pack", "Display", "Handheld Software" 등을 콤포넌트로 구성합니다.

1. "Create a Product"을 클릭합니다.


2. 제품 이름을 "SuperiorMeter"로  명명합니다.

3. 기본적인 제품 정의를 하였습니다. 이제 제품의 콤포넌트를 생성합니다. "Create Product..." 아이콘을 클릭합니다.

4.  "Antenna" 콤포넌트를 생성합니다.


5. 같은 방법으로 "Battery Pack", "Display", "Handheld Software" 콤포넌트를 작성합니다.


6. 같은 방법으로 "Display"의 하부 콤포넌트 "LED", "Panel", "Buttons"를 작성합니다.


7. "SuperiorMeter" 제품의 원가를 10 USD로 설정하기 위해 "cost" property를 작성하고 value로 "10 USD"을 입력합니다.


8. 지금까지 제품과 콤포넌트를 정의하고 속성을 추가하는 방법을 설명했습니다.
완성된 모습은 아래와 같습니다.


...

IBM RELM의 정보 검색 관련 기능들


1. 텍스트 검색 기능을 제공함

검색 창에 검색할텍스트를 입력하면 검색 결과 목록를 보여 주고 정보의 종류별로 결과 목록에 대한 필터링을 제공함(정보가 많을 경우 편리함을 제공)

2. 보고서 작성 기능을 제공함
- 보고서 작성 아이콘을 클릭함 :

- 보고서 작성 마법사 1단계에서 보고서 템플리트를 선택함


- 보고서 작성 마법사 2단계에서 Register Queries를 실행함


- 마지막으로 Finish를 클릭하여 보고서를 작성함



3. 관련 정보들에 대한 시각화 기능을 제공함
- 먼저Views에서 보기를 선택함

- 보기에 맞게 관련 정보들이 표시됨


...