디버깅 일기

[Gradle] Gradle 버전 변경(+Deprecated)

썬키 2023. 6. 21. 10:01
과제

 

회사에서 Gradle 5.0 버전을 사용하여 프로젝트를 build 해왔는데,

6.3 버전으로 업그레이드 해야 되는 상황이었다.

단순히 Gradle 버전을 변경하는 것은 쉽지만, 그에 그치지 않고 버전이 업그레이드 됨에 따라

Deprecate 된 사항들을 확인해서 build.gradle 파일을 변경 해야 했다.

 

How

 

프로젝트의 gradlew 파일이 위치한 경로를 복사

 

gradlew wrapper --gradle-version 6.3

 

명령 프롬프트를 실행하고, gradlew 파일이 위치한 경로로 이동한 다음

상기 명령어를 입력하면 gradle 버전이 업그레이드 되고,

gradle-wrapper.properties 파일이 자동으로 변경된다.

 

 

이런식으로 properties 파일을 확인해봐도 되고,

명령 프롬프트에서 아래의 명령어를 입력하여 변경된 gradle 버전을 확인할 수도 있다.

 

gradlew -v

 

 

gradle 버전이 잘 변경 된 것을 확인하였고, IDE에서 프로젝트를 다시 build하면 콘솔에

아래와 같은 경고 메세지가 출력되게 된다.

 

경고 메세지

 

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.3/userguide/command_line_interface.html#sec:command_line_warnings

 

위의 경고 메세지로 구글링 했을 때, 대부분의 글들은 그냥 경고 메세지가 출력되지 않게 기능을 꺼라?

라고 하는 주먹구구식의 해결방법을 말하고 있었다.

 

하지만, 회사에서는 이 경고 메세지를 단순한 경고 메세지로 보지 않고 추후에 문제가 될 수도 있으니

꼭 해결하라고 하였기에 해당 메세지를 심도있게 볼 필요가 있었다.

 

해결 방법

 

사실, 해결 방법은 경고 메세지에 나와 있었는데 1시간동안 뻘짓 아닌 뻘짓을 했다.

경고 메세지를 살펴보면 --warning-mode all이라는 명령어를 입력하면

변경한 버전에서의 deprecate된 사항을 알려주겠다고 하고 있다. 😂😂

 

gradlew build --warning-mode-all

 

명령 프롬프트에서 gradlew가 위치한 경로로 이동하여 상기 명령어를 입력하면

build 하는 과정중, 어떤 Task에서 Deprecate된 사항이 포함 되어 있는지 다음과 같이 친절히 알려준다.

 

 

나 같은 경우엔 build 중, war Task에서 deprecate 된 사항이 포함되어 있었고

해당 경고로 구글링 해본 결과, Gradle의 기본 중복 처리 전략이 7.0 버전에서는 Deprecate될 예정이므로

기본 중복 처리 전략에 대한 문제를 해결해라였다.

 

 

Upgrading your build from Gradle 5.x to 6.0

This chapter provides the information you need to migrate your Gradle 5.x builds to Gradle 6.0. For migrating from Gradle 4.x, complete the 4.x to 5.0 guide first. We recommend the following steps for all users: Try running gradle help --scan and view the

docs.gradle.org

 

Gradle의 기본 중복 처리 전략

 

DuplicatesStrategy.EXCLUDE는 Gradle이 중복을 처리하는 기본 전략이다.

이 전략은 중복된 파일 또는 경로를 제외하고 첫 번째로 발견된 파일 또는 경로만을 복사하거나 아카이브한다.

따라서, 중복된 파일이나 경로가 있는 경우, Gradle은 경고를 표시하고 중복을 제외하고 처리한다.

 

이러한 전략은 Gradle 7.0 부터는 제거될 예정이라, 명시적으로 중복된 파일 / 경로를 허용할수 있도록

DuplicatesStrategy.INCLUDE 설정해야 한다.

이렇게 설정하면 중복된 파일이나 경로도 포함하여 처리된다.

 

기존의 build.gradle

 

war {
	archiveName = "ROOT.war"
    ...
    ...
}

 

변경된 build.gradle

 

war {
	duplicatesStrategy = DuplicatesStrategy.INCLUDE
    archiveFileName = "ROOT.war"
    ...
    ...
}

 

war Task에서 걸렸으므로, war 블록안의 첫 번째 행에

duplicatesStrategy = DuplicatesStrategy.INCLUDE 를 추가하고

명령 프롬프트에서 gradlew build --warning-mode all을 실행해보면

경고 없이 잘 build 되는 것을 확인할 수 있다.

 

 

마치며

 

혹여나 나와 같은 과제를 당면한 사람들이 이 글을 보게 된다면,

변경 하고자 하는 버전에서 기본 중복 처리 전략 외에도 deprecate 된 사항들이 많이 있을수 있으니

--warning-mode all 명령어를 이용해서 잘 해결하길 바란다.