我有一个Maven管理的Lombok项目,我使用Intellij。在构建之后,由于target / generated-sources / delombok中生成的源,我总是在Intellij中遇到关于重复类的大量错误。我有什么办法可以摆脱这些错误吗?现在我只删除目标文件夹,但这真的很烦人。
我在Maven中有标准配置,而lombok源代码在main / src / lombok中:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.16.8.0</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>delombok</goal>
</goals>
</execution>
</executions>
</plugin>
<profiles>
<profile>
<id>lombok-needs-tools-jar</id>
<activation>
<file>
<exists>${java.home}/../lib/tools.jar</exists>
</file>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.16.8.0</version>
<dependencies>
<dependency>
<groupId>sun.jdk</groupId>
<artifactId>tools</artifactId>
<version>1.8</version>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</profile>
</profiles>
答案 0 :(得分:6)
根据delombok goal documentation:默认输出目录是:
${project.build.directory}/generated-sources/delombok
我找到了JetBrains团队成员comment,说明:
IDEA会自动排除构建目标&#39;文件夹,前提是它下面没有生成的源,否则它会排除所有子文件夹,但会生成。
如果你有一些你希望被排除的生成代码或构建工件,你可以把它放在&#39; target&#39;文件夹中。
这意味着默认情况下不会排除/generated-sources
目录,如果您打算排除某些文件,则应将它们放在父/target
目录下,而不是/generated-sources
下。
要实现此目的,您应配置插件并提供非默认<outputDirectory>
:
<plugin>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.16.18.0</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>delombok</goal>
</goals>
</execution>
</executions>
<configuration>
<sourceDirectory>src/main/java</sourceDirectory>
<outputDirectory>${project.build.directory}/delombok</outputDirectory>
<addOutputDirectory>false</addOutputDirectory>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
这将阻止IDEA产生Duplicate class found in (...)
警告。
答案 1 :(得分:0)
我尝试了Krzusiek的解决方案,但是IntelliJ仍会将来自src / main / java的源文件标记为重复。
在多次尝试调整lombok-maven-plugin
失败之后,我最终决定在编译后摆脱delombok
文件夹。该文件夹仅作为编译的中间阶段的服务器(在我的情况下,我需要它通过aspectj-maven-plugin
将lombok与AspectJ编译器一起使用),并且真正没有必要在编译完源文件之后就保留它。
在每次编译后手动删除delombok
文件夹是一件实在令人讨厌的事,因此我只配置了maven-clean-plugin
的另一次执行,该执行专门针对delombok
文件夹。
您的POM应该包含:
<build>
<sourceDirectory>${project.build.directory}/generated-sources/delombok</sourceDirectory>
<plugins>
<!-- will delombok source files into /target/generated-sources/delombok -->
<plugin>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.16.16.0</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>delombok</goal>
</goals>
</execution>
</executions>
<configuration>
<addOutputDirectory>false</addOutputDirectory>
<sourceDirectory>src/main/java</sourceDirectory>
</configuration>
</plugin>
<!-- other plugins bound to compile phase should go here -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<executions>
<execution>
<id>delombok-removal</id>
<phase>compile</phase>
<goals>
<goal>clean</goal>
</goals>
<configuration>
<excludeDefaultDirectories>true</excludeDefaultDirectories>
<filesets>
<fileset>
<directory>${project.build.sourceDirectory}/com</directory> <!-- assuming your root package is something like com.mycompany -->
</fileset>
</filesets>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
答案 2 :(得分:0)
该想法是从源中删除生成的源。我可以从项目结构->从软件包列表中选择,然后在右侧找到用于导出该软件包源的文件夹。如果您在该列表中找到了生成源,则将其删除。
答案 3 :(得分:0)
您只需要在Intellij中取消标记带有生成源的文件夹,就可以了。