본문 바로가기

SpringFrameWork

4. Gradle로 자바 빌드하기

Gradle을 쓸 일이 앞으로 많아질텐데, 스프링 튜토리얼에서도 Gradle을 소개하고 있어 

간략하게 언급하고 넘어가겠습니다. 최근에는 Android 에서도 Gradle을 이용하여 빌드를 하고 있다고 하니, 서버/앱 개발자들은 이걸 배울 필요가 있을 것 같습니다.


이 포스팅은 https://spring.io/guides/gs/gradle/#scratch 의 내용을 참고하여 작성하였습니다.

자세한 내용을 보길 원하시는 분은 해당 사이트를 방문해 보시기 바랍니다.

Gradle 빌드 할 소스파일 : 

GradleBuildTest.zip


빌드한 jar를 테스트하기위한 프로젝트의 소스파일 :

HelloGradle.zip




Gradle은 빌드 툴입니다. 

빌드 툴이 무엇인고 하니... 점점 거대해지고 있는 소스를 간편하게 컴파일하기 위한 도구입니다.

Hello World같은 간단한 프로그램이야 그냥 Visual Studio나 이클립스에서 실행 명령을 내리거나, gcc로 make하면 그냥 동작했지만, 라이브러리를 그때그때 다르게 바꾸거나, 컴파일 타임에 언어설정을 넣어 국가별로 다른 바이너리를 출력하거나 하는 작업을 하기 위해서는 컴파일을 위한 별도의 툴이 필요할 지경이 되었습니다.

그래서 Ant가 나왔고, 그것을 더 편하게 쓰기 위해 Maven이 나왔습니다. 

즉, 복잡하고 종속성이 거지같이 얽혀있는 프로젝트를 빌드하려면 툴을 안쓰면 답이 안나오고, Gradle이 이에 대한 새로운 해법으로 나온 것입니다.

이들에 대해 정확히 언급하려면 각각 책이 한권씩이니 대략 그렇다는 것만 언급하고, 그 다음 차세대 빌드 툴로 각광받는 Gradle을 살펴보겠습니다. 엄밀하게 말하면 각각이 서로 다른 역할을 하며, Gradle이 Maven을 이용하여 작업을 하는 부분도 있어서 1:1로 대체되는 개념은 아닙니다만......

개인적으로는 Gradle밖에 쓰지 않아 모르겠지만, 다른 분들의 말을 들어보면 처음 배우기가 Gradle이 쉽고, 실제로 할 수 있는 일은 Maven이나 Gradle이나 동일한데, Gradle은 좀더 적은 노력으로 같은 일을 할 수 있다고 합니다. 



1. Gradle을 설치합니다.

http://www.gradle.org/downloads

그리고 환경변수의 path에 Gradle이 설치된 경로를 추가해줍니다.


2. 매우 간단한 프로젝트를 생성합니다.  두개의 파일로 구성된 프로젝트입니다.

예제폴더명은 GradleBuildTest으로 정했습니다.


예제 사이트의 내용을 약간 수정했습니다.

경로 : \GradleBuildTest\src\main\java\hello

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());
  }
}



경로 : \GradleBuildTest\src\main\java\hello

Greeter.java


package hello;

public class Greeter {
  public String sayHello() {
    return "Hello Gradle world!";
  }
}



경로 : \GradleBuildTest

build.gradle

apply plugin: 'java'
apply plugin: 'eclipse'

// tag::repositories[]
repositories {
    mavenCentral()
}
// end::repositories[]

// tag::jar[]
jar {
    baseName = 'gs-gradle'
    version =  '0.1.0'
}
// end::jar[]

// tag::dependencies[]
dependencies {
    compile "joda-time:joda-time:2.2"
}
// end::dependencies[]

// tag::wrapper[]
task wrapper(type: Wrapper) {
    gradleVersion = '1.11'
}
// end::wrapper[]


3. Gradle을 이용하여 프로젝트를 초기화 합니다.

> gradle tasks


4. Gradle을 이용하여 프로젝트를 빌드합니다.

> gradle build



5. 결과를 확인합니다.

GradleBuildTest\build\libs 경로 내에 GradleBuildTest-0.1.0.jar가 생성되어있는 것을 확인합니다.

gradle.build 파일 내의 dependencies 항목을 살펴보겠습니다.

특정 버전의 joda-time 라이브러리를 이용하라고 지시한 부분이 보입니다.

옆 팀이나 오픈소스 진영에서 개발이 진행되고 있는 프로젝트의 라이브러리를 가져다 쓸 때는

해당 라이브러리의 버전에 따라 기능이 차이가 나는 경우가 매우 많습니다. 그래서

이런 방식으로 버전을 명시하여 버그를 벗어날 수 있습니다.


다시 한 번 tasks를 호출해 봅니다. 아까와는 다르게 몇 가지 기능을 더 쓸 수 있게 된 것을 확인할 수 있습니다.

>gradle tasks



6. gradle wrapper

커맨드 창에서 아래와 같이 입력합니다.

> gradle wrapper

그러면 설정파일에서 설정한 wrapper대로 실행이 되는데, 여기서 gradle의 버전을 선택할 수 있습니다.

서로 다른 여러 사람이 한 소스를 수정할 때, 어떤 사람은 gradle 버전 1.11로 빌드하고 다른 사람은 1.6으로 빌드하면 어디선가는 에러가 발생할 수 있습니다. 그래서 이를 방지하기 위해 이런 wrapper을 이용할 수 있습니다.


7. 제대로 빌드 되었는지 테스트

새로 Java project를 만든 뒤 방금 빌드에 성공한 jar 파일을 복사하여 새 프로젝트의 libs 폴더에 넣습니다.

그리고 properties - build path 에서 add jar하여 방금 빌드한 jar를 포함시킵니다.

그 후 아래와 같이 Greeter를 불러와서 정상동작하는지 확인 해 봅니다.


package hello;

public class Main {
	public static void main(String[] args) {
		Greeter greeter = new Greeter();
		System.out.println(greeter.sayHello());
	}
}





결과 :



'SpringFrameWork' 카테고리의 다른 글

3. 가상서버에서 테스트  (0) 2014.02.26
2. Hello World, IOC  (0) 2014.02.26
1. Hello World Example  (0) 2014.02.05