gradle - 설치

IDE & Build/Gradle 2012. 11. 5. 18:53


Gradle로 Spring @MVC 프로젝트 구성하기


그 동안 말로만 듣던 Gradle을 한번 사용해보려 한다. Gradle의 문서를 보면 다음과 같이 소개하고 있다.

Gradle UserGuide #Introduction

  • A very flexible general purpose build tool like Ant.
  • Switchable, build-by-convention frameworks a la Maven. But we never lock you in!
  • Very powerful support for multi-project builds.
  • Very powerful dependency management (based on Apache Ivy).
  • Full support for your existing Maven or Ivy repository infrastructure.
  • Support for transitive dependency management without the need for remote repositories or pom.xml and ivy.xml files.
  • Ant tasks and builds as first class citizens.
  • Groovy build scripts.
  • A rich domain model for describing your build.

1. Gradle 설치

Gradle UserGuide #Installing Gradle에 따라서 Gradle을 설치 후 프로젝트를 생성할 위치로 이동한다.

1
2
3
> cd ~
> mkdir springmvc-hellogradle
> cd springmvc-hellogradle

2. build.gradle 작성

‘build.gradle’ 파일을 생성하고 아래 스크립트를 작성한다.

build.gradle
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// plugin 설정 : JAVA, WAR(JAVA-WEB)
apply plugin: 'java'
apply plugin: 'war'

// JAVA Version 1.6
sourceCompatibility = 1.6
// 개발한 애플리케이션 버전
version = '1.0'

// 의존성 설정에 사용할 프로퍼티
springVersion = '3.1.1.RELEASE'
logBackVersion = '1.0.6'

// 메이븐 Central 저장소 사용
repositories {
    mavenCentral()
}

// 의존성 설정
dependencies {
  compile "org.springframework:spring-webmvc:$springVersion"
  compile 'cglib:cglib-nodep:2.2.2'
  compile 'ch.qos.logback:logback-classic:1.0.6'

    providedCompile 'javax.servlet:javax.servlet-api:3.0.1'

    testCompile "org.springframework:spring-test:$springVersion",
                'junit:junit:4.+',
                'org.mockito:mockito-core:1.9.0'
}

// logback(slf4j)를 사용하기 때문에 모든 의존성에서 commons-logging는 제외
[configurations.runtime, configurations.default]*.exclude(module: 'commons-logging')

// JAVA 컴파일시 인코딩 설정
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

// TEST 설정
test {
    jvmArgs = ['-ea', '-Xmx256m']
    logging.captureStandardOutput(LogLevel.INFO)
    testReport = false
}

// 프로젝트 초기화
// 1. java source directory 생성 : src/main/java, src/test/java
// 2. resource directory 생성    : src/main/resource, src/test/resource
// 3. web source directory 생성  : src/main/webapp, src/main/webapp/WEB-INF
task initProject(description: 'initialize project') << {
    createDir = {
        println "create source directory: $it"
        it.mkdirs()
    }
    sourceSets*.java.srcDirs*.each createDir
    sourceSets*.resources.srcDirs*.each createDir
    createDir webAppDir
    createDir new File(webAppDir, '/WEB-INF')
}

‘gradle check’ 명령을 통해서 아래와 유사한 결과를 얻으면 빌드 스크립트가 정상적으로 작성된 것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
> gradle check
Dynamic properties are deprecated: http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html
Deprecated dynamic property: "springVersion" on "root project 'springmvc-hellogradle'", value: "3.1.1.RELEASE".
Deprecated dynamic property: "logBackVersion" on "root project 'springmvc-hellogradle'", value: "1.0.6".
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test
:check

BUILD SUCCESSFUL

Total time: 3.131 secs

