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

我正在尝试使用Lombok Maven插件来确保在使用Lombok时正确创建Javadoc。

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

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

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

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

另请注意,简单地重新定义sourceDirectory也会扰乱IDE(他们不再知道在哪里可以找到Java源代码!)。

我最近从使用flakey maven-exec-plugin方法转换为生成javadoc工具的原始源以使用lombok-maven-plugin

我的设置

  • src/main/java所有源代码
  • 生成的源位于target/generated-sources/delombok

我最初遇到这个问题,但它似乎是一个简单的修复:不要让lombok-maven-plugin使用addOutputDirectoy将delombok路径添加到编译器源路径。 IE

  org.projectlombok lombok-maven-plugin 0.11.2.0   generate-sources  delombok     false src/main/java   

这似乎解决了现在的问题

编辑:奖金,如何使用此设置生成正确的javadoc

  org.apache.maven.plugins maven-javadoc-plugin 2.8.1  ${project.version} target/generated-sources/delombok   

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

 target/generated-sources/delombok 

另外

  1. 构建助手:有一个构建助手似乎提供了这个function,但我之前没有用过。
  2. Hack:这里有一个hack,但作者建议不要这样做,而且:如果你要花时间修改你的POM并创建这个hack,你也可以做正确的方法并实现一个配置文件。

delombok目标旨在将java代码从src/main/lombok delombok转换为target/generated-source/delombok 。 然后,在src/main/java找到的其他java代码与target/generated-source/delombok组合以生成组合的java类。

将delombok视为源代码生成器是有帮助的。

那你怎么能得到你真正想要的东西呢? (注意,Maven有一个addCompileSourceRoot方法,但没有相应的removeCompileSourceRoot 。)想象一下下面的hack

  1. src/main/java的默认覆盖为${project.build.directory}/generated-sources/delombok
  2. src/main/lombok lombok中的默认delombok sourceDirectory覆盖为src/main/java ,并禁用addOutputDirectory

基本上,您将使用src/main/java ,但Maven将忽略它,而是使用target/generated-sources/delombok 。 Lombok插件将src/main/java转换为target/generated-sources/delombok详细代码。

  ${project.build.directory}/generated-sources/delombok   org.projectlombok lombok-maven-plugin 1.16.6.1   delombok generate-sources  delombok   false src/main/java       

请注意,您不应该破解其他插件,例如maven-jar-pluginmaven-javadoc-plugin ,因为它们应该尊重sourceDirectory

使用此hack需要您自担风险。 (我的猜测是,这可能会使您的IDE和其他一些开发人员感到困惑。)

似乎没有很好的方法来设置Lombok Maven。 @opyate建议的“配置文件”方法不起作用,因为

http://jira.codehaus.org/browse/MNG-5310

但是,一个非常丑陋的解决方法是简单地使用另一个pom.xml ,除了重新定义sourceDirectory之外,在各方面都相同,使用命令行参数来使用文件,如:

Maven交替pom