Lombok의 @ Slf4j 및 Intellij로 빌드 : 기호 로그를 찾을 수 없습니다.


113

명령 줄에서 문제없이 빌드되는 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으로 빌드되는 이유와 문제를 해결하는 방법을 아십니까?


5
같은 문제가 발생하여 Lombok Plugin을 다시 설치하는 것이 도움이되었습니다.
Alex Shumilov

답변:


170

Lombok 플러그인을 설치하는 것 외에도 다음 에서 " Enable annotation processing"확인란이 선택되어 있는지 확인하십시오 .

Preferences > Compiler > Annotation Processors

참고 : IntelliJ 2017부터 " Enable Annotation Processing"확인란이 다음으로 이동했습니다.

Settings > Build, Execution, Deployment > Compiler > Annotation Processors

1
주석 처리가 활성화되어 있지 않고 작동합니다. 롬복 플러그인이 설치되어 있습니다.
벤 조지

플러그인을 설치했는데이 설정을 변경하지 않고 작동했습니다. 그러나 나는 그것을 좋은 측정으로 바꾸기로 결정했습니다.
sheldonkreger

6
IntelliJ 2017.2 및 Lombok 플러그인 0.14.16을 사용하여 "주석 처리 활성화"를 설정해야했으며 확인란은 환경 설정-> 빌드, 실행, 배포-> 컴파일러-> 주석 프로세서 아래에 있습니다.
Niemi

1
IntelliJ 2018.2, lombok 플러그인이 1.14를 설치했습니다. IntelliJ에서 주석 처리를 활성화해야했습니다. 파일-> 설정-> 빌드, 실행, 배포-> 컴파일러-> 주석 프로세서. IntelliJ는 실제로 저와 함께 포인트를 얻지 못합니다.
demaniak

32

아마도 그것은 당신이 사용 하고있는 Lombok @ Slf4j 주석 일 것입니다. IntelliJ가 Lombok 주석을 인식하도록하려면 IntelliJ에 Lombok 플러그인을 설치해야합니다. 그렇지 않으면 존재하지 않는 필드를 사용하려고하면 무엇을 기대합니까?


1
Lombok 플러그인이 설치되어 있습니다. 구성 옵션 측면에서 그다지 많지 않은 것 같습니다. 플러그인의 버그일까요?
user1991839

1
저는 IDEA 11과 12에서 성공적으로 사용했습니다. 가끔 롬복에 대해 "잊혀진"것 같고 소스 코드에 여러 개의 빨간색 선이 표시되지만 여전히 저를 위해 빌드됩니다. 하지만오고 가기 때문에 플러그인은 확실히 버그가 없습니다.
Ryan Stewart

이 문제를 해결할 수있는 해결 방법이 있는지 알고 있습니까? 플러그인을 거치지 않고 IntelliJ에 Lombok 라이브러리를 알리는 것처럼? 내가 테스트를 디버깅 인 IntelliJ를 사용하려고 해요 나를 그것을 위해 그것을 사용하는이 어려운하고있다
user1991839

죄송합니다. 도와 드릴 수 없습니다. 나는 아직 롬복을 많이 사용하지 않았습니다. 나는 몇 군데에서 그것을 시도했다. 플러그인의 프로젝트 페이지 를 확인했지만 아직 그 주변에 큰 커뮤니티가 없다고 느낍니다.
Ryan Stewart

24

Intellij 버전 2016, 2017에서 Preferences-> Compiler-> Annotation Processors가 작동하지 않습니다!

다음 추가 확인란이 도움이됩니다. 여기에 이미지 설명 입력


1
플러그인을 추가하고 Annotation Processors를 활성화했지만 아직 운이 없습니다. 위의 확인란에 액세스하는 방법을 제공 할 수 있습니까?
Philip John

@PhilipJohn : 기본 설정 검색 상자에 "Lombok"을 입력 하시겠습니까?
Tim Long

실제로 우리는 또한 "org.slf4j"의존성을 추가 할 필요가
Vasyl Sarzhynskyi


10

죽은 주제를 풀고있을 수 있지만 간단한 해결책은 logback-corelogback-classic을 포함하는 경우 종속성 (예 : Maven의 pom)을 확인하는 것 입니다.

Slf4j 는 인터페이스 일 뿐이며 작동하려면 구체적인 구현이 필요합니다.

나는 IDEA가 그것을 엉망 으로 만들고 두 번 속았다 .


7

나를 위해 일했습니다 !!! CircleCI 및 Jenkins에서도 실패했습니다.

Gradle 사용자 인 경우 종속성에 다음을 추가해보세요.

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'
}

마지막 3 개 항목은 Gradle을 사용할 때 추가해야하는 항목입니다. 이전 프로젝트에서는 이미 Lombok 플러그인과 Maven을 사용한 이전 프로젝트의 주석 프로세서 확인란을 처리했습니다. IntelliJ를 사용하여 Lombok이 선택된 Spring Boot 프로젝트를 만든 후이 오류가 발생했습니다. compileOnly 및 annotationProcessor 줄은 포함했지만 test * 줄은 포함하지 않았습니다.
Xenson

4

IDEA 13에서는 더 이상 문제가되지 않는 것 같습니다. Lombok 플러그인을 설치하기 만하면됩니다.


4

최신 아이디어 버전 2108.1을 설치했고 lombok 플러그인을 설치 한 후이 문제를 발견하고 Idea를 다시 시작하여 해결했습니다.


4

