如何使用maven-compiler-plugin配置Lombok?

O.Z*_*ats 8 java maven lombok maven-compiler-plugin

我在项目中的Maven中有一个根模块和子模块。我正在尝试使用龙目岛。我已经添加了

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.12</version>
    <scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

根pom.xml。在子模块中,我有一个带有Lombok批注的类。当我尝试建立项目时,我得到了很多

找不到标志

我试图在这里打电话给getters和setters。

我试图在根pom和子pom中使用具有相同版本(1.16.12)的lombok -maven-plugin,以及delombok,并将带注释的类移至src / main / lombok,我已经遍历了几乎所有问题因此,请尝试所有变体,但不会成功。

我正在使用3.6.1版本的Maven 3,Java 8,maven-compiler-plugin。

我应该如何配置项目以使用lombok?也许我做错了什么。

Ore*_*Ore 8

这不是似乎已解决的问题的直接答案,但可供将来的搜索者参考:

如果您使用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>
Run Code Online (Sandbox Code Playgroud)

您必须在此处添加lombok作为路径,例如

<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>
Run Code Online (Sandbox Code Playgroud)

但是您仍然必须将lombok列为提供的依赖项;)


Edg*_*yan 6

如果有人使用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>
Run Code Online (Sandbox Code Playgroud)


O.Z*_*ats 1

我使用的是 Java 8 和@Getter(onMethod = @__({@NoSerialization}))onX@Getter(onMethod = @__({@Translation(messageKey = "translation.key")}))注释。我收到duplicate element '<any?>' in annotation @<any?>.错误输出。看起来来自 Lombok 的人对 Java 8 存在这样的问题很长一段时间,链接到 github 上的问题。Lombok 不处理带有参数的注释,如messageKey上面的注释。它仅适用于不带参数的注释和仅带value参数的注释(当您不写参数名称时)。