‘gradle initProject’ 명령을 통해 소스 디렉토리를 생성한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
> gradle initProject
Dynamic properties are deprecated: http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html
Deprecated dynamic property: "springVersion" on "root project 'springmvc-hellogradle'", value: "3.1.1.RELEASE".
Deprecated dynamic property: "logBackVersion" on "root project 'springmvc-hellogradle'", value: "1.0.6".
:initProject
Deprecated dynamic property: "createDir" on "task ':initProject'", value: "build_7lebs0ru0iqnv100...".
create source directory: ~/springmvc-hellogradle/src/main/java
create source directory: ~/springmvc-hellogradle/src/test/java
create source directory: ~/springmvc-hellogradle/src/main/resources
create source directory: ~/springmvc-hellogradle/src/test/resources
create source directory: ~/springmvc-hellogradle/src/main/webapp
create source directory: ~/springmvc-hellogradle/src/main/webapp/WEB-INF

BUILD SUCCESSFUL

Total time: 2.745 secs

3. Eclipse Project 변환

‘build.gradle’에 아래 내용을 추가한다.

1
2
apply plugin: 'eclipse'
apply plugin: 'eclipse-wtp'

‘gradle eclipse’ 명령으로 eclipse project를 생성 후 eclipse에서 import > Existing Projects into Workspace 로 생성된 프로젝트를 추가한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
> gradle eclipse
Dynamic properties are deprecated: http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html
Deprecated dynamic property: "springVersion" on "root project 'springmvc-hellogradle'", value: "3.1.1.RELEASE".
Deprecated dynamic property: "logBackVersion" on "root project 'springmvc-hellogradle'", value: "1.0.6".
:eclipseClasspath
:eclipseJdt
:eclipseProject
:eclipseWtpComponent
:eclipseWtpFacet
:eclipseWtp
:eclipse

BUILD SUCCESSFUL

Total time: 8.023 secs

4. Hello Gradle Web Application 작성

브라우저에서 접속하면 ‘Hello Gradle!’을 출력하는 간단한 웹 애플리케이션을 작성한다.

Spring Java Configuration을 사용해서 순수하게 Java로 Spring 설정코드를 작성할 것이다.

‘hellogradle.config’ packge를 생성하고 다음 2개의 클래스를 작성한다.

hellogradle.config.HelloGradleWebApplicationConfig.java
1
2
3
4
5
6
@Configuration
@EnableWebMvc
@ComponentScan(basePackages="hellogradle.web")
public class HelloGradleWebApplicationConfig {

}
hellogradle.config.HelloGradleWebApplicationInitializer.java
1
2
3
4
5
6
7
8
9
10
11
12
public class HelloGradleWebApplicationInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext context) throws ServletException {
        AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext();
        dispatcherContext.register(HelloGradleWebApplicationConfig.class);

        ServletRegistration.Dynamic dispatcher = context.addServlet("dispatcher", new DispatcherServlet(dispatcherContext));
        dispatcher.addMapping("/");
    }

}

‘hellogradle.web’ 패키지를 생성하고 다음 컨트롤러 클래스를 작성한다.

hellogradle.web.HelloGradleController.java
1
2
3
4
5
6
7
8
9
10
@Controller
public class HelloGradleController {

    @RequestMapping(value="/", method=RequestMethod.GET)
    @ResponseBody
    public String helloGradle() {
        return "Hello Gradle!";
    }

}

위 프로젝트를 Servlet 3.0을 지원하는 WAS에 배포 후 접속했을때 ‘Hello Gradle!’ 이 출력되면 완료된 것이다.

Gradle에서 제공하는 문서와 구글링을 통해 어렵지 않게 빌드 스크립트를 작성하고 진행 할 수 있었다. 그 동안 메이븐을 사용해보았기 때문인지 아니면 Gradle이 사용하기 쉬워서인지 아리송송하지만 확실히 메이븐에 비하면 사용하기가 쉽다.

복잡한 빌드 스크립트를 작성하기 시작하면 Groovy를 조금 알고있어야 하지 않을가 싶은데… 크게 우려할 수준까지는 아니라고 판단된다. (나는 Groovy는 한번도 써본적이 없다.)

 


출처 - http://arawn.github.com/blog/2012/08/28/gradle-springmvc-project/



'IDE & Build > Gradle' 카테고리의 다른 글

gradle - gradlew build  (0) 2016.12.14
maven 대신 gradle  (0) 2012.10.16
Posted by linuxism
,