평소에 잘 작업하고 있던 프로젝트에서 브랜치를 변경한 뒤에 서버를 실행했더니 아래와 같은 에러가 발생했습니다. Git에서 동일한 프로젝트에 대한 브랜치로 변경(checkout)한 뒤에 컴파일 하려고 하니 Compilation Failure가 떴습니다.
처음에는 서버가 올라갈 때 일부 class파일을 못 찾는다는 오류가 떠서 프로젝트를 전체 rebuild를 했지만 동일한 에러가 발생했습니다. Maven Clean을 하고 다시 Compile을 해도 동일한 에러가 발생합니다.
IntelliJ 로그파일을 확인하니 아래와 같은 로그가 찍혀있었습니다.
2021-11-18 10:21:30,759 [578897244] ERROR - aemon.impl.PassExecutorService - com/intellij/aop/psi/AopPointcutExpressionFile
java.lang.NoClassDefFoundError: com/intellij/aop/psi/AopPointcutExpressionFile
at com.intellij.spring.model.xml.aop.PointcutExpressionConverter.fromString(PointcutExpressionConverter.java:32)
at com.intellij.spring.model.xml.aop.PointcutExpressionConverter.fromString(PointcutExpressionConverter.java:22)
at com.intellij.util.xml.impl.GetInvocation.getValueInner(GetInvocation.java:99)
at com.intellij.util.xml.impl.GetInvocation.getOrCalcValue(GetInvocation.java:74)
at com.intellij.util.xml.impl.GetInvocation.invoke(GetInvocation.java:62)
at com.intellij.util.xml.impl.DomInvocationHandler.invoke(DomInvocationHandler.java:660)
at com.intellij.util.xml.GenericAttributeValue$$EnhancerByJetBrainsMainCglib$$f4a47684.getValue(<generated>)
at com.intellij.spring.aop.model.xml.impl.AdvisorImpl.getPointcutExpression(AdvisorImpl.java:33)
at com.intellij.spring.aop.model.xml.impl.AdvisorImpl.accepts(AdvisorImpl.java:50)
at com.intellij.aop.jam.AopJavaAnnotator.isAdviceAcceptingMethod(AopJavaAnnotator.java:418)
at com.intellij.aop.jam.AopJavaAnnotator.addBoundAdvices(AopJavaAnnotator.java:319)
at com.intellij.aop.jam.AopJavaAnnotator.annotate(AopJavaAnnotator.java:108)
at com.intellij.aop.jam.AopJavaAnnotator.collectSlowLineMarkers(AopJavaAnnotator.java:76)
at com.intellij.codeInsight.daemon.impl.LineMarkersPass.queryProviders(LineMarkersPass.java:185)
at com.intellij.codeInsight.daemon.impl.LineMarkersPass.lambda$doCollectInformation$3(LineMarkersPass.java:90)
at com.intellij.codeInsight.daemon.impl.Divider.divideInsideAndOutsideInOneRoot(Divider.java:81)
at com.intellij.codeInsight.daemon.impl.LineMarkersPass.doCollectInformation(LineMarkersPass.java:77)
at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:56)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$1(PassExecutorService.java:399)
at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1078)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$2(PassExecutorService.java:392)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:705)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:647)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:63)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.doRun(PassExecutorService.java:391)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$run$0(PassExecutorService.java:367)
at com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:174)
at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:183)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:365)
at com.intellij.concurrency.JobLauncherImpl$VoidForkJoinTask$1.exec(JobLauncherImpl.java:188)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
구글링해보니 비슷한 이슈(이동)가 있어서 IntelliJ 버전을 업데이트하고 AOP Plugin이 활성화되어 있는지 확인했지만 모두 정상이었습니다. 잠시 둘러보니 아무래도 AOP Plugin 오류는 아닌 것 같았습니다. 최후의 보루로 IntelliJ의 전체 색인을 제거하고 재색인을 시도해봤습니다.
IntelliJ 에서 색인을 지우고 재색인을 하려면 일단, 상단 메뉴에서 File > Invalidate Caches를 선택합니다.
아래와 같은 창이 나오면 위 3개의 Clear항목을 선택하고 Invalidate and Restart 버튼을 클릭하여 색인을 지우고 IntelliJ를 재시작합니다.
IntelliJ를 다시 시작하면 아래와 같이 프로젝트에 대한 색인이 다시 만들어집니다.
색인이 다시 이루어진 뒤에 빌드하니 아래와 같이 에러 없이 정상적으로 빌드가 성공했습니다.
IntelliJ에서 Git을 이용한 Branch를 변경하는 경우에 기존에 있던 색인과 일종의 내부적인 불일치가 발생해서 오류가 나타나는 것 같습니다. 이클립스에서도 내부적인 색인 때문에 이런 오류가 발생하는지는 잘 모르겠네요. 하지만 구글링해보면 동일한 Compilation Failure 라고 하더라도 여러가지 원인이 있을 수 있으니 로그를 잘 읽어보고 상황에 맞게 적용하는게 맞을 것 같습니다.