maven을 사용하는 경우 maven-compiler-plugin아래와 같이 주석 프로세서 목록에 Lombok 경로를 추가하십시오 .

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>1.3.0.Final</version>
                    </path>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>1.18.10</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>

Lombok 버전에 따라 버전을 변경하십시오. 그 외에 다음을 수행했는지 확인하십시오.

  • Intellij 용 Lombok 플러그인을 설치했습니다.
  • 에서 프로젝트에 대한 주석 처리를 활성화했습니다 File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor. 나 모두를 위해, Obtain processors from project classpath그리고 Processor path노력하고 있습니다. 그래서 무엇이 당신에게 효과가 있을지 확신하지 못하지만 어떤 것이 효과가 있는지 시도하십시오.

그리고 어둠 속에서 몇 시간 동안 촬영하는 것보다. 어노테이션 프로세서가 작동하고 컴파일러에서 사용되는 방식을 조금 읽으면 도움이 될 수 있습니다. 그래서 아래에서 빨리 읽으십시오.

http://hannesdorfmann.com/annotation-processing/annotationprocessing101


이것은 나를 위해 일한 유일한 솔루션입니다!
cheemcheem

2

이것은 나를 위해 일했습니다. File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor

'주석 처리 활성화'를 선택하십시오. Apply

닫기


2

나는 언급 된 거의 모든 답변을 시도했지만 아무것도 효과가 없었습니다. 내 gradle 빌드가 매번 실패했습니다. 이 솔루션을 찾았습니다.

annotationProcessor 'org.projectlombok:lombok' build.gradle을 추가 하십시오.

이것은 나를 위해 일했습니다.


2

클래스에서 @ Slf4J 주석을 제거한 다음 다시 추가하면 저에게 효과적이었습니다.


2

1 내 gradle lombok 종속성 :

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

2 IDEA (설정)에서 "주석 ..."을 활성화 한 후 Lombok 플러그인을 설치했음을 고려하여 동일한 문제를 해결했습니다.


1

JDK8에서 컴파일 할 때 이전 버전의 Lombok에서이 문제가 발생했습니다. 프로젝트를 JDK7로 다시 설정하면 문제가 해결되었습니다.


치어의 롬복 의존성을 업그레이드도 : 작동
크리스토프 Moine

1

이것은 OP의 문제가 아니지만 성공하지 못한 모든 것을 시도하는 다른 사람에게는 다음 과 같습니다.

비슷한 증상이있었습니다. 나는 후 내장 할 때마다 mvn clean, 그것을 찾을 수없는 것 log, 또는 getXYZ(), 또는 builder(), 또는 아무것도.

[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

QueryDSL / JPA / Hibernate / Lombok / IntelliJ / Maven 문제에 대해 찾을 수있는 모든 답변을 읽은 후 그 원인이 정적 필드에 주석이 달린 메서드 의 단일 정적 가져 오기@Getter 라는 것을 알아 냈습니다 .

봄 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!");
  }
}

1

IntelliJ 문제가 아닙니다. 콘솔에서 시도하면 mvn install을 실행하면 중단됩니다. lombok.extern의 모든 주석은 종속성을 추가해야했습니다. 이 패키지는 다음 주석을 그룹화합니다.

  • CommonsLog
  • Flogger
  • 로그
  • JBossLog
  • 로그 4
  • Log4j2
  • Slf4j
  • XSlf4j

예를 들어 Slf4j의 경우이 종속성을 pom.xml에 추가해야합니다.

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${slf4j.version}</version>
</dependency>

0

주석 프로세서를 활성화하고 lombok 플러그인을 설치 한 후에도 여전히 작동하지 않았습니다. 우리는 아이디어 옵션 "Delegate IDE build to gradle"을 확인하여 문제를 해결했습니다.


0

나를 위해 정리 한 것은 Maven 설정에서 "Use plugin registry"확인란을 선택하는 것이 었습니다.

경로는 File-> Preferences-> Build, Execution, Deployment-> Build Tools-> Maven입니다.


0

각 모듈에서 .idea 폴더 및 .iml 파일을 삭제하고 솔루션을 다시 빌드하십시오.


0

나는 Lombok 플러그인, 주석을 활성화했고, 명령 줄에서 컴파일하고 있었는데-모든 것이 여전히 내 프로젝트를 maven으로 보지 못했습니다 (모든 maven 종속성은 소스 파일에서 빨간색이었습니다). 그런 다음 SHIFT를 두 번 클릭하고 'maven'을 검색했고 결과 중 'Reload all Maven Projects'가있었습니다. 실행 후 Maven 탭이 나타나고 컴파일 할 수 있었고 소스 코드의 모든 빨간색 밑줄이 사라졌습니다.


0

간단하지만 나는 그것을 알아 냈습니다 @Log. 수업에 추가 하는 것을 놓쳤습니다 .

@Log
public class YourClassName {


}

누군가를 도울 수 있습니다.


0

나는 같은 문제가 있습니다. 나는 gradle과 IDEA를 사용합니다.

그것은 잘못된 버전의 gradle로 인해 발생했습니다.

gradle \ wrapper \ gradle-wrapper.properties에서는 다음과 같습니다.

distributionUrl=https\://services.gradle.org/distributions/gradle-4.8-bin.zip

그러나 IDEA에서 버전을 다음과 같이 지정했습니다.

D:\Library\gradle-5.2.1

gradle 버전을 4.10.x로 낮추면 문제가 사라집니다.


0

프로젝트 기본 디렉토리에lombok.config 파일 을 생성 하고 값을 제공하십시오 .lombok.log.fieldName

예: lombok.log.fieldName = LOG

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.