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?

user1991839
fonte
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
Alexander Zagniotov
fonte
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?

Ryan Stewart
fonte
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

Tim Long
fonte
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
16

2019:

Obtenha um plugin e você está classificado ...

Arquivo> Configurações> Plug-ins

insira a descrição da imagem aqui

Witold Kaczurba
fonte
1
Nome: Plugin Lombok
Ismail Yavuz
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

Etenil
fonte
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'
}
S34N
fonte
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.

f120146
fonte
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.

mefor sy
fonte
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

Meena Chaudhary
fonte
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

Sumukh Bhandarkar
fonte
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.

Amrit Kr Lama
fonte
2

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

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

AlexPes
fonte
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.

John Chapman
fonte
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!");
  }
}
Corwin Newall
fonte
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>
albertoiNET
fonte
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"

Kristjan Peil
fonte
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

Radu Ciobanu
fonte
0

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

Rajiv Singh
fonte
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.

Kirill G.
fonte
0

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

@Log
public class YourClassName {


}

Isso pode ajudar alguém.

Shylendra Madda
fonte
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.

Yinhaomin
fonte
0

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

Exemplo: lombok.log.fieldName = LOG

Taras Melnyk
fonte