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에서 보기를 선택함

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


...

2012년 4월 9일 월요일

7-zip을 기본 압축 프로그램으로 설정

7-Zip File Manager를 마우스 오른쪽 버튼으로 클릭하고, 팝업 메뉴에서 '관리자 권한으로 실행'을 눌러 관리자 권한으로 실행시킵니다.


7-Zip의 도구 모음에서 '도구'메뉴를 누르고, '옵션'을 선택합니다. 이제, '모두 선택'과 '적용'버튼을 차례로 클릭합니다.

2012년 2월 29일 수요일

Eclipse용 SVN(Subclipse) 업데이트 사이트

http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA

Current Release

Eclipse 3.2/Callisto, 3.3/Europa, 3.4/Ganymede, 3.5/Galileo, 3.6/Helios, 3.7/Indigo, +

Subclipse 1.8.5 and 1.6.18 and 1.4.8 are now available for Eclipse 3.2+!
See the changelog for details. Existing Subclipse users should read the upgrade instructions for important information on changes you to need to make to your Eclipse preferences to see the new version in the update manager.
Subclipse 1.4.x includes and requires Subversion 1.5.x client features and working copy format.
Subclipse 1.6.x includes and requires Subversion 1.6.x client features and working copy format.
Subclipse 1.8.x includes and requires Subversion 1.7.x client features and working copy format.
Links for 1.8.x Release:
Changelog: http://subclipse.tigris.org/subclipse_1.8.x/changes.html
Eclipse update site URL: http://subclipse.tigris.org/update_1.8.x
Zipped downloads: http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240
Links for 1.6.x Release:
Changelog: http://subclipse.tigris.org/subclipse_1.6.x/changes.html
Eclipse update site URL: http://subclipse.tigris.org/update_1.6.x
Zipped downloads: http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240
Links for 1.4.x Release:
Changelog: http://subclipse.tigris.org/subclipse_1.4.x/changes.html
Eclipse update site URL: http://subclipse.tigris.org/update_1.4.x
Zipped downloads: http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240


서버 : http://blog.jidolstar.com/552 , http://kkamagui.springnote.com/pages/585605
서버 다운로드 : http://www.visualsvn.com/downloads/

클라이언트 : http://ioriy2k.pe.kr/archives/291
클라이언트 다운로드 : http://tortoisesvn.net/downloads.html

2012년 2월 23일 목요일

Purify - 미들웨어에서 호출한 서비스 적용방법

Purify를 통해서 미들웨어에서 호출된 서비스를 검증하는 방법은 대략 아래와 같습니다.
--------------------------------------------------
1> 서비스 원본의 복사본을 만듬, 례를 들어 서비스 파일이 sample_service라면 sample_service.nopure로 복사하여 저장함
2> Purify로 서비스 실행 파일 sample_service를 instrument 하여 sample_service.pure를 생성함, 례를 들면
# purify -verbose -log-file=/tmp/sample_service.purify.log -cache-dir=/tmp/purify-cache -always-use-cache-dir sample_service > verbose-log 2>&1
위에 커만드라인에 보이는 옵션들은 online 설명을 참고하시기 바랍니다.
3> Instrument한 서비스 파일sample_service.pure를 원본 서비스 파일 이름sample_service으로 바꿈
4> 미들웨어를 실행하여 서비스를 호출하고 서비스 기능들을 사용하시면 Purify가 데이터를 수집함
5> 미들웨어를 중지
6> 앞에 복사 저장한 sample_service.nopure 파일을 이용하여 서비스 파일을 원본으로 복원함
---------------------------------------------------