Gradle

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

Gradle은 컴파일, 검증, 의존성 해결, 테스트 실행, 소스 코드 생성, 패키징 및 게시 등 빌드 프로세스의 모든 단계를 지원하는 오픈 소스 빌드 자동화 시스템이다. 아파치 Groovy의 "G"를 따서 이름이 붙여졌으며, 관례 우선 방식을 통해 짧은 설정 파일로 빌드 단계를 설명할 수 있다. 플러그인을 사용하여 설정 및 태스크를 통합할 수 있으며, 안드로이드 스튜디오와 같은 제품에 번들로 포함되어 배포된다. Gradle은 Ant와 통합되어 Ant 빌드 파일을 스크립트로 사용할 수 있다.

Gradle - [IT 관련 정보]에 관한 문서
기본 정보
이름Gradle
종류빌드 자동화 도구
라이선스아파치 라이선스 2.0
웹사이트Gradle 공식 웹사이트
개발
개발자Hans Dockter, Adam Murdoch, Szczepan Faber, Peter Niederwieser, Luke Daley, Rene Gröschke, Daz DeBoer, Steve Appling
최초 릴리스2007년
안정화 버전8.6
안정화 버전 출시일2024년 2월 2일
프로그래밍 언어Java, Groovy, Kotlin
📚 더 읽어볼만한 페이지
  • 자바 개발 도구 - GNU 컴파일러 모음
    GNU 컴파일러 모음(GCC)은 리처드 스톨먼이 1987년 처음 출시한 자유 소프트웨어 컴파일러 시스템으로, C, C++, Fortran, Ada, Go 등 다양한 프로그래밍 언어를 지원하며 여러 명령어 집합 아키텍처와 플랫폼에서 널리 사용된다.
  • 자바 개발 도구 - J 샤프
    J#은 마이크로소프트에서 개발한 .NET Framework 기반의 프로그래밍 언어로, 자바와 유사한 문법을 가지며 기존 자바 코드의 .NET 플랫폼 이전 및 .NET 언어와의 상호 운용성을 지원했으나 현재는 개발이 중단되었다.
  • 컴파일 도구 - Libtool
    Libtool은 다양한 유닉스 계열 운영 체제에서 정적 및 동적 라이브러리 생성을 관리하고, 운영 체제별 차이로 인한 소프트웨어 이식 문제를 해결하기 위해 GNU 빌드 시스템에서 사용되는 도구이다.
  • 컴파일 도구 - GNU 빌드 시스템
    GNU 빌드 시스템은 Autoconf, Automake, Libtool 등의 오토툴과 GNU make 등으로 구성되어 다양한 UNIX 시스템에서 소프트웨어 빌드 및 설치를 지원하지만, 복잡성과 이식성에 대한 비판도 존재한다.
  • 빌드 자동화 - GNU 빌드 시스템
    GNU 빌드 시스템은 Autoconf, Automake, Libtool 등의 오토툴과 GNU make 등으로 구성되어 다양한 UNIX 시스템에서 소프트웨어 빌드 및 설치를 지원하지만, 복잡성과 이식성에 대한 비판도 존재한다.
  • 빌드 자동화 - MSBuild
    MSBuild는 마이크로소프트에서 개발한 빌드 자동화 도구로서, 프로젝트 파일에 기술된 대상을 실행하여 빌드 과정을 자동화하며, Team Foundation 빌드와 연동하여 팀 빌드 환경을 구성하는 데 사용된다.

2. 역사

Gradle은 2008년에 처음 출시되었으며, 2012년에 1.0 버전이 나왔다. 이후 지속적으로 발전하여 2023년에는 8.0 버전까지 출시되었다.

2.1. 이름의 유래

창립자이자 CEO인 한스 독터(Hans Dockter)는 원래 프로젝트 이름을 "Cradle"로 하려 했다고 말했다. 하지만 이름을 더 독창적이고 덜 "축소적인" 느낌으로 만들기 위해, Groovy의 "G"를 따서 "Gradle"이라는 이름을 선택했다.

2.2. 주요 버전

👆
좌우로 밀어서 보기
주요 버전
버전날짜
0.12008년 4월 21일
1.02012년 6월 12일
2.02014년 7월 1일
3.02016년 8월 15일
4.02017년 6월 14일
5.02018년 11월 26일
6.02019년 11월 8일
7.02021년 4월 9일
8.02023년 2월 13일

