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.