하둡2.2.0을 윈도우7에 설치해서 실행에 성공한 블로거의 글이 있네요.

http://www.srccodes.com/p/article/38/build-install-configure-run-apache-hadoop-2.2.0-microsoft-windows-os


일단 링크 남기고 시간내서 돌려봐야 할 것 같습니다.

Protocol Buffers 2.5.0이 있는 것으로 봐서는 소스를 받아서 빌드까지 한 것 같습니다.


  1. Apache Hadoop 2.2.0 Source codes

  2. Windows 7 OS

  3. Microsoft Windows SDK v7.1

  4. Maven 3.1.1

  5. Protocol Buffers 2.5.0

  6. Cygwin

  7. JDK 1.6


build.gradle에 다음 한 줄만 추가하면 됩니다.


apply plugin: 'eclipse-wtp'


gradle build로 실행하면 .project, .classpath 두 파일이 생깁니다.


total 48

drwxr-xr-x  11 kenu  staff   374 10 21 23:35 .

drwxr-xr-x  11 kenu  staff   374 10 20 15:24 ..

-rw-r--r--   1 kenu  staff  1358 10 21 23:35 .classpath

drwxr-xr-x   3 kenu  staff   102 10 21 23:35 .gradle

-rw-r--r--   1 kenu  staff   355 10 21 23:35 .project

drwxr-xr-x   3 kenu  staff   102 10 21 23:35 .settings

-rw-r--r--   1 kenu  staff   228 10 21 23:35 build.gradle

drwxr-xr-x   3 kenu  staff   102 10 20 15:04 gradle

-rwxr-xr-x   1 kenu  staff  5080 10 20 15:04 gradlew

-rw-r--r--   1 kenu  staff  2404 10 20 15:04 gradlew.bat

drwxr-xr-x   4 kenu  staff   136 10 20 14:59 src


이클립스에서 이 디렉토리 지정하고 import 하시면 됩니다.

gradle 빌드로 테스트케이스를 실행할 수 있습니다.


src/main 이 아닌 src/test/java/hello 폴더에 GreeterTest.java 클래스를 만듭니다. 

파일 첨부합니다.

gradle-start.zip

.

├── build.gradle

├── gradle

│   └── wrapper

│       ├── gradle-wrapper.jar

│       └── gradle-wrapper.properties

├── gradlew

├── gradlew.bat

└── src

    ├── main

    │   └── java

    │       └── hello

    │           ├── Greeter.java

    │           └── HelloWorld.java

    └── test

        └── java

            └── hello

                └── GreeterTest.java


GreeterTest.java 내용은 다음과 같습니다.

package hello;


import static org.junit.Assert.*;

import static org.hamcrest.CoreMatchers.*;


import org.junit.*;


public class GreeterTest {

    @Test

    public void sayHello() {

        Greeter greeter = new Greeter();

        assertThat(greeter.sayHello(), is("Hello world!"));

    }

}


build.gradle 파일에는 junit.jar 파일을 추가합니다.

apply plugin: 'java'


repositories { mavenCentral() }

dependencies {

  compile "joda-time:joda-time:2.2"

  testCompile "junit:junit:4.11"

}


testCompile로 지정한 jar의 경우 최종 결과물에는 포함되지 않습니다. build 폴더를 보면 reports 폴더가 생기고 test 결과가 있습니다. 

.

├── build

│   ├── classes

│   │   ├── main

│   │   │   └── hello

│   │   │       ├── Greeter.class

│   │   │       └── HelloWorld.class

│   │   └── test

│   │       └── hello

│   │           └── GreeterTest.class

│   ├── dependency-cache

│   ├── libs

│   │   └── gradle-start.jar

│   ├── reports

│   │   └── tests

│   │       ├── base-style.css

│   │       ├── css3-pie-1.0beta3.htc

│   │       ├── hello.GreeterTest.html

│   │       ├── hello.html

│   │       ├── index.html

│   │       ├── report.js

│   │       └── style.css

│   ├── test-results

│   │   ├── TEST-hello.GreeterTest.xml

│   │   └── binary

│   │       └── test

│   │           ├── output.bin

│   │           ├── output.bin.idx

│   │           └── results.bin

│   └── tmp

│       └── jar

│           └── MANIFEST.MF


index.html 파일을 브라우저로 열어보면 다음과 같습니다.

gradle에 대한 권남님의 블로그를 추천합니다.

http://wiki.kwonnam.pe.kr/gradle/java


gradle이 설치되지 않은 경우 실행이 가능하도록 실행스크립트를 더해줍니다. build.gradle 파일에 gradle의 버전을 지정합니다.


task wrapper(type: Wrapper) {

    gradleVersion = '1.8'

}


