Gradle build.gradle 빌드 파일
Gradle에는 build.gradle
라는 파일에 빌드에 대한 처리를 작성한다. 이 빌드 파일의 기본에 대해 설명한다.
build.gradle 내용 및 플러그인
이전에 Gradle으로 “테스크"라는 것을 지정하고 다양한 작업을 수행했었다. 이러한 Gradle 명령으로 수행하는 처리는 “빌드 파일"라는 파일에 작성된 내용을 바탕으로 실행된다.
build.gradle 내용
그럼, 빌드 파일에 어떤 처리가 적혀있는 것이다. build.gradle
파일의 내용은 아래와 같다.
/*
* This build file was generated by the Gradle 'init' task.
*
* 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 https://docs.gradle.org/4.1/userguide/tutorial_java_projects.html
*/
// Apply the java plugin to add support for Java
apply plugin: 'java'
// Apply the application plugin to add support for building an application
apply plugin: 'application'
// In this section you declare where to find the dependencies of your project
repositories {
// Use jcenter for resolving your dependencies.
// You can declare any Maven/Ivy/file repository here.
jcenter()
}
dependencies {
// This dependency is found on compile classpath of this component and consumers.
compile 'com.google.guava:guava:22.0'
// Use JUnit test framework
testCompile 'junit:junit:4.12'
}
// Define the main class for the application
mainClassName = 'App'
이 파일 내용을 보면서 빌드 파일의 내용을 확인한다.
build.gradle는 Groovy로 작성되어 있다. Groovy는 Java와 마찬가지로, //
와 / * */
으로 주석을 입력할 수 있다. 주석을 제거하면 그다지 어려울 것 같은 처리는 없어 보인다.
java 플러그인 추가
apply plugin: 'java'
처음에 apply plugin:
라는 것은 Gradle 플러그인을 사용하기 위한 것이다.
java
는 Java 프로그램을 위한 기능을 제공하는 플러그인이다. 앞전에 compileJava
이라는 테스크를 사용했는데, 이것은 사실 java 플러그인에서 제공하는 것이다.
application 플러그인 추가
apply plugin: 'application'
또 다른 플러그인이 추가되어 있다. 이 application
은 응용 프로그램에 대한 기능을 제공하는 플러그인이다. 앞에서 run
응용 프로그램을 실행했는데, 이것이 application 플러그인에 의해 제공되는 테스크이다.
메인 클래스 이름
mainClassName = 'App'
도중에 조금 넘어와서 마지막에 있는 mainClassName
값을 보자. 이것은 application 플러그인으로 사용되는 것으로, 메인 클래스를 지정한다. run으로 응용 프로그램을 실행할 수 있었던 것도 이 mainClassName 메인 클래스가 지정되어 있었기 때문이다.
java plugin
프로젝트에서 java plugin을 사용하려면 build.gradle 파일에 다음과 같이 설정하면 된다.
apply plugin: 'java'
기본 프로젝트 레이아웃
디렉터리(Directory) | 설명 |
---|---|
src/main/java |
자바 소스 코드를 관리하는 디렉터리. |
src/main/resources |
리소스을 관리하는 디렉터리. |
src/test/java |
테스트 자바 소스를 관리하기 위한 디렉터리. |
src/test/resources |
테스트 리소스를 관리하기 위한 디렉터리. |
src/sourceSet/java |
자바 소스를 위한 특정한 source set |
src/sourceSet/resources |
자바 리소스를 위한 특정한 source set |
여기서 배포 시 테스트 소스 코드가 같이 배포되지 않는다.
저장소 (repositories)
build.gradle에 기술된 내용에는 “의존 라이브러리"에 대한 기술이 있었다. Gradle에는 프로그램으로 필요한 라이브러리를 자동으로 다운로드하고 통합하는 기능이 있다. 따라서 중요해지는 것은 “저장소(repository)“이다.
저장소라는 것은 각종 프로그램들이 저장되는 위치이다. 이 저장소는 “어떤 저장소를 사용하는지"를 빌드 파일에 작성하여 설정할 수 있다.
repositories {
...... 저장소 설정 ......
}
위 내용이 저장소를 지정하기 위한 것이다. 이 {}
안에 저장소를 설정하는 문장을 작성한다.
온라인으로 접속하여 사용할 수 있는 저장소로는 Gradle은 대체로 다음 2개의 저장소 서비스를 이용한다.
Maven 중앙 저장소
mavenCentral()
이것은 Apache Maven 중앙 저장소를 이용하기 위한 것이다. Gradle은 중앙 저장소를 그대로 사용할 수 있다.
JCenter 저장소
jcenter()
이 밖에 JCenter라는 저장소도 사용할 수 있다. 이것은 Maven과 Gradle 등 각종 빌드 도구에서 사용할 수 있는 공개 저장소이다. 이를 이용하려면 jcenter()
을 repositories에 작성하면 된다.
mavenCentral()
와 jcenter()
는 Gradle 메소드이다. 이러한 repositories 안에서 호출하여 지정된 저장소를 사용할 수 있다.
의존 라이브러리 (dependencies)
저장소에서 필요한 라이브러리를 사용하는데 사용할 수 있는 것이 dependencies라는 문이다. 이것은 다음과 같이 기술된다.
dependencies {
...... 라이브러리 지정 ......
}
이 {}
안에 의존 라이브러리들을 작성한다. 여기에서는 2개의 문장이 작성되어 있다.
컴파일시 의존 라이브러리
compile 'com.google.guava:guava:22.0'
이것은 컴파일시에 사용하는 라이브러리를 지정하고 있다. compile ~
이라고 기술하는 것으로 그 라이브러리가 컴파일 시에 참조되는 것을 나타낸다.
테스트 컴파일시 의존 라이브러리
testCompile 'junit:junit:4.12'
이것은 테스트 컴파일 (단위 테스트의 프로그램을 컴파일)에 사용하는 라이브러리를 지정한다. testCompile ~
라고 기술하는 것으로 그 라이브러리가 테스트 컴파일 시에 참조되는 것을 나타낸다.
이 외에도 다양한 처리를 수행할 때 참조하는 종속 라이브러리를 지정할 수 있다. 하나 기억해야 할 것은 클래스 패스의 지정이다.
classpath '... 라이브러리 ...'
이렇게 하면 지정된 라이브러리를 클래스 경로에 추가할 수 있다. 컴파일에서 실행시까지 의존하는 라이브러리 지정에 사용한다. 이것도 같이 기억해두면 좋을 것이다.
라이브러리 지정
여기에서는 2개의 라이브러리를 사용하고 있지만, 이것들은 각각 다음과 같이 값을 지정한다.
'com.google.guava:guava:22.0'
'junit:junit:4.12'
이러한 작성법을 정리하면 대략 다음과 같이 된다.
'그룹 : 이름 : 버전'
그룹은 그 라이브러리가 속해 있는 기업 및 단체 등을 나타낸다. 예를 들어 기업에서 만드는 것은 그 기업 그룹을 정해지고, 그것이 지정된다. 이름은 라이브러리의 이름이다.
이상을 바탕으로 하여 여기에서 사용하는 라이브러리가 무엇인지 살펴 보도록 한다.
'com.google.guava:guava:22.0'
그룹 : com.google.guava
이름 : guava
버전 : 22.0
'junit:junit:4.12'
그룹 : junit
이름 : junit
버전 : 4.12
이런 식으로 된다. 이것으로 어떤 라이브러리가 사용되고 있는지 잘 알게 되었다.
개별적으로 지정하는 방법
이와 같이 하나의 텍스트에 라이브러리 정보를 정리한 작성법은 간단하지만, 보기 어려운 것 같은 느낌도 든다. Gradle에는 이 밖에 그룹, 이름, 버전을 각각 분리하여 작성하는 방법도 가능하다.
group:'그룹', name:'이름', version:'버전'
이런 식으로 작성한다. 예를 들어, 샘플로 준비되어 있는 라이브러리의 지정하려면 다음과 같다.
compile 'com.google.guava:guava:22.0'
↓
compile group:'com.google.guava', name:'guava', version:'22.0'
testCompile 'junit:junit:4.12'
↓
testCompile group:'junit', name:'junit', version:'4.12'
이렇게 작성하는 것이 하나 하나의 값이 명확하게 알아 볼 수 있다. 하나의 텍스트로 정리하는 작성법은 쓰고 틀렸을 때 실수가 찾기 어려운 것이다. 이런 작성 법이 확실하게 하기에는 좋다.