如何在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
另外
- 构建助手:有一个构建助手似乎提供了这个function,但我之前没有用过。
- 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 :
- 将
src/main/java
的默认
覆盖为${project.build.directory}/generated-sources/delombok
。 - 将
src/main/lombok
lombok中的默认delomboksourceDirectory
覆盖为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-plugin
或maven-javadoc-plugin
,因为它们应该尊重sourceDirectory
。
使用此hack需要您自担风险。 (我的猜测是,这可能会使您的IDE和其他一些开发人员感到困惑。)
似乎没有很好的方法来设置Lombok Maven。 @opyate建议的“配置文件”方法不起作用,因为
http://jira.codehaus.org/browse/MNG-5310
但是,一个非常丑陋的解决方法是简单地使用另一个pom.xml
,除了重新定义sourceDirectory
之外,在各方面都相同,使用命令行参数来使用文件,如:
Maven交替pom