如何使用Lombok摆脱Intellij中Mavenized项目的重复类错误

Sel*_*ena 12 intellij-idea maven lombok intellij-lombok-plugin

我有一个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>
Run Code Online (Sandbox Code Playgroud)

Krz*_*iek 10

根据delombok目标文档:默认输出目录是:

${project.build.directory}/generated-sources/delombok
Run Code Online (Sandbox Code Playgroud)

我找到了JetBrains团队成员的评论,说明:

IDEA会自动排除构建"目标"文件夹,前提是它下面没有生成的源,否则它会排除所有子文件夹,但会生成所有子文件夹.

如果您想要排除某些生成的代码或构建工件,则可以将其放在"target"文件夹下.

这意味着/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>
Run Code Online (Sandbox Code Playgroud)

这将阻止IDEA Duplicate class found in (...)发出警告.


Hem*_*wda 0

Andrey Dernov在这里建议的这个解决方案对我来说适用于 Maven。

启用设置(macOS 上的首选项)> 构建、执行、部署 > 构建工具 > Maven > 运行器 > 启用“将 IDE 构建/运行操作委托给 maven”选项