Construindo com Lombok's @ Slf4j e Intellij: Não é possível encontrar log de símbolos


113

Eu tenho um projeto maven que é compilado sem problemas na linha de comando. No entanto, quando o construo com o IntelliJ, recebo o erro:

java: FileName.java:89: cannot find symbol
symbol  : variable log

Não há log definido ou importado no arquivo java, mas há um

@Slf4j
final public class FileName {

declaração antes do corpo da classe que deve definir a classe de log.

Na janela de estrutura do projeto, classes para:

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

estão listados em bibliotecas e são indicados como tendo sido baixados e disponíveis.

Alguma ideia de por que isso seria construído com o maven por meio da linha de comando, mas não por meio do IntelliJ e como resolver o problema?


5
Tendo o mesmo problema, reinstalar o Lombok Plugin ajudou.
— Alex Shumilov,

Respostas:


170

Além de ter o plug-in do Lombok instalado , certifique-se também de que a Enable annotation processingcaixa de seleção " " esteja marcada em:

Preferences > Compiler > Annotation Processors

Observação: a partir do IntelliJ 2017, a Enable Annotation Processingcaixa de seleção " " mudou para:

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

1
Não tenho o processamento de anotações habilitado e funciona: | Eu tenho o plugin lombok instalado.
— Ben George

Instalei o plugin e funcionou sem alterar esta configuração. No entanto, decidi mudá-lo para uma boa medida.
— sheldonkreger

6
Usando os plug-ins IntelliJ 2017.2 e Lombok 0.14.16, foi necessário definir "Ativar processamento de anotação" e a caixa de seleção pode ser encontrada em Preferências -> Compilar, Execução, Implementação -> Compilador -> Processadores de anotação.
— Niemi

1
IntelliJ 2018.2, plugin lombok instalado 1.14. Eu ainda precisava habilitar o processamento de anotações no IntelliJ. Arquivo-> Configurações-> Compilar, Execução, Implementação-> Compilador-> Processadores de anotação. O IntelliJ não está realmente ganhando pontos comigo.
— demaniak

32

Presumivelmente, é a anotação Lombok @ Slf4j que você está usando. Você precisará instalar o plug-in do Lombok no IntelliJ se quiser que o IntelliJ reconheça as anotações do Lombok. Caso contrário, o que você espera ao tentar usar um campo que não existe?


1
Tenho o plug-in do Lombok instalado. Não parece haver muito em termos de opções de configuração. Talvez seja um bug no plugin?
— user1991839

1
Usei-o com sucesso com o IDEA 11 e 12. Ocasionalmente, algo parece "esquecer" o Lombok e recebo um monte de linhas vermelhas no código-fonte, mas ele ainda funciona para mim. Ele vai e vem, então o plugin definitivamente não está livre de bugs.
— Ryan Stewart

Você sabe se há uma solução alternativa para superar isso? Como, possivelmente, informar ao IntelliJ sobre as bibliotecas do Lombok sem passar pelo plug-in? Estou tentando usar o IntelliJ para testes de depuração e isso está tornando difícil para mim usá-lo para isso
— user1991839

Desculpe, não posso te ajudar nisso. Ainda não usei muito o Lombok. Acabei de experimentar em alguns lugares. Eu verificaria a página do projeto do plugin , mas tenho a sensação de que ainda não há uma grande comunidade em torno dele.
— Ryan Stewart

24

Na versão do Intellij 2016, 2017, ative Preferências -> Compilador -> Processadores de anotação não funciona para mim!

A seguinte caixa de seleção adicional ajuda: insira a descrição da imagem aqui


1
Eu adicionei o plugin e habilitei os processadores de anotação, ainda sem sorte. Você pode fornecer informações sobre como acessar a caixa de seleção acima?
— Philip John

@PhilipJohn: Na caixa de pesquisa Preferências, digite "Lombok"?
— Tim Long

na verdade, também precisamos adicionar a dependência "org.slf4j"
— Vasyl Sarzhynskyi


10

Posso estar desencorajando um tópico morto, mas uma solução simples é verificar em suas dependências (pom do Maven por exemplo) se você está incluindo o logback-core e o logback-classic .

Slf4j é apenas a interface, você precisa da implementação concreta por trás dele para funcionar.

Já fui enganado duas vezes com IDÉIA, bagunçando tudo, agora estou pronto para ir: D


7

Funcionou para mim !!! Estava falhando no CircleCI e no Jenkins também.

Se você for um usuário Gradle, tente adicionar o seguinte às suas dependências:

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

Os últimos 3 itens são o que eu precisava adicionar ao usar o Gradle. Para um projeto anterior, eu já havia cuidado do plug-in do Lombok e da caixa de seleção do processador de anotações para um projeto anterior para o qual usamos o Maven. Encontrei esse erro depois de usar o IntelliJ para criar um projeto Spring Boot com o Lombok selecionado; incluiu as linhas compileOnly e annotationProcessor, mas não as linhas test *.
— Xenson

4

Na IDEA 13, isso parece não ser mais um problema, você só precisa ter o plug-in do Lombok instalado.


4

Acabei de instalar a versão 2108.1 do Ideia mais recente e encontrei este problema, após instalar o plugin lombok e reiniciar o Ideia resolvê-lo.


4

Se você estiver usando o maven, tente adicionar o caminho do Lombok à maven-compiler-pluginlista de processadores de anotação, conforme mostrado abaixo.

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

Altere a versão de acordo com sua versão do Lombok. Além disso, certifique-se de ter feito o seguinte

