Lombokの@ Slf4jとIntellijを使用したビルド:シンボルログが見つかりません


112

コマンドラインから問題なくビルドできる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

ライブラリの下にリストされ、ダウンロードされて利用可能であることが示されています。

コマンドラインからmavenを使用してビルドするのにIntelliJを介してビルドしない理由と問題の解決方法はありますか?


5
同じ問題があるため、Lombokプラグインを再インストールすると問題が解決しました。
Alex Shumilov

回答:


170

加え、ロンボクがインストールプラグインの持つ、また「ことを確認するEnable annotation processing」のチェックボックスを下にチェックされています。

Preferences > Compiler > Annotation Processors

注: IntelliJ 2017以降、「Enable Annotation Processing」チェックボックスは次の場所に移動しました:

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

1
注釈処理を有効にしていないので機能します:| lombokプラグインをインストールしました。
ベンジョージ

プラグインをインストールし、この設定を変更せずに動作しました。しかし、私はそれをある程度変更することにしました。
sheldonkreger 2017

6
IntelliJ 2017.2とLombokプラグイン0.14.16を使用して、「アノテーション処理を有効にする」を設定する必要があり、チェックボックスは[設定]-> [ビルド、実行、デプロイメント]-> [コンパイラ]-> [アノテーションプロセッサ]にあります。
Niemi

1
IntelliJ 2018.2、lombokプラグインがインストールされている1.14。IntelliJで注釈処理を有効にする必要がありました。ファイル->設定->ビルド、実行、配置->コンパイラ->注釈プロセッサ。IntelliJは私にとって本当に勝ち点ではありません。
demaniak 2018

32

おそらく、それはあなたが使用しているLombok @ Slf4jアノテーションです。IntelliJにLombokアノテーションを認識させるには、IntelliJにLombokプラグインをインストールする必要があります。それ以外の場合、存在しないフィールドを使用しようとするとどうなりますか?


1
Lombokプラグインをインストールしました。構成オプションに関してはそれほど多くはないようです。おそらくそれはプラグインのバグですか?
user1991839

1
私はIDEA 11と12でうまく使用しました。時々、Lombokについて何かが「忘れている」ように思われ、ソースコードにたくさんの赤い線が表示されますが、それでもまだビルドされています。しかし、それは行き来しているので、プラグインは間違いなくバグがないわけではありません。
Ryan Stewart

これを乗り越えるための回避策があるかどうか知っていますか?プラグインを経由せずにIntelliJにLombokライブラリを通知する可能性はありますか?IntelliJを使用してテストをデバッグしようとしていますが、そのためにIntelliJを使用することは困難です
user1991839

申し訳ありませんが、お手伝いできません。ロンボクはまだあまり使っていません。いくつかの場所で試してみました。プラグインのプロジェクトページを確認したいのですが、大きなコミュニティはまだないようです。
Ryan Stewart

23

Intellijバージョン2016、2017で、環境設定->コンパイラ->注釈プロセッサを有効にしてください!

次の追加のチェックボックスが役立ちます。 ここに画像の説明を入力してください


1
プラグインを追加して注釈プロセッサを有効にしましたが、まだうまくいきません。上記のチェックボックスにアクセスする方法を提供できますか?
フィリップジョン

@PhilipJohn:[設定]検索ボックスに「ロンボク」と入力しますか?
ティムロング

実際には、「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

lombokプラグインをインストールしてアイデアを再起動した後、最新のアイデアバージョン2108.1をインストールしてこの問題を見つけました。解決します。


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ロンボク依存症:

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

2 IDEA(設定)で「注釈...」を有効にした後、Lombokプラグインをインストールしたことを考慮して、同じ問題を解決しました


1

JDK8でコンパイルすると、Lombokの古いバージョンでこの問題が発生しました。プロジェクトをJDK7に戻すと、問題はなくなりました。


pomでのロンボク依存関係のアップグレードも機能します:)
Christophe 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メソッドの単一の静的インポートであることがわかりました

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

IntelliJの問題ではありません。コンソールで試してみると、mvn installを実行すると壊れます。lombok.externからのすべての注釈には、依存関係を追加する必要があります。このパッケージは、次の注釈をグループ化します。

  • CommonsLog
  • Flogger
  • ログ
  • JBossLog
  • Log4
  • Log4j2
  • Slf4j
  • XSlf4j

たとえば、Slf4jの場合、この依存関係をpom.xmlに追加する必要があります

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

0

注釈プロセッサを有効にしてlombokプラグインをインストールした後も、それは機能しませんでした。アイデアオプションの「IDEビルドをGradleに委任する」をチェックすることで回避しました。


0

私にとっての事柄を整理したのは、Maven設定で[プラグインレジストリを使用する]チェックボックスをオンにすることでした。

パスは次のとおりです:ファイル->設定->ビルド、実行、デプロイメント->ビルドツール-> Maven


0

各モジュールの.ideaフォルダーと.imlファイルを削除し、ソリューションを再構築します。


0

私はLombokプラグインを使用し、アノテーションを有効にしました。コマンドラインからコンパイルしていました-すべて、それでもプロジェクトがmavenとして表示されませんでした(すべてのmaven依存関係はソースファイルで赤でした)。次に、Shiftキーを2回クリックして「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に下げた後、問題はなくなりました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.