web-dev-qa-db-ja.com

Lombokをmaven-compiler-pluginで構成する方法は?

プロジェクトのmavenにルートモジュールとサブモジュールがあります。ロンボクを使用しようとしています。私が追加しました

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.12</version>
    <scope>provided</scope>
</dependency>

ルートpom.xmlに。サブモジュールには、Lombokアノテーションが付いたクラスがあります。プロジェクトをビルドしようとすると、

シンボルを見つけることができません

ゲッターとセッターを呼び出そうとしているところです。

ルートpomとサブpomで同じバージョン(1.16.12)を使用してlombok-maven-pluginを使用しようとしましたが、delombokを使用して、注釈付きクラスをsrc/main/lombokに移動しました。 SOのほぼすべての質問を調べ、すべてのバリエーションを試してみましたが、成功していません。

私はMaven 3、Java 8、3.6.1バージョンのmaven-compiler-pluginを使用しています。

ロンボクを使用できるようにプロジェクトを構成するにはどうすればよいですか?または多分私はsmthを間違っています。

12
O.Zaiats

Java 8と@Getter(onMethod = @__({@NoSerialization}))@Getter(onMethod = @__({@Translation(messageKey = "translation.key")})) onXアノテーションを使用していました。そしてduplicate element '<any?>' in annotation @<any?>.エラー出力。 Lombokの人がJava 8長い間このような問題を抱えているようです githubの問題へのリンク 。Lombokは、上記の注釈のmessageKeyのようなパラメータを持つ注釈を処理しません。これは、パラメーターなしのアノテーションとvalueパラメーターのみのアノテーション(パラメーターの名前を記述しない場合)でのみ機能します。

2
O.Zaiats

これは質問への直接の回答ではなく、解決されているようですが、将来の検索者のための参照として機能します。

Dagger(または何か他のもの)を使用して次のような注釈を処理している場合

<build>
  <plugins>
    <plugin>
      <groupId>org.Apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.7.0</version>
      <configuration>
        <annotationProcessorPaths>
          <path>
            <groupId>com.google.dagger</groupId>
            <artifactId>dagger-compiler</artifactId>
            <version>2.15</version>
          </path>
        </annotationProcessorPaths>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
    ....
  </plugins>
</build>

ここにパスとしてロンボクを追加する必要があります

<build>
  <plugins>
    <plugin>
      <groupId>org.Apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.7.0</version>
      <configuration>
        <annotationProcessorPaths>
          <path>
            <groupId>com.google.dagger</groupId>
            <artifactId>dagger-compiler</artifactId>
            <version>2.15</version>
          </path>

          <!-- SOLUTION --> 
          <path>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.20</version>
          </path>


        </annotationProcessorPaths>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
    ....
  </plugins>
</build>

ただし、ロンボクを提供された依存関係としてリストする必要があります;)

8
Ore

JDK 11をご利用の方の場合

    <build>
    <plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <source>${Java.version}</source>
                <target>${Java.version}</target>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>${lombok.version}</version>
                    </path>
                </annotationProcessorPaths>
                <compilerArgs>
                    <arg>-sourcepath</arg>
                    <arg>${project.basedir}/src/main/Java${path.separator}${project.basedir}/target/generated-sources/annotations${path.separator}/</arg>
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>
5
Edgar Asatryan

Lombokとlombok-maven-pluginの違いはわかりませんが、プロジェクトは次の依存関係で構成されています。

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok-maven-plugin</artifactId>
        <version>1.16.12.0</version>
    </dependency>

私のプロジェクトはすべて相互に分離されている傾向があるため、ルートとサブモジュールのpomについてはまだ実験していません。それがあなたに問題を引き起こしているのかどうかわかりません。

Eclipseを使用している場合、lombok.jarファイルを実行してEclipse.exeファイルをポイントしましたか? Eclipseがそれらのゲッターとセッターが来ていることを認識できるように.exeを変更して、開発中にEclipseが文句を言わないようにする必要があります。

編集:私はmaven-compiler-pluginを使用しています:

        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
1
Dan N

Maven GroovyおよびJava + Lombok

このスタックオーバーフローの答えの解決策は私にとってうまくいきました。以前にjavaAgentClassを追加しなかった

0
Karthik Cherala