IT/디버깅

[Spring] 윈도우 터미널에서 gradlew test 에러 해결

happy_life 2022. 10. 31. 20:12

 

intellij가 아닌 윈도우 터미널에서 빌드를 해보려고 하였으나 아래와 같이

please set the JAVA_HOME variable in your environment to match the location of your Java installation 에러가 발생하였습니다. 이 포스팅에서는 이 문제를 해결하는 과정을 작성하려 합니다.

 

 

 

C:\Program Files\Java\jdk-11.0.13\bin 이었던 경로를 

C:\Program Files\Java\jdk-11.0.13    로 수정해 문제를 해결하였습니다.

 

하지만 여전히 

gradlew test를 빌드하면 에러가 발생합니다.

 

추가 에러 해결

문제 1 

--stacktrace 옵션으로 문제를 확인해보니 아래와 같은 에러였습니다.

stacktrace옵션

 

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':compileJava'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:188)
        at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:263)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:186)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:174)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)

 

 

해석해보면 

Caused by: org.gradle.api.internal.tasks.compile.CompilationFailedException: Compilation failed; see the compiler error output for details. <-- 이것이 오류의 핵심인 것같습니다.

 

 

구글링을 1시간 쯤 했을 무렵 아래의 블로그를 보고 lombok annotation dependency가 배포 빌드 때는 적용되지 않아 따로 코드를 추가해야한다고 하여 넣고 돌렸는데 에러의 원인이 바뀌고 일단 compile 버전 문제는 해결이 되었습니다.

https://aljjabaegi.tistory.com/m/649

 

gradle project 배포 시 compiler error 해결 방법

gradle project 배포 시 compiler error 해결 방법 gradle 프로젝트 배포 시 Gradle tasks에서 compile 에러가 발생하는 경우가 있습니다. 에러 코드 전체 에러 코드는 아래의 '더보기'를 클릭하세요! 더..

aljjabaegi.tistory.com

 

 

 

문제 2

 

Caused by:

org.gradle.api.GradleException: There were failing tests. See the report at: file:///C:/Users/kimta/Desktop/backend_java_spring/스프링%20부트와%20AWS로%20혼자%20구현하는%20웹_서 비스/build/reports/tests/test/index.html

 

 

./gradlew clean build -x test  <- 이 코드로 빌드하면 문제가 해결되긴 합니다. 찾아보니 이건 test를 안하는 거라서 문제를 해결한 것이 아닙니다.

 

이름을 영어로 수정해보기도 하였으나 문제가 해결되지 않았습니다.

 

 

 

문제 3

 

Caused by:

org.junit.platform.commons.PreconditionViolationException: Cannot create Launcher without at least one TestEngine; consider adding an engine implementation JAR to the classpath

 

문제 리포트를 보라고 해서 보았는데, 위와같은 에러라고 하여서 구글링을 하던 와중에  아래의 디펜던시를 추가하면 된다고 해서 해결되나 싶었지만 결국 해결하지 못했습니다.

testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.1'
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.7.1'

 

 

 

문제 4

 

Caused by:

 org.junit.platform.commons.JUnitException: TestEngine with ID 'junit-jupiter' failed to discover tests

와 같은 문제가 추가적으로 발생하였습니다.

구글링 해보다 보니 junit 5 관련 디펜던시인데 전 junit 4를 썼기때문에 에러가 발생한 것이 아닌가 추측이 되었습니다. 그래서 아래처럼 junit 4 관련 디펜던시를 넣어주었습니다. 하지만 문제의 이름이 바뀌었을 뿐, 완전히 해결되진 않았습니다.

implementation("junit:junit:4.12")
testImplementation("org.junit.vintage:junit-vintage-engine:5.2.0")

 

 

 

문제 5

java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test

 

구글링을 해보니 스프링부트 테스트 아래에 test가 있어야 한다는 원칙을 지키지 못해 발생한 에러라고 합니다. 따라서 아래와 같이 @SpringBootTest(class= Application.class) 라고 @SpringBootApplication아래에 있다는 어노테이션을 추가해 문제를 해결해주었습니다.

 

 

 

 

* 추가 기록 사항 

junit이 import 되지 않아 발생한 문제인 줄 알았는데, 이미 spring boot에는 starter-test에 junit이 내장되어있다고 피드백을 받았음. 따라서 이것이 문제는 아니었던 것으로 판단함 아래의 코드가 원인이었던 것으로 정리할 수 있다.

 

implementation 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'