Tools/BuildTools

[gradle] 그래들의 java plugin

허니몬 2014. 3. 6. 00:04


2014/02/26 - [Java/Tools] - [Gradle] gradle init --type java-library

이전 포스팅에서 설명했던 그레들을 이용해서 자바프로젝트를 초기화해보자.

gradle init --type java-library

실행결과는 다음과 같다

.
├── README.md
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
    ├── main
    │   └── java
    │       └── Library.java
    └── test
        └── java
            └── LibraryTest.java

7 directories, 9 files
  • gradle-wrapper.jar: 운영체제에 그레들이 설치되어 있지 않아도 JDK가 설치되어 있다면 래퍼를 통해서 실행이 가능하다.
  • gradlewgradlew.bat: 운영체제에서 실행가능한 스크립트로 리눅스, 유닉스 계열은 gradlew, 윈도우는gradlew.bat를 실행하면 된다. 그레들 래퍼를 사용할 때 필요한 그레들과 자바에 대한 환경설정을 할 수 있으며, 이는 개발팀 공통 적용이 가능해진다. 파일을 열어보면 위에 보이는 gradle-wrapper.jar을 classpath로 지정하여 실행된다는 것을 확인할 수 있다.

    즉, 운영체제에 설치된 그레들이 아니라, 현재 프로젝트 내에 있는 gradle-wrapper를 중심으로 그레들 실행이 된다는 이야기다.

  • build.gradle: 메이븐의 pom.xml과 같은 기능을 하는 빌드스크립트이며, 그루비groovy를 DSL로 채용하여 그루비의 문법을 사용한 동적인 빌드 스크립트를 작성하고, 의존성dependency 설정이 가능하다는 장점을 제공한다.
  • settings.gradle: 프로젝트 설정 및 멀티프로젝트에 대한 설정을 할 수 있다.
    • 참고: Settings

      build.gradle과 settings.gradle이 프로젝트 루트경로(/)에 존재하는 경우에는 그레들을 이용한 프로젝트 초기화가 적용되지 않는다.

이제 build.gradle에 있는 apply plugin: 'java'를 살펴보도록 하자.

apply plugin: 'java': 그레들 자바 플러그인 사용 선언

build.gradle 상단 부분을 보면 다음과 같은 항목을 볼 수 있을 것이다.

// Apply the java plugin to add support for Java
apply plugin: 'java'

주석으로 알 수 있듯이 java를 사용하기 위한 java plugin을 사용한다는 것을 선언한 것이다.

그레들은 플러그인을 추가하면, 그 플러그인에 선언되어 있는 태스크task들도 추가된다. 추가된 태스크를 확인하는 방법은 다음과 같다.

gradle tasks

자바 플러그인을 설치하고 나면 Build tasks가 추가된다.

ihoneymon@gradle-starter (master)$ gradle tasks
:tasks

------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------

Build tasks
-----------
assemble - Assembles the outputs of this project.
build - Assembles and tests this project.
buildDependents - Assembles and tests this project and all projects that depend on it.
buildNeeded - Assembles and tests this project and all projects it depends on.
classes - Assembles classes 'main'.
clean - Deletes the build directory.
jar - Assembles a jar archive containing the main classes.
testClasses - Assembles classes 'test'.

Build Setup tasks
-----------------
init - Initializes a new Gradle build. [incubating]
wrapper - Generates Gradle wrapper files. [incubating]

Documentation tasks
-------------------
javadoc - Generates Javadoc API documentation for the main source code.

Help tasks
----------
dependencies - Displays all dependencies declared in root project 'gradle-starter'.
dependencyInsight - Displays the insight into a specific dependency in root project 'gradle-starter'.
help - Displays a help message
projects - Displays the sub-projects of root project 'gradle-starter'.
properties - Displays the properties of root project 'gradle-starter'.
tasks - Displays the tasks runnable from root project 'gradle-starter'.

Verification tasks
------------------
check - Runs all checks.
test - Runs the unit tests.

Rules
-----
Pattern: build<ConfigurationName>: Assembles the artifacts of a configuration.
Pattern: upload<ConfigurationName>: Assembles and uploads the artifacts belonging to a configuration.
Pattern: clean<TaskName>: Cleans the output files of a task.

To see all tasks and more detail, run with --all.

BUILD SUCCESSFUL

Total time: 3.875 secs

메이븐을 접해본 사람이라면, ‘메이븐의 build lifecycle과 유사한 것 같은데?’라고 생각할수도 있다.

간단하게 test 태스크를 실행해보자.

./gradlew test

별다른 변화는 없다. 그냥 보면 심심하니까 테스트를 실패해보자. 소스코드를 다음과 같이 수정하고


테스트를 실행하면 다음과 같이 AssertionError 가 발생했다는 메시지와 함께 테스트가 실패한 곳을 표시한다.


이렇게 간단하게 gradle의 java 플러그인을 살펴봤다. 다음에는 간단하게 태스크를 작성하고 실행해보도록 하겠다. 그레들 플러그인을 설치하여 추가되는 태스크 외에도 사용자가 태스크 스크립트를 작성하여 실행할 수 있으며, 빌드에 지정한 태스크를 실행되도록 할 수도 있다.

참고사항