  • instalou o plug-in do Lombok para Intellij.
  • Processamento de anotação ativado para seu projeto em File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor. Para mim tanto, Obtain processors from project classpathe Processor pathestá funcionando. Portanto, não tenho certeza do que funcionará para você, mas tente o que funcionar.

E ao invés de filmar no escuro por horas. Ler um pouco como os processadores de anotação funcionam e são usados ​​pelo compilador pode ajudar. então leia rapidamente abaixo.

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


Esta é a única solução que funcionou para mim!
— cheemcheem

2

Isso funcionou para mim: File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor

Marque 'ativar o processamento de anotação'. Apply

Perto


2

Tentei quase todas as respostas mencionadas, mas nada funcionou para mim. Minha compilação do Gradle estava falhando o tempo todo. Acabei de encontrar esta solução:

Adicione annotationProcessor 'org.projectlombok:lombok' em seu build.gradle.

Isso funcionou para mim.


2

Remover a anotação @ Slf4J da classe e depois adicioná-la novamente funcionou para mim.


2

1 Minhas dependências do Gradle Lombok:

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

2 Depois de ativar "Anotações ..." em IDEA (Configurações), levando em consideração que você instalou o plug-in do Lombok, que resolveu o mesmo problema


1

Eu estava vendo esse problema com uma versão mais antiga do Lombok ao compilar no JDK8. Definir o projeto de volta para JDK7 eliminou o problema.


Atualizar a dependência do lombok no pom também funciona :)
— Christophe Moine

1

Isso não terá sido problema da OP, mas para qualquer outra pessoa que tenta de tudo sem sucesso:

Eu tive sintomas semelhantes. Sempre que construí após um mvn clean, ele não encontrava log, ou getXYZ(), ou builder(), ou qualquer coisa.

[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

Depois de ler todas as respostas que pude encontrar sobre problemas de QueryDSL / JPA / Hibernate / Lombok / IntelliJ / Maven sem sucesso, descobri que o culpado era uma única importação estática de um @Gettermétodo que foi anotado em um campo estático .

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

1

Não é um problema do IntelliJ. Se você tentar no console, execute mvn install , também interrompe. Todas as anotações de lombok.extern precisam adicionar dependências. Este pacote agrupa as próximas anotações:

  • CommonsLog
  • Flogger
  • Registro
  • JBossLog
  • Log4
  • Log4j2
  • Slf4j
  • XSlf4j

Por exemplo, para Slf4j é necessário adicionar esta dependência ao seu pom.xml

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

0

Depois de habilitar os processadores de anotação e instalar o plugin lombok, ainda não funcionou. Nós contornamos isso marcando a opção de ideia "Delegar build IDE para gradle"


0

O que resolveu as coisas para mim foi marcar a caixa de seleção "Usar registro de plug-in" nas configurações do Maven.

O caminho é: Arquivo -> Preferências -> Compilação, execução, implantação -> Ferramentas de compilação -> Maven


0

Exclua a pasta .idea e os arquivos .iml em cada módulo e reconstrua a solução.


0

Eu tinha o plugin do Lombok, anotações habilitadas, ele estava compilando na linha de comando - tudo e ainda não via meu projeto como maven (todas as dependências do maven estavam vermelhas nos arquivos de origem). Em seguida, cliquei em SHIFT duas vezes e pesquisei 'maven' e entre os resultados estava 'Recarregar todos os projetos Maven'. Depois de executá-lo, a guia Maven apareceu e eu fui capaz de compilar, e todos os sublinhados em vermelho no código-fonte desapareceram.


0

Uma coisa simples, mas descobri que é: senti falta de adicionar @Logà classe.

@Log
public class YourClassName {


}

Isso pode ajudar alguém.


0

Eu tenho o mesmo problema; Eu uso o Gradle e o IDEA;

Acontece que é causado pela versão errada do gradle.

Em gradle \ wrapper \ gradle-wrapper.properties, é:

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

No entanto, eu especifiquei a versão em IDEA para ser

D:\Library\gradle-5.2.1

Depois de baixar a versão do gradle para 4.10.x, o problema foi embora.


0

Tente criar o lombok.configarquivo no diretório base do projeto e forneça o lombok.log.fieldNamevalor.

Exemplo: lombok.log.fieldName = LOG

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.