我在项目中的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?或许我做错了。
答案 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>