gradle 버전을 4.5.1에서 7.5.1로 업그레이드를 해보며 혹시 몰라 분노하며 정리를 해둔다.
나중에 또 버전업을 할 때에 중복되는 에러가 있으면 참고해야지.
그리고 다른 에러가 있으면 또 분노하며 정리해버려야지.

무작정 gradle-wrapper.properties를 7.5.1로 수정해본다

BEFORE

#Mon Mar 11 17:40:53 KST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.5.1-all.zip

AFTER

#Mon Mar 11 17:40:53 KST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip

Gretty 버전업

문제 상황

gradle 버전만 올리고 gradle sync를 해보니 에러가 발생한다. gretty 버전 호환 문제이다.

기존에 Gretty 버전을 2.3.1을 사용하고 있었는데, 버전이 호환이 되지 않아 Gretty 버전을 3.0.8으로 업그레이드 해주었다. 버전은 3점대만 넘으면 괜찮은 것 같다.

An exception occurred applying plugin request [id: 'org.gretty', version: '2.3.1']
> Failed to apply plugin 'org.gretty'.
   > Cannot run Project.afterEvaluate(Closure) when the project is already evaluated.

org.gradle.api.plugins.InvalidPluginException: An exception occurred applying plugin request [id: 'org.gretty', version: '2.3.1']

문법 수정하기

compile, runtime, testCompile

gradle 버전업을 하면서 compile, testCompile, runtime 등과 같은 문법들이 deprecated되었다. 따라서, 아래를 참고하여 문법을 수정한다.

Before After
compile implementation
testCompile testImplementation
runtime runtimeOnly

left shift (<<)

또, 문제 발생

Caused by: org.gradle.internal.metaobject.AbstractDynamicObject$CustomMessageMissingMethodException: Could not find method leftShift() for arguments [build_51cw4a4avxrmuakqg7nwsvxpe$_run_closure5@45838670] on task '비밀이지롱' of type org.gradle.api.DefaultTask.

gradle version 업 이후로는 left shift 문법을 사용할 수 없다. 해당 부분은 doLast 를 사용하여 대체한다.

BEFORE

task deploy(dependsOn : war) << {
}

AFTER

task deploy(dependsOn : war) {
  doLast {
    // ...
  }
}

tomcat 버전 지원 안함

이번엔 gretty 설정의 톰캣이 말썽이다.

Unsupported servlet container: tomcat8

다른 분의 프로젝트를 참고해서 tomcat85로 수정했다.

BEFORE

gretty {
  // ...
  servletContainer = 'tomcat8'
}

AFTER

gretty {
  // ...
  servletContainer = 'tomcat85'
}

jacoco 설정 중 문법 오류

Cannot set the value of read-only property 'classDirectories' for task

classDirectories 부분을 classDirectories.from 으로 변경

classDirectories = //....

classDirectories.from = // ...

api 사용

compile을 사용할 경우, 해당 모듈을 사용하는 다른 모듈에서 dependencies에 있는 라이브러리를 참조할 수 있었다. 하지만, implementation 으로 수정되면서 사용이 불가해졌다. 이러한 경우, plugin을 java 에서 java-library 로 변경하고, api 함수를 사용하면 해결할 수 있다.

QueryDSL 설정 수정

Lombok 오류

...java:60: error: cannot find symbol
            log.error("get hostName err", e);

lombok에서 에러가 발생한다. lombok은 compile시에만 필요하므로 compileOnly 를 사용한다. annotationProcessor 는 어느 시점에 사용되는 것인지 확인이 필요하다.

BEFORE

providedCompile 'org.projectlombok:lombok:' + versions.lombok

AFTER

compileOnly 'org.projectlombok:lombok:' + versions.lombok
annotationProcessor 'org.projectlombok:lombok:' + versions.lombok

 

과연 난 잘 수정했을까?

추가 수정 사항이 있다면 +로 작성해야지. 오늘 날짜는 9월 28일!

혹시나 더 수정해야할 사항들이 있다면 이 글을 보시는 분들은 댓글 달아주심 감사함다

 

 

반응형

'Spring' 카테고리의 다른 글

[Spring Boot] Jasypt으로 암호화 적용하기  (0) 2023.03.26
Spring Boot 프로젝트 생성하기  (0) 2022.07.15
복사했습니다!