3. 특징

Gradle은 컴파일, 검증, 의존성 해결, 테스트 실행, 소스 코드 생성, 패키징 및 게시를 포함한 빌드 프로세스의 모든 단계를 지원한다.

Gradle은 관례 우선 접근 방식을 따르기 때문에 이러한 모든 빌드 단계를 짧은 설정 파일로 설명할 수 있다. 관례에는 프로젝트의 폴더 구조, 표준 태스크 및 해당 순서, 의존성 저장소가 포함된다. 그러나 필요한 경우 프로젝트 설정으로 모든 관례를 재정의할 수 있다.

플러그인은 Gradle의 핵심 구성 요소이다. 플러그인을 사용하면 일련의 설정 및 태스크를 프로젝트에 통합할 수 있으며 중앙 플러그인 저장소 또는 단일 프로젝트용으로 사용자 지정 개발된 플러그인을 포함할 수 있다.

4. 배포

안드로이드 스튜디오와 같은 제품에는 Gradle이 번들로 포함되어 제공되지만, 별도로 다운로드받을 수도 있다. Gradle 래퍼는 Gradle을 호출하는 권장 방법이다. 필요한 경우 선언된 버전의 Gradle을 미리 다운로드할 수 있다.

5. 자바 프로젝트 예제

메이븐의 디렉터리 구조는 자바 소스와 리소스에 사용된다고 가정한다. 이 디렉터리들은 src/main/java, src/main/resources, src/test/java, src/test/resources이다.

build.gradle 파일의 내용은 다음과 같다.


apply plugin: 'java'


gradle build를 실행하면 다음과 같이 출력된다.


> gradle build
:compileJava
:processResources
:classes
:jar
:assemble
:compileTestJava
:processTestResources
:testClasses
:test
:check
:build

BUILD SUCCESSFUL


Gradle은 컴파일, 검증, 의존성 해결, 테스트 실행, 소스 코드 생성, 패키징 및 게시를 포함한 빌드 프로세스의 모든 단계를 지원한다. Gradle은 관례 우선 접근 방식을 따르기 때문에 이러한 모든 빌드 단계를 짧은 설정 파일로 설명할 수 있다. 관례에는 프로젝트의 폴더 구조, 표준 태스크 및 해당 순서, 의존성 저장소가 포함된다. 그러나 필요한 경우 프로젝트 설정으로 모든 관례를 재정의할 수 있다.

Java 소스와 리소스에 Maven 디렉토리 구조가 사용되는 경우를 가정한다. Maven 디렉토리 구조는 각각 src/main/java, src/main/resources, src/test/java, src/test/resources이다.

build.gradle 파일의 내용은 다음과 같다.

```groovy
plugins {
java
}
```

gradlew build를 실행하면 다음과 같이 출력된다.

```console
> gradlew build
:compileJava
:processResources
:classes
:jar
:assemble
:compileTestJava
:processTestResources
:testClasses
:test
:check
:build

BUILD SUCCESSFUL
```

Java 플러그인은 모든 작업의 입출력 간의 종속 관계의 방향 비순환 그래프 내 작업으로 예상되는 Maven 라이프사이클을 다수 에뮬레이트한다. 이 간단한 경우 build 작업은 check 작업과 assemble 작업에 종속되어 있으며, 마찬가지로 check 작업은 test 작업에, assemble 작업은 jar 작업에 종속되어 있다.

Maven의 관례를 따르지 않는 프로젝트를 위해 Gradle은 디렉토리 구조를 설정할 수 있다. 다음은 소스 파일이 Maven의 관례인 src/main/java가 아닌 src/java에 포함된 프로젝트를 지원하기 위한 예이다.

build.gradle

```groovy
apply plugin: 'java'
sourceSets.main.java.srcDirs = ['src/java']

6. Ant 마이그레이션 예제

groovy
ant.importBuild 'build.xml'
```

Gradle영어은 Ant와 매우 긴밀하게 통합되어 있으며, 빌드 중에 Ant 빌드 파일을 직접 가져와 스크립트로 처리할 수 있다. 다음은 단순화된 Ant 대상을 Gradle영어 태스크에 통합한 예제이다.

build.xml
```xml





```

`gradle ant.target`를 실행하면 다음과 같은 결과를 얻을 수 있다.

```console
> gradle ant.target
:ant.target
[ant:echo] Running ant.target!

BUILD SUCCESSFUL