위 내용이 추가되면 gradle wrapper 라는 명령으로 빌드스크립트를 생성합니다. gradlew 파일이 생성됩니다. 윈도우용과 리눅스용이 같이 생깁니다.

gradle wrapper

:wrapper


BUILD SUCCESSFUL


Total time: 4.893 secs


├── gradle

│   └── wrapper

│       ├── gradle-wrapper.jar

│       └── gradle-wrapper.properties

├── gradlew

├── gradlew.bat

└── src

    └── main

        └── java

            └── hello

                ├── Greeter.java

                └── HelloWorld.java



만들어진 gradlew 파일을 실행하면 다음과 같습니다.


./gradlew build

Downloading http://services.gradle.org/distributions/gradle-1.8-bin.zip

..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

Unzipping /Users/kenu/.gradle/wrapper/dists/gradle-1.8-bin/vruqmccc8532n7gr46qavsii8/gradle-1.8-bin.zip to /Users/kenu/.gradle/wrapper/dists/gradle-1.8-bin/vruqmccc8532n7gr46qavsii8

Set executable permissions for: /Users/kenu/.gradle/wrapper/dists/gradle-1.8-bin/vruqmccc8532n7gr46qavsii8/gradle-1.8/bin/gradle

:compileJava

:processResources UP-TO-DATE

:classes

:jar

:assemble

:compileTestJava UP-TO-DATE

:processTestResources UP-TO-DATE

:testClasses UP-TO-DATE

:test UP-TO-DATE

:check UP-TO-DATE

:build


BUILD SUCCESSFUL


Total time: 20.926 secs


참고: http://spring.io/guides/gs/gradle/#build-your-project-with-gradle-wrapper

gradle로 자바 빌드하기 1/2 

위 글에 이어집니다.


HelloWorld.java를 다음과 같이 수정합니다.

package hello;


import org.joda.time.LocalTime;


public class HelloWorld {

  public static void main(String[] args) {

    LocalTime currentTime = new LocalTime();

    System.out.println("The current local time is: " + currentTime);


    Greeter greeter = new Greeter();

    System.out.println(greeter.sayHello());

  }

}


joda의 LocalTime 클래스를 사용합니다.

이 상태에서 gradle build 를 실행하면 다음과 같은 에러 메시지를 만나게 됩니다.

gradle build

:compileJava

/Users/kenu/tmp/gradle-start/src/main/java/hello/HelloWorld.java:3: error: package org.joda.time does not exist

import org.joda.time.LocalTime;

                    ^

/Users/kenu/tmp/gradle-start/src/main/java/hello/HelloWorld.java:7: error: cannot find symbol

    LocalTime currentTime = new LocalTime();

    ^

  symbol:   class LocalTime

  location: class HelloWorld

/Users/kenu/tmp/gradle-start/src/main/java/hello/HelloWorld.java:7: error: cannot find symbol

    LocalTime currentTime = new LocalTime();

                                ^

  symbol:   class LocalTime

  location: class HelloWorld

3 errors

:compileJava FAILED


FAILURE: Build failed with an exception.


* What went wrong:

Execution failed for task ':compileJava'.

> Compilation failed; see the compiler error output for details.


* Try:

Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.


BUILD FAILED


Total time: 3.239 secs


build.gradle 파일에 필요한 jar 파일을 명시합니다.

apply plugin: 'java'


repositories { mavenCentral() }

dependencies {

  compile "joda-time:joda-time:2.2"

}


다시 gradle build 를 실행하면 joda-time-2.2.jar 파일을 인터넷을 통해 maven central 저장소에서 자동으로 다운로드 받아서 빌드합니다.

gradle build

:compileJava

Download http://repo1.maven.org/maven2/joda-time/joda-time/2.2/joda-time-2.2.pom

Download http://repo1.maven.org/maven2/joda-time/joda-time/2.2/joda-time-2.2.jar

:processResources UP-TO-DATE

:classes

:jar

:assemble

:compileTestJava UP-TO-DATE

:processTestResources UP-TO-DATE

:testClasses UP-TO-DATE

:test UP-TO-DATE

:check UP-TO-DATE

:build


BUILD SUCCESSFUL


Total time: 7.106 secs


maven과 다르게 로컬에 jar를 관리하는 폴더는 .m2가 아닌 .gradle 폴더입니다.

./.gradle/caches/artifacts-26/filestore/joda-time/joda-time/2.2/jar/a5f29a7acaddea3f4af307e8cf2d0cc82645fd7d/joda-time-2.2.jar


행복하세요.




빌드도구 Maven의 시스템을 그대로 사용하는 gradle은 IDE보다 command로 먼저 학습하는 것이 좋습니다.

http://spring.io/guides/gs/gradle/#scratch


문서가 아주 쉽게 잘 나왔네요.


시작은 아주 간단합니다.


