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

참고사항


gradle에 대한 학습의욕은 그득하나, 어떻게든 시작은 해보자.

gradle 처음 시작에 대한 이야기를 했었지만, 차근히 살펴보지 못했었는데, 이번 기회에 하나하나 꼬리에 꼬리를 물고 살펴보자.



gradle은 꾸준하게 업그레이드가 진행되고 있다. 1.10 나온지 얼마 되지도 않았는데 어느새 1.11이 2월 11일에 나오고…
어느 정도의 버전호환성은 유지되고 있다. 어느정도 안정화는 되었지만, [incubating] 되고 있는 기능들이 종종 사라지는 경우도 있으니 gradle 버전이 업그레이드될 때마다 한번씩 릴리즈 노트를 살펴보는 것이 중요하다.

오늘은 간단하게 gradle을 통해서 프로젝트를 구성하고 준비하자.
maven의 경우에는 최초 프로젝트를 생성하기 위해서 pom.xml 이 존재해야 한다. 혹은 How do I make my first Maven project?와 같이 archtype을 지정해야 한다. 물론 검색해서 찾아야 하는 번거로움이 있다.

mvn archetype:generate \ -DarchetypeGroupId=org.apache.maven.archetypes \ -DgroupId=com.mycompany.app \ -DartifactId=my-app

gradle의 경우는 Build init plugin에서 지원하는 5가지 유형(‘pom(Maven의 pom.xml을 바탕으로 build.gradle 을 생성)’, ‘java-library(자바의 관례적인 프로젝트 형태로 구성)’, ‘scala-library(스칼라)’, ‘groovy-library(그루비)’, ‘basic(build.gradle과 settings.gradle만 생성)’)을 제공한다.

나는 자바 개발자니까 gradle을 이용해서 java 프로젝트를 생성해보겠다.

$ gradle init --type java-library

이 명령어의 수행결과는 다음과 같다.


build.gradle

/*
 * This build file was auto generated by running the Gradle 'init' task
 * by 'ihoneymon' at '14. 2. 26 오전 12:59' with Gradle 1.10
 *
 * This generated file contains a sample Java project to get you started.
 * For more details take a look at the Java Quickstart chapter in the Gradle
 * user guide available at http://gradle.org/docs/1.10/userguide/tutorial_java_projects.html
 */

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

// In this section you declare where to find the dependencies of your project
repositories {
    // Use 'maven central' for resolving your dependencies.
    // You can declare any Maven/Ivy/file repository here.
    mavenCentral()
}

// In this section you declare the dependencies for your production and test code
dependencies {
    // The production code uses the SLF4J logging API at compile time
    compile 'org.slf4j:slf4j-api:1.7.5'

    // Declare the dependency for your favourite test framework you want to use in your tests.
    // TestNG is also supported by the Gradle Test task. Just change the
    // testCompile dependency to testCompile 'org.testng:testng:6.8.1' and add
    // 'test.useTestNG()' to your build script.
    testCompile 'junit:junit:4.11'
}

settings.gradle

/*
 * This settings file was auto generated by the Gradle buildInit task
 * by 'ihoneymon' at '14. 2. 26 오전 12:59' with Gradle 1.10
 *
 * The settings file is used to specify which projects to include in your build.
 * In a single project build this file can be empty or even removed.
 *
 * Detailed information about configuring a multi-project build in Gradle can be found
 * in the user guide at http://gradle.org/docs/1.10/userguide/multi_project_builds.html
 */

/*
// To declare projects as part of a multi-project build use the 'include' method
include 'shared'
include 'api'
include 'services:webservice'
*/

rootProject.name = 'gradle'

의 그래들 스크립트가 자동생성된 것을 볼 수 있다. build.gradle 에서 apply plugin: 'java'가 다음 이야기를 할 대상이다.

다음에는 gradle의 플러그인을 살펴보자.


참고


그레들 지원 플러그인을 설치했었다.

