Lombok의 @ Slf4j 및 Intellij로 빌드 : 기호 로그를 찾을 수 없습니다.
명령 줄에서 문제없이 빌드되는 maven 프로젝트가 있습니다. 그러나 IntelliJ로 빌드하면 오류가 발생합니다.
java: FileName.java:89: cannot find symbol
symbol : variable log
Java 파일에 정의되거나 가져온 로그가 없지만
@Slf4j
final public class FileName {
로그 클래스를 정의해야하는 클래스 본문 앞의 문.
프로젝트 구조 창에서 다음에 대한 클래스 :
Maven: org.slf4j:jcl-over-slf4j:1.6.1
Maven: org.slf4j:slf4j-api:1.6.6
Maven: org.slf4j:slf4j-log4j12:1.6.6
Maven: org.slf4j:slf4j-simple:1.6.6
라이브러리 아래에 나열되며 다운로드 및 사용 가능으로 표시됩니다.
이것이 IntelliJ가 아닌 명령 줄을 통해 maven으로 빌드되는 이유와 문제를 해결하는 방법을 아십니까?
Lombok 플러그인을 설치하는 것 외에도 다음 에서 " Enable annotation processing
"확인란이 선택되어 있는지 확인하십시오 .
Preferences > Compiler > Annotation Processors
참고 : IntelliJ 2017부터 " Enable Annotation Processing
"확인란이 다음으로 이동되었습니다.
Settings > Build, Execution, Deployment > Compiler > Annotation Processors
아마도 그것은 당신이 사용 하고있는 Lombok @ Slf4j 주석 일 것입니다. IntelliJ가 Lombok 주석을 인식하도록하려면 IntelliJ에 Lombok 플러그인을 설치해야합니다. 그렇지 않으면 존재하지 않는 필드를 사용하려고하면 무엇을 기대합니까?
Intellij 버전 2016, 2017에서 Preferences-> Compiler-> Annotation Processors가 작동하지 않습니다!
죽은 주제를 풀고있을 수 있지만 간단한 해결책은 logback-core 및 logback-classic을 포함하는 경우 종속성 (예 : Maven의 pom)을 확인하는 것 입니다.
Slf4j 는 인터페이스 일 뿐이며 작동하려면 구체적인 구현이 필요합니다.
나는 IDEA가 엉망으로 두 번 속아 봤습니다 . 이제 갈 수 있습니다 : D
IDEA 13에서는 더 이상 문제가되지 않는 것 같습니다. Lombok 플러그인을 설치하기 만하면됩니다.
방금 최신 아이디어 버전 2108.1을 설치했고 lombok 플러그인을 설치 한 후이 문제를 발견하고 Idea를 다시 시작하여 해결했습니다.
2019 :
플러그인을 받으면 정렬됩니다 ...
파일> 설정> 플러그인
이것은 나를 위해 일했습니다. File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor
'주석 처리 활성화'를 선택하십시오. Apply
닫기
JDK8에서 컴파일 할 때 이전 버전의 Lombok에서이 문제가 발생했습니다. 프로젝트를 JDK7로 다시 설정하면 문제가 해결되었습니다.
이것은 OP의 문제가 아니지만 성공하지 못한 모든 것을 시도하는 다른 사람에게는 다음 과 같습니다.
I had similar symptoms. Whenever I built after a mvn clean
, it wouldn't find log
, or getXYZ()
, or builder()
, or anything.
[ERROR] symbol: variable log
[ERROR] location: class com.example.MyClass
[ERROR] /Path/To/Some/Java/src/main/com/example/MyClass.java:[30,38] cannot find symbol
[ERROR] symbol: method builder()
[ERROR] location: class com.example.MyClass
After reading every answer I could find about QueryDSL/JPA/Hibernate/Lombok/IntelliJ/Maven issues to no avail, I worked out that the culprit was a single static import of a @Getter
method that was annotated on a static field.
Spring 1.15.14.RELEASE, Intellij 2019.1.1
@SpringBootApplication
public class BarApplication implements ApplicationContextAware {
@Getter
private static ApplicationContext applicationContext;
// ... start Spring application, and grab hold of ApplicationContext as it comes past
}
import ...
import static BarApplication.getApplicationContext;
@Slf4j
public class IMakeItAllFail {
public IMakeItAllFail() {
log.info("{}", getApplicationContext());
}
}
@Slf4j
public class Foo {
Foo() {
log.info("I fail to compile but I have nothing to do with the other classes!");
}
}
Worked for me!!! It was failing on CircleCI & on Jenkins as well.
If you're a Gradle User try add the following into your dependencies:
dependencies {
//Other Dependencies >>
//LOMBOK Dependencies
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
testCompile 'org.projectlombok:lombok'
testImplementation 'org.projectlombok:lombok'
}
After enabling annotation processors and installing the lombok plugin, it still didn't work. We worked around it by checking the Idea option "Delegate IDE build to gradle"
나를 위해 정리 한 것은 Maven 설정에서 "Use plugin registry"확인란을 선택하는 것이 었습니다.
경로는 File-> Preferences-> Build, Execution, Deployment-> Build Tools-> Maven입니다.
나는 언급 된 거의 모든 답변을 시도했지만 아무것도 효과가 없었습니다. 내 gradle 빌드가 매번 실패했습니다. 이 솔루션을 찾았습니다.
annotationProcessor 'org.projectlombok:lombok'
build.gradle을 추가 하십시오.
이것은 나를 위해 일했습니다.
클래스에서 @ Slf4J 주석을 제거한 다음 다시 추가하면 저에게 효과적이었습니다.
'Program Tip' 카테고리의 다른 글
다운로드 할 phpexcel (0) | 2020.10.13 |
---|---|
단일 열의 값을 배열로 가져 오는 방법 (0) | 2020.10.13 |
디렉토리에서 모든 .gz 압축을 풀고 삭제합니다.-Linux (0) | 2020.10.13 |
Django-Admin : CharField as TextArea (0) | 2020.10.13 |
Statement.RETURN_GENERATED_KEYS가있는 PreparedStatement (0) | 2020.10.13 |