1. gradle 설치

http://www.gradle.org

사이트에서 다운로드 받은 뒤에 적당한 곳(예, C:\java\gradle-1.8)에 압축을 풀고 %JAVA_HOME%\bin; 처럼 C:\java\gradle-1.8\bin; 을 시스템 환경변수 Path 에 추가합니다.

cmd 창을 새로 열어서 gradle 명령어가 동작하는지 확인합니다.


2. 자바 소스 컴파일

다음과 같은 구조의 자바파일 두 개가 있다고 합시다. Maven과 구조가 같죠. 첨부한 파일 압축을 풀면 됩니다.

gradle-start.zip


.

├── build.gradle

└── src

    └── main

        └── java

            └── hello

                ├── Greeter.java

                └── HelloWorld.java


프로젝트 최상단 폴더에 build.gradle 이라는 파일을 만들고 그 내용에 한 줄만 넣으면 됩니다.

apply plugin: 'java'


이제 컴파일하는 절차만 남았습니다.

gradle build

:compileJava

:processResources UP-TO-DATE

:classes

:jar

:assemble

:compileTestJava UP-TO-DATE

:processTestResources UP-TO-DATE

:testClasses UP-TO-DATE

:test UP-TO-DATE

:check UP-TO-DATE

:build


BUILD SUCCESSFUL


Total time: 4.677 secs


gradle build 라고 입력하면 자동으로 컴파일합니다.


.

├── build

│   ├── classes

│   │   └── main

│   │       └── hello

│   │           ├── Greeter.class

│   │           └── HelloWorld.class

│   ├── dependency-cache

│   ├── libs

│   │   └── gradle-start.jar

│   └── tmp

│       └── jar

│           └── MANIFEST.MF


다음과 같이 실행해 볼 수 있겠죠.

java -cp build/libs/gradle-start.jar hello.HelloWorld


또는 class를 직접 실행할 수 있습니다.

java -cp build/classes/main hello.HelloWorld


jar파일이 필요한 것은 다음 글에서 정리해 보겠습니다.


gradle로 자바 빌드하기 2/2

메이븐, 빌드 도구

허광남 kenu.heo@gmail.com

메이븐은 아파치의 오픈 소스 빌드 도구입니다. http://maven.apache.org 사이트에서 정보를 구할 수 있습니다. 빌드란 프로그램 소스의 컴파일을 포함해서 애플리케이션을 사용할 수 있도록 패키징까지 해주는 과정입니다. 개발환경 도구에는 메이븐의 이클립스 플러그인이 함께 설치되어 있습니다. m2eclipse라는 플러그인이며, 이클립스에서 메이븐을 쉽게 사용하도록 도와주는 기능을 제공합니다.

메이븐 프로젝트 소스 구조