이클립스에는 그레들 에디터gradle editor가 설치되어 있지 않기 때문에, 아래 그림에서 보는 것처럼 '*.gradle'  파일을 열면 아래 텍스트로 열려서 어떤 형태로 구성되어 있는지 파악하기가 어렵다. 천성이 게으르다. 

이걸 어떻게 하면 색상을 적용해서 손쉽게 볼 수 있을까? 자동완성을 지원하게 할 수 있을까? 

하는 궁리를 하다가 문득 gradle editor를 본 기억이 났다.


아래 그림에서 보는 것처럼 Eclipse에서 'File Associations''*.gradle'이 적용되어 있지 않기에, build.gradle 등의 .gradle 확장자를 가진 파일을 열어도 일반 텍스트 에디터로 연결된다. 

이클립스에서 [Help -> Eclipse Marketplace...]를 선택한다. 'Find' 항목에 'gradle'이라고 입력하면, 아래 그림에서 보는 것처럼 'Minimalist Gradle Editor 0.10.0' 을 찾아볼 수 있을 것이다. [Install] 버튼을 누르고 설치를 진행한다.

설치 후에 다시 이클립스의 'File Associations'를 살펴보면 '*.gradle' 확장자와 그에 해당하는 'Associate Editors:' 항목에 추가된 것을 볼 수 있다.

다시 build.gradle을 열어보면 editor에 의해서 문법강조가 적용되어 있는 것을 볼 수 있다. 그리고 자동완성 기능도 지원된다. +_+)b 이클립스에서도 편하게 그레들 파일을 수정하자. 굿럭.


제 14회 한국자바개발자 컨퍼런스(http://www.jcoconference.co.kr/)에서 발표예제 프로젝트(https://github.com/ihoneymon/rocking-the-rest-api)를 작성하고 있다. 이 프로젝트는 빌드툴로 메이븐Maven대신 그레들Gradle을 사용하고, 프로젝트에 대한 xml 설정 대신에 JavaConfig를 적용해보고 있다(이와 관련해서 상당한 삽질이 예상된다, 나는 아직 그레들과 JavaConfig를 실제로 운영해본 적이 없으니까).

Intellij12에서는 web.xml을 기준으로 웹애플리케이션 여부를 판단한다. 그래서 JavaConfig로 프로젝트 설정을 해놓으면 자동으로 인식하지 못하는 문제가 있다. 어쨌든, 최소한의 web.xml 설정파일이 있어야 웹 애플리케이션으로 판단하고 설정을 진행한다.웹 애플리케이션으로 만들려면 Facet에서 'Web'에 대한 설정을 수동으로 해주어야 한다. 귀찮다.

최근에 나온 STS(Spring Tool Suite)가 상당히 깔끔하게 잘 나왔고, 혹시나 하는 마음에 그레들 지원을 제대로 해주지 않을까하는 마음을 가지고 STS를 실행한다. 아직 http://spring.io/tools/sts 에서 내려받은 STS에는 그레들이 기본설치 되어 있지 않기 때문에 'Gradle Support(혹은 Gradle Intergration plugin)'을 설치해주어야 한다. 화면에서 보는 것처럼 Dashboard에서 [extension]탭을 선택하고 'Find'에서 'gradle'만 입력하면 바로 찾아서 설치 가능하다. 

혹은 EclipseEE를 사용하는 사람은 밑에 그림에서 보는 것처럼 Eclipse Marketplace를 실행([Help -> Eclipse Marketplace...] 선택)하여 'gradle 혹은 gradle support'라고 검색하여 나온 'Gradle Integration for Eclipse'를 선택하고 [Install] 버튼을 눌러 설치를 진행한다.





플러그인의 설치가 완료되고 STS를 재시작하고 나서, [File -> Import]를 선택해보면 'Select an import source' 항목에 'Gradle Project'가 추가되어 있는 것을 확인할 수 있다. 

이렇게 간단하게 'Gradle support plugin'의 설치를 마쳤다.

+ Recent posts