티스토리 뷰

Dev.

[Gradle] gradle wrapper basic

인쥭 2021. 7. 22. 18:10
반응형
 

The Gradle Wrapper

It is recommended to always execute a build with the Wrapper to ensure a reliable, controlled and standardized execution of the build. Using the Wrapper looks almost exactly like running the build with a Gradle installation. Depending on the operating syst

docs.gradle.org

 

Understanding the Gradle Wrapper

The vast majority of developers using Gradle use the Gradle Wrapper. This is great because using the Gradle Wrapper means that developers…

medium.com

  • wrapper가 포함된 gradle 프로젝트가 있다고 가정하자.
  • 새로운 터미널(이하 A) 열어 해당 gradle 프로젝트로 이동한 후 gradle/wrapper/gradle-wrapper.properties를 확인하면,
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
  • 의 형태와 같다. 없으면 gradle wrapper를 실행하자.
  • gradle wrapper는 실행시 distributionUrl에 명시된 버전이 있으면 사용하고, 없으면 다운로드 받는다.
  • 실행 가능한 바이너리 형태로 다운로드 받고, gradle wrapper는 이를 실행한다. 때문에, 설치 과정이 없는 것처럼 보인다.
  • 바이너리를 다운로드 받는 위치는 distributionBase+distributionPath라고 하고, 이 때 GRADLE_USER_HOME은 기본적으로 ~/.gradle이라고 함.
    • 근데 GRADLE_USER_HOME이 환경 변수는 아닌 것 같다. 어디에 있는지를 못찾았음.
  • 새로운 터미널(이하 B)을 열고 내 gradle 버전을 확인한 후, 다운로드 위치인 ~/.gradle/wrapper/dists로 가보자.
[~] gradle -version | grep Gradle
Gradle 7.1.1
[~] cd .gradle/wrapper/dists
[dists] ls
[dists]
  • 현재 내 gradle은 7.1.1버전이며, 이는 distributionUrl에 명시된 버전인 6.8.2와 다르다.
    또한, ~/.gradle/wrapper/dists에도 아무 것도 없다.
  • A에서 ./gradlew -version을 2번 실행해보자.
[gradle_test] ./gradlew -version              
Downloading https://services.gradle.org/distributions/gradle-6.8.2-bin.zip
..........10%..........20%..........30%...........40%..........50%..........60%..........70%...........80%..........90%..........100%

------------------------------------------------------------
Gradle 6.8.2
------------------------------------------------------------

Build time:   2021-02-05 12:53:00 UTC
Revision:     b9bd4a5c6026ac52f690eaf2829ee26563cad426

Kotlin:       1.4.20
Groovy:       2.5.12
Ant:          Apache Ant(TM) version 1.10.9 compiled on September 27 2020
JVM:          14.0.1 (Oracle Corporation 14.0.1+7)
OS:           Mac OS X 10.16 x86_64

[gradle_test] ./gradlew -version

------------------------------------------------------------
Gradle 6.8.2
------------------------------------------------------------

Build time:   2021-02-05 12:53:00 UTC
Revision:     b9bd4a5c6026ac52f690eaf2829ee26563cad426

Kotlin:       1.4.20
Groovy:       2.5.12
Ant:          Apache Ant(TM) version 1.10.9 compiled on September 27 2020
JVM:          14.0.1 (Oracle Corporation 14.0.1+7)
OS:           Mac OS X 10.16 x86_64

[gradle_test]
  • 첫 실행시에는 distributionUrl을 통해 다운로드 받는 과정이 포함된다.
  • 반면, 두번째 실행시에는 다운로드 과정이 생략된다. B에서 ls를 통해 다운로드 여부를 확인하자.
[dists] ls
gradle-6.8.2-bin
[dists] cd gradle-6.8.2-bin
[gradle-6.8.2-bin] ls
5nlkemqlnno2amj7d1mfn69bt
[gradle-6.8.2-bin] cd 5nlkemqlnno2amj7d1mfn69bt
[5nlkemqlnno2amj7d1mfn69bt] ls
gradle-6.8.2             gradle-6.8.2-bin.zip.lck
gradle-6.8.2-bin.zip     gradle-6.8.2-bin.zip.ok
[5nlkemqlnno2amj7d1mfn69bt] cd gradle-6.8.2
[gradle-6.8.2] ls
LICENSE NOTICE  README  bin     init.d  lib
[gradle-6.8.2] cd bin
[bin] ls
gradle     gradle.bat
[bin]
  • 6.8.2 gradle이 다운로드 되었으므로, bin 디렉토리에는 gradle 바이너리가 존재한다. 다음과 같이 실행해보자.
[bin] gradle -version | grep Gradle
Gradle 7.1.1
[bin] ./gradle -version | grep Gradle
Gradle 6.8.2
[bin]
  • 첫 번째 실행은 내가 설치한 gradle을 실행한 결과이다.
  • 두 번째 실행은 wrapper 동작 과정에서 다운로드 받은 바이너리를 통해 실행한 결과이다.

 

  • gradle은 여러 개발자의 협업시 빌드 환경을 동일하게 맞춰주는 장점이 있다.
  • 위의 예시를 예로 들면, 내 gradle 버전은 7.1.1이지만 실제 프로젝트에서는 6.8.2를 사용하는 경우가 된다.
  • 이 경우 gradlew를 통해 clean, build 등을 사용하면 협업시 동일한 빌드 환경을 가져갈 수 있다.
  • 극단적으로, gradle을 설치하지 않은 개발자더라도 java만 있다면 gradle wrapper를 통한 빌드가 가능할 것. 확인은 안해봤다.
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함