메이븐은 설정보다 관례(CoC;Convention over Configuration)라는 컨셉으로, 먼저 나왔던 ANT(http://ant.apache.org) 빌드 도구와 달리 빌드의 설정을 자유롭게 하는 대신 지정된 규칙에 따라 코드를 위치시키면 컴파일, 패키징, 문서화 등의 나머지 작업들을 자동으로 수행해 줍니다.

자바 라이브러리 일괄 관리

메이븐은 여러 프로젝트에 중복 산재해 있는 자바 라이브러리(JAR)를 한 곳에서 관리합니다. 일반적으로 프로젝트에서 소스코드가 차지하는 용량이 3~5메가라고 하면 jar파일의 크기는 30~50메가가 넘는 경우가 많습니다. 이런 경우 버전관리 시스템에서 제외시켜서 관리할 수 있다면 매우 가볍게 작업이 가능합니다.
메이븐은 사용자 홈 디렉토리를 기준으로 .m2 라는 폴더를 만들어서 repository 폴더 하위에 인터넷에서 다운로드 받은 jar 파일을 관리합니다. pom.xml 에서 지정된 라이브러리들을 필요에 따라 복사하거나 참조해서 사용합니다.

메이븐 설치

전자정부 표준프레임워크의 개발환경 서버를 설치하면 메이븐이 함게 설치됩니다. JAVA_HOME 환경변수 같이 MAVEN_HOME을 지정하고, PATH에 추가해도 되지만 메이븐/bin, 폴더만 PATH 환경변수에 추가하겠습니다. 컴퓨터 아이콘을 클릭하고, 컨텍스트 메뉴에서 속성을 선택합니다.
<그림> 환경변수 설정 시작



제어판의 좌측에서 고급 시스템 설정을 클릭합니다.
<그림> 고급 시스템 설정



하단의 시스템 변수에서 Path 항목을 선택합니다. 여기에 들어갈 값은 빌게이츠 친구 탐색기에서 복사할 수 있습니다.
<그림> 시스템 변수 Path



탐색기를 열어서 C:폴더에 들어갑니다. 주소줄을 클릭해서 복사합니다.
<그림> 메이븐 경로 복사



시스템 환경 변수 Path의 제일 앞에 복사한 C:경로를 추가하고 ;을 붙여서 구분해 줍니다.
<그림> 메이븐 경로 Path에 추가



cmd 창을 띄워서 mvn --version 을 입력합니다. 버전이 표시되면 정상적으로 설치가 된 것입니다.
<그림> 메이븐 버전 확인


메이븐 간단 테스트

간단히 템플릿 코드를 생성해 보겠습니다. 다음의 코드를 cmd창에 입력합니다.
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

필요한 jar파일을 알아서 다운로드합니다. 그 파일들을 이용해서 archetype 플러그인의 generate 골을 실행합니다.
<그림> 메이븐 아키타입 실행



tree /f 도스 명령어를 이용해서 생성된 파일들과 폴더를 보면 다음과 같습니다. src/main, src/test 폴더에 각각 지정한 groupId 패키지에 따른 하위 폴더와 각각의 java 샘플이 있고, 가장 상위에는 pom.xml 파일이 있습니다.
<그림> 메이븐 아키타입 퀵스타트 구조



빌드는 mvn package 페이즈(phase)를 통해서 할 수 있습니다.
<그림> 메이븐 pacakge 페이즈 실행



결과는 target 폴더가 만들어지면서 담기게 됩니다. quickstart 샘플의 경우 jar파일이 만들어 집니다.
<그림> 메이븐 산출물 target



target 폴더로 이동해서 java -cp my-app-1.0.SNAPSHOT.jar com.mycompany.app.App 명령을 입력하면 실행할 수 있습니다.
<그림> 메이븐 결과 실행



간단히 메이븐을 설치하고 이용하는 방법을 알아보았습니다.


http://okjsp.tistory.com
http://okjsp.net
http://github.com/kenu
























10/04일에 maven 3.0이 나왔습니다. http://maven.apache.org/
가볍게 2.8M의 파일을 받아서 압축을 풀었습니다. /home/kenu/java/apache-maven-3.0/

환경변수 $PATH에 maven실행파일 경로를 추가했습니다.
JAVA_HOME=/home/kenu/java/jdk1.6.0_18
PATH=$PATH:$JAVA_HOME/bin:/home/kenu/java/apache-maven-3.0/bin
export JAVA_HOME
export PATH

환경변수를 적용하고, mvn 버전을 확인합니다.
$. ~/.profile
$mvn -version
Apache Maven 3.0 (r1004208; 2010-10-04 20:50:56+0900)
Java version: 1.6.0_18
Java home: /home/kenu/java/jdk1.6.0_18/jre
Default locale: ko_KR, platform encoding: UTF-8
OS name: "linux" version: "2.6.32-25-generic" arch: "amd64" Family: "unix"

설치는 잘 되었습니다.
샘플 프로젝트를 만들어봅니다. phase는 generate , groupId는 com.mycompany.app, artifactId는 my-app 정도가 됩니다.
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

이렇게 만들어집니다.
kenu@kenu-ubuntu:~/maven$ cd my-app
kenu@kenu-ubuntu:~/maven/my-app$ tree
.
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- com
    |           `-- mycompany
    |               `-- app
    |                   `-- App.java
    `-- test
        `-- java
            `-- com
                `-- mycompany
                    `-- app
                        `-- AppTest.java


이제 컴파일하고 빌드를 해봅니다.
mvn package

경로를 바꾸고 실행은 다음과 같이 할 수 있습니다.
java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
Hello World!

설치는 잘 되었습니다.
사용자 홈 디렉토리 아래 .m2 라는 폴더가 생겨서 여기에 다운로드되는 파일들이 많이 있습니다. 로컬 캐시역할을 하기 때문에 처음 실행시에는 시간이 많이 걸립니다.

Ant를 넘어서 maven으로 갈아탈 준비중입니다.

JUnit을 이용한 테스트케이스를 실행한 결과를 api형태의 보고서로 또는 그래픽으로 비주얼하게 보여줄 수 있습니다.

http://www.okjsp.pe.kr/docs/report 에서 확인할 수 있습니다.

아울러 hudson에서도 다른 형태의 리포트가 나옵니다.
우측 상단의 파란색 그래프입니다.

더 자세한 정보도 볼 수 있습니다.

http://www.okjsp.pe.kr:8080/job/okjsp%20site%20build/

아주 오래 미뤄왔던 일을 해내었습니다. 이제 버그 잡아야겠습니다.
Hudson을 이용한 프로젝트 모니터링

Continuous Integration in Practice


http://freemind.sf.net 형식의 파일입니다.

+ Recent posts