web-dev-qa-db-ja.com

プロジェクトのロンボク注釈付きメソッドにアクセスすると、Mavenビルドはシンボルを見つけることができません。

私は初めてプロジェクトlombokを使用していますが、ビルドを実行するとmavenを介してプロジェクトをコンパイルする際に問題が発生します。プロジェクトlombokアノテーションが付けられたメソッドが呼び出されるエラーを受け取ります。

これは注釈付きパラメーターです。

    private @Getter @Setter String paymentNonce = null;

そしてこの行では、例えば、Mavenはビルドを中断します:

if (!StringUtilities.isNullOrEmpty(getPaymentNonce())) {

これは私のMavenの依存関係です

<dependency> 
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.4</version> 
</dependency>

mavenエラー:

[INFO] Compiling 158 source files to C:\Java\repos\luna\cloudflow\cloudflow-ejb\target\classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] \Java\repos\luna\cloudflow\cloudflow-ejb\src\main\Java\si\arctur\controller\PaymentProcessor.Java:[94,38] error: cannot find symbol
[ERROR] \Java\repos\luna\cloudflow\cloudflow-ejb\src\main\Java\si\arctur\controller\PaymentProcessor.Java:[97,106] error: cannot find symbol
[ERROR] \Java\repos\luna\cloudflow\cloudflow-ejb\src\main\Java\si\arctur\controller\PaymentProcessor.Java:[142,2] error: cannot find symbol
[ERROR] \Java\repos\luna\cloudflow\cloudflow-ejb\src\main\Java\si\arctur\controller\ShoppingCart.Java:[27,6] error: cannot find symbol
[ERROR] \Java\repos\luna\cloudflow\cloudflow-ejb\src\main\Java\si\arctur\controller\ShoppingCart.Java:[32,75] error: cannot find symbol
.....

私はJava 8を使用しています

27
simonC

私はロンボクを1.14.8にダウングレードし、このバージョンはmavenビルドで動作しますが、1.16バージョンが動作していない理由は見つかりませんでした:(

8
simonC

Maven-compiler-plugin v.2.3.2を使用して同じ問題を抱えていましたが、バージョン3.5まで更新した後、問題はなくなりました。

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.5</version>
    <configuration>
        ...
    </configuration>
</plugin>

お役に立てれば

31

私は実際にここに投稿された回答に従うことでこれを解決することができました:

MapStructとLombokは一緒に動作しません

基本的に、lombokmaven-compiler-plugin<annotationProcessorPaths>に追加する必要がありました

6
Fabian

Lombok関連の静的メソッド(主に@Builder)を静的インポートで使用している場合、同様の問題が発生する可能性があります(コードの他の部分でも)。

それに関して未解決の問題があります: https://github.com/rzwitserloot/lombok/issues/979

現在の回避策は、静的インポートを使用しないことです。変化する

import static my.org.Foo.FooBuilder
 ...
FooBuilder builder = Foo.builder();

に:

Foo.FooBuilder builder = Foo.builder(); // note >>Foo.<<FooBuilder; without static import
4
gilad

つまり、maven-compiler-pluginをアップ2.4にアップグレードするか、lombokを以下の1.14.*にダウングレードします。

maven-compiler-plugin以下の2.4は、javax.annotation.processing.Processorという名前の$をサポートしていないようです。

更新:maven-compiler-pluginforkに構成するか、plexus-compiler-javac1.8.6に更新できます。 (maven-compiler-plugin2.3.2には1.8.1が必要で、2.4には1.8.6が必要です)

1.16なので、lombokはShadowClassLoaderを使用します。これは、lombokの内部クラスのIDEプロモーションを防ぎます。ただし、ShadowClassLoader ifクラスローダーはorg.codehaus.plexus.compiler.javac.IsolatedClassLoaderです(ロンボク人がハードコードを使用して他の問題を解決する理由はわかりませんmayplexus-compiler-javacに関連します。)

maven-compiler-plugin2.4、またはplexus-compiler-javac1.8.6org.codehaus.plexus.compiler.javac.IsolatedClassLoaderを使用しないため、再び機能します。

3
liudongmiao

私の解決策は、注釈の前にlombokパッケージ名を付けることでした。

@lombok.Builder
@lombok.experimental.Accessors(prefix = "m", chain = true)

のではなく

@Builder
@Accessors(prefix = "m", chain = true)
2
B. Stackhouse

その場合、静的クラスでロンボク注釈を使用している場合、クラスのフルネームを言及する必要があります。の代わりに @Dataから@lombok.Data。これは私のために働いた。

1
vishal

依存関係内の「lombok」モジュールのパラメーターを指定してみてください。同じ問題に直面し、この回避策でこれを解決しました。

0
0x52616A657368

わかりませんが、何らかの理由で問題が解決します。

@Builderを使用してビルドメソッドを生成する2つのクラスがあります。しかし、1つは正常で、もう1つは異常です。私はすべてをチェックし、それは大丈夫のようです。しかし、mvnを実行してプロジェクトをコンパイルすると、エラーは次のようになります。

シンボルメソッドbuilder()が見つかりません

import lombok.*;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
class A {

}


import lombok.*;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
class B {

}

クラスAは正しくコンパイルされますが、クラスBは上記の問題を報告します。

Lombok JARのバージョンを置き換えようとしましたが、バージョンを最新に設定しても大丈夫ではありません。

そこで、参照するクラスごとにLombokをインポートしようとしました。

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
class B {

}

できます!バグのようです。

0
朱正欢

私の場合、JDKをアップグレードすることで解決しました(1.8.0_66、現在は1.8.0_92)

0
Vituel

Javaコンパイル(javac))で-proc:noneを使用して-processor <processorclass>を指定したか、明示的に注釈プロセッサを指定した可能性がありますか?

0
Roel Spilker