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 옵션으로 문제를 확인해보니 아래와 같은 에러였습니다.
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
문제 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'
'IT > 디버깅' 카테고리의 다른 글
[디버깅] SpringRunner.class 인식 오류 해결하기 (0) | 2023.03.16 |
---|---|
[디버깅] AWS CloudFront 사용 중 발생한 이슈 및 결과 정리 (0) | 2022.12.07 |
[디버깅] h2 콘솔에 테이블이 안보이는 원인 해결 (1) | 2022.09.26 |
[Spring] how to get selected option value by requestParam in spring thymeleaf (0) | 2022.09.02 |
Failed to load ApplicationContext 에러 해결 (22) | 2022.08.23 |