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

时间:2017-02-15 18:30:10

标签: java maven lombok maven-compiler-plugin

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

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

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

  

无法找到符号

我试图打电话给getter和setter。

我尝试在root pom和sub pom中使用 lombok-maven-plugin 和相同版本(1.16.12)以及使用delombok并将带注释的类移动到src / main / lombok,我已经查看了SO中的几乎所有问题,尝试了所有变体,但没有成功。

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

我应该如何配置项目才能使用lombok?或许我做错了。

7 个答案:

答案 0 :(得分:5)

这不是对这个似乎已经解决的问题的直接回答,而是作为未来搜索者的参考:

如果您正在使用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>

你必须在这里添加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>

但你仍然需要列出lombok作为提供的依赖;)

答案 1 :(得分:3)

如果有人使用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>

答案 2 :(得分:1)

我不确定lombok和lombok-maven-plugin之间有什么区别,但是我的项目配置了这种依赖:

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

我还没有尝试使用root和submodule poms,因为我的项目都倾向于相互隔离。不确定这是否会导致您的问题。

如果您使用的是Eclipse,是否运行了lombok.jar文件并将其指向您的eclipse.exe文件?它需要修改.exe才能让Eclipse知道那些getter和setter即将到来,这样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>

答案 3 :(得分:1)

我正在使用Java 8和@Getter(onMethod = @__({@NoSerialization}))以及@Getter(onMethod = @__({@Translation(messageKey = "translation.key")})) onX注释。我在错误输出中得到duplicate element '<any?>' in annotation @<any?>.。看起来像龙目岛的人很长一段时间都有这样的Java 8问题link to issue on github。 Lombok不处理上面注释中带有messageKey之类参数的注释。它仅适用于没有参数的注释和仅带有value参数的注释(当您不写参数名称时)。

答案 4 :(得分:0)

Maven Groovy and Java + Lombok

此堆栈溢出答案的解决方案对我有用。我错过了前面添加javaAgentClass的机会

答案 5 :(得分:0)

我遇到了同样的问题,但没有任何效果,即maven插件版本,annotationProcessorPaths,提供的作用域等。

最后,我将其范围缩小为在同一项目中的类上通过@UtilityClass方法进行静态导入,即未从依赖项中引入。这导致注释处理失败,即使对于不相关的类也是如此,并且使lombok代码看起来好像没有正确编译。摆脱静态导入就可以完成所有工作。

为此,Github上存在一个未解决的问题,尽管显然很难解决。

答案 6 :(得分:-1)

use: <scope>provided</scope> in pom.xml
like that:
<pre> <code>
   <dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.20</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
</code>
</pre>