如何在 Maven 编译期间忽略 Java 源目录?

2022-09-01 18:56:00

我正在尝试使用龙目岛Maven插件来确保在使用龙目岛时正确创建Javadocs。

Lombok Maven 在编译之前引入了一个新的代码生成目标。在我的配置中,我的(带有龙目岛注释的Java)被处理以在 中创建Java(没有龙目岛注释)。sourceDirectorysrc/main/javatarget/generated-sources/delombok

但是,中的每个文件现在都有一个对应的(同名的)文件,导致由于重复的类而导致编译失败。sourceDirectorytarget/generated-sources/delombok

如何告诉 Java 编译器忽略 sourceDirectory 中的源代码?

请注意,默认的龙目岛 Maven 配置会让开发人员将 Java(带有龙目岛注释)放在文件夹中,而不是 。但是,我不希望这样做,因为它会混淆IDE,并且我的代码编译得很好(如果我删除Maven插件)。src/main/lomboksrc/main/java

还要注意,简单地重新定义也会让IDE感到不安(他们不再知道在哪里可以找到Java源代码!sourceDirectory


答案 1

我最近从使用flaky maven-exec-plugin方法为javadoc工具生成原始源代码切换到使用lombok-maven-plugin。

我的设置

  • 所有来源src/main/java
  • 生成的源进入target/generated-sources/delombok

我最初遇到了这个问题,但它似乎是一个简单的解决方法:不要让龙目岛插件将delombok路径添加到编译器源路径中。IEaddOutputDirectoy

<plugin>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok-maven-plugin</artifactId>
    <version>0.11.2.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>

这似乎解决了现在的问题

编辑:奖金,如何使用此设置生成适当的javadocs

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.8.1</version>
    <configuration>
        <defaultVersion>${project.version}</defaultVersion>
        <sourcepath>target/generated-sources/delombok</sourcepath>
    </configuration>
</plugin>

答案 2

创建一个新的 Maven 配置文件,然后在新的配置文件中,只需重新定义源:

<sourceDirectory>target/generated-sources/delombok</sourceDirectory>

或者

  1. 构建帮助程序:有一个构建帮助程序似乎提供了此功能,但我以前从未使用过此功能。
  2. Hack:这里描述了一个黑客,但作者建议反对它,此外:如果你要花时间修改你的POM并创建这个黑客,你也可以做正确的方式并实现一个配置文件。

推荐