Gradle 프로젝트 생성

Gradle을 사용하여 Java 프로젝트를 작성한다. 그리고 프로젝트가 어떻게 구성되어 있는지 살펴 보고 설명한다.

Gradle 프로젝트 초기화

여기서는 Gradle을 사용하여 개발을 위한 프로젝트 초기화 진행에 대해 설명한다.

프로젝트를 초기화하기

Gradle 개발을 하려면, 먼저 Gradle에 의한 프로젝트를 준비한다. 이는 다음과 같은 단계를 수행한다.

1. 프로젝트를 생성할 위치로 이동한다.

명령 프롬프트 또는 터미널을 시작하고 프로젝트를 만들려면 적당한 위치로 이동한다. 바탕 화면에 생성한다면, 아래와 같이 실행하면 된다.

$ cd Desktop

2. 프로젝트 디렉터리를 만든다.

여기에서는 “GradleApp"라는 이름으로 디렉터리를 만들기 위해 다음과 같이 명령을 실행한다.

$ mkdir GradleApp

3. 프로젝트 디렉터리로 이동한다.

다음#과 같이 실행하자.

$ cd GradleApp

4. 프로젝트를 초기화한다.

이것이 실질적으로 Gradle 프로젝트의 기반을 만드는 작업이다. 다음 명령을 실행한다.

$ gradle init --type java-application

gradle init라는 것이 Gradle 초기화를 위한 명령이다. 이후에 --type java-application는 Java 응용 프로그램 프로젝트 유형을 지정한다.

Starting a Gradle Daemon (subsequent builds will be faster)

BUILD SUCCESSFUL in 10s
2 actionable tasks: 2 executed

잠시 기다리고 있으면 폴더에 필요한 파일이나 디렉터리가 만들어 진다.

Gradle 프로젝트 구성

생성된 프로젝트가 어떻게 구성되어 있는지, 폴더의 내용을 확인한다. 다음과 같은 것들이 준비되어 있어야 한다.

Gradle 폴더

.
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
    ├── main
    │   └── java
    │       └── App.java
    └── test
        └── java
            └── AppTest.java

.gradle 폴더

Gradle이 사용하는 폴더이다. 작업(task)로 생성된 파일이 저장된다. 이 내용을 편집하는 일은 거의 없다.

gradle 폴더

이것도 Gradle이 필요한 경우 사용할 폴더이다. 기본적으로 Gradle 환경을 정리한 “wrapper 파일"이라는 파일들이 저장되어 있다.

src 폴더

이것이 프로젝트에서 만든 프로그램 관련 폴더이다. 프로젝트에서 사용하는 파일(소스 코드 파일, 각종 리소스 파일 등)은 모두 이 안에 들어간다.

build.gradle

이 Gradle 기본 빌드 설정 파일이다. 이 안에 프로젝트의 빌드 처리에 대해서 내용이 작성되어 있다.

gradlew, gradlew.bat

이 2개는 Gradle의 명령이다. bat가 붙어있는 것이 Windows 용이고, bat가 붙지 않은 것이 macOS 및 Linux 용이다.

settings.gradle

프로젝트에 대한 설정 정보를 작성한 파일이다.

가장 중요한 것은 src 폴더이다. 이 안에 개발하는 프로그램에서 사용하는 파일이 모두 저장된다.

다음으로 중요한 것은 “build.gradle” 파일이다. 이것은 빌드 파일이고 해서 빌드 처리의 내용을 작성하는 파일이다. 이 파일은 Groovy 언어로 작성되어 있다.

src 폴더

그럼, 개발의 본체 부분이 되는 src"폴더를 열어 본다. 이 폴더에는 이미 여러 폴더와 파일이 준비되어 있다. 폴더의 구성을 정리하면 다음과 같이 되어 있다.

src
├── main
│   └── java
│       └── App.java
└── test
    └── java
        └── AppTest.java

src 폴더에는 main과 test라는 2개의 폴더가 포함된다. 이들은 각각 다음과 같은 역할을 한다.

main 폴더

이것이 만드는 프로그램 본체의 파일을 모아 두는 폴더이다. 이것을 열면에 java 폴더가 있다. 이는 Java 소스 코드를 넣어두기 위한 폴더이다. 이 안에 샘플로 App.java는 소스 코드 파일이 포함되어 있다.

test 폴더

이것은 단위 테스트 파일을 모아 두는 폴더이다. 역시 java 폴더가 있고 그 안에 AppTest.java 샘플 파일이 있다.

main와 test에도 그 중에 먼저 언어 이름의 폴더가 있고 거기에 그 언어로 작성된 소스 코드 파일이 배치되는 구조로 되어 있는 것을 알 수 있다. 이것이 Gradle 프로젝트의 기본 폴더 구조이다.

src의 내용은 Maven과 같다?

폴더 구성을 보고 어디 선가 본 적이 있는 사람도 있을 수도 있다.

사실은 src 폴더의 구성은 Apache Maven에 의한 프로젝트와 똑같다. Maven 프로젝트도 프로젝트 폴더에 src 폴더가 있고 그 안에 main과 test가 있고 …… 등등 똑같이 구성되어 있다.

이러한 빌드 도구는 아무래도 Maven에 의해 일반화되어 영향을 받았을 것이다. Maven은 좋든 나쁘든 Java 빌드 도구의 표준이 되었기에, Gradle도 Maven의 폴더 구조를 그대로 따르고 있는 것이다.

gradle init 명령과 type 종류

Gradle 프로젝트를 만든 gradle init 명령에 대해 설명한다.

이것은 “init"라는 작업을 수행하는 것이다. Gradle은 수행할 작업은 “테스크(task)“라고 한다. gradle 명령은 이 테스크을 지정하고 실행하는 것이다.

init 테스크은 폴더에 프로젝트 파일이나 폴더들을 생성하고 폴더를 초기화한다. 이전 페이지에서는 --type 옵션이 넣었다. 이 옵션에 의해 “어떤 종류의 프로그램 작성을 위한 프로젝트에 초기화 하는지"를 지정할 수 있다. 이 유형은 조금씩 증가하고 있어 2017년 10월 현재는 다음과 같이 준비되어 있다.

java-application

Java 애플리케이션 프로젝트 작성에 대한 타입이다. 기본적으로 App.java가 제공된다.

java-library

Java 라이브러리 프로젝트 생성을 위한 타입이다. 단순히 샘플로 제공되는 소스 코드 파일이 응용 프로그램의 메인 클래스가 되어 있지 않다는 정도의 차이이다. (그리고, build.gradle도 조금 다르다)

groovy-application

Groovy 애플리케이션 개발을 위한 프로젝트이다. Groovy 개발의 기본 타입이라고 해도 좋을 것이다.

groovy-library

Groovy 라이브러리 개발을 위한 프로젝트이다. 기본적으로 groovy-application과 같고, 샘플 코드가 다른 정도이다.

scala-library

이것은 Java 가상 머신에서 구동되는 언어 Scala의 개발 타입이다. Scala에서는 여전히 응용 프로그램의 타입은 준비되어 있지 않은 것 같다.

basic

기본 타입이다. 이것은 모든 타입의 기반이 되는 것으로 src 는 제공되지 않는다. 또한 빌드 파일도 구체적인 처리 등은 기술되지 않고, build.gradle과 settings.gradle만 생성된다. --type을 붙이지 않고, 단순히 gradle init만 실행하면 이 basic 타입이 지정된다.

pom

Maven의 pom.xml을 바탕으로 build.gradle 을 생성한다.

 

Java 프로그래머는 java-application, java-library만 알고 있으면 충분하다.

컴파일 및 실행

기본 조작 처리

여기서는 만든 프로젝트를 Gradle 명령으로 처리를 설명한다. 여기에서 컴파일, 실행, 패키지 같은 기본 조작 처리를 설명한다.

프로그램 컴파일

$ gradle compileJava

컴파일은 compileJava 라는 테스크로 제공한다. 이것은 Java 소스 코드를 컴파일하기 위한 것이다.

프로그램 실행

$ gradle run

java-application 타입의 프로젝트에는 run 테스크라는 것이 제공되고, 이를 실행하여 메인 클래스를 실행할 수 있다. 디폴트로 App.java가 실행된다.

프로그램 패키지

$ gradle jar

jar 테스크은 그 이름대로 프로그램을 Jar 파일에 모와서 저장한다. 이는 프로젝트에 생성되는 build 폴더의 libs 폴더에 저장된다.

프로젝트 클린

$ gradle clean

프로젝트를 빌드할 때에 build 폴더에 여러 파일이 저장된다. clean 작업은 이 파일들을 제거하고 빌드 이전 상태로 되돌린다.

빌드 및 실행

위에 처리 방법을 알았으니 실제로 명령을 실행해 보자. 명령 프롬프트 또는 터미널은 열어서 cd로 프로젝트 폴더에 이동한다. 그 상태에서 다음과 같이 실행한다.

$ gradle compileJava
$ gradle run
$ gradle jar

프로그램의 컴파일을 실행한다.

$ gradle compileJava

Download https://jcenter.bintray.com/com/google/guava/guava/22.0/guava-22.0.pom
Download https://jcenter.bintray.com/com/google/guava/guava-parent/22.0/guava-parent-22.0.pom
... 중략....
Download https://jcenter.bintray.com/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14.jar
Download https://jcenter.bintray.com/com/google/guava/guava/22.0/guava-22.0.jar

BUILD SUCCESSFUL in 13s
1 actionable task: 1 executed

프로젝트를 실행한다.

$ gradle run

> Task :run
Hello world.


BUILD SUCCESSFUL in 0s
2 actionable tasks: 1 executed, 1 up-to-date

프로젝트의 jar 파일을 생성한다.

$ gradle jar

BUILD SUCCESSFUL in 0s
2 actionable tasks: 1 executed, 1 up-to-date

프로젝트 실행 시에 “Hello World.“라는 메시지가 출력된다. 또한 build 폴더의 libs 폴더에는 GradleApp.jar이라는 Jar 파일이 생성된 것을 확인할 수 있다.

그러나 java -jar GradleApp.jar으로 이 Jar 파일을 실행할 수 없다. 왜냐하면 매니페스트 파일이 포함되어 있지 않아 실행 가능한 Jar 파일로 아니기 때문이다.

jara -classpath GradleApp.jar App와 같은 방식으로 -classpath를 지정하여, 명시적으로 App 클래스를 실행하면 제대로 실행할 수 있다. 조금은 귀찮지만, 일단은 동작하는 것만 확인한다.




최종 수정 : 2017-12-22