当前位置: 首页 > 知识库问答 >
问题:

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

谭向晨
2023-03-14

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

Lombok Maven在编译之前引入了一个新的代码生成目标。在我的配置中,将处理我的源目录(带有Lombok注释的Java,src/main/Java)以在目标/生成的源/delombok中创建Java(没有Lombok注释)。

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

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

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

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


共有3个答案

贡俊
2023-03-14

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

这有助于将delombok视为源代码生成器。

那么,你怎样才能得到你真正想要的呢?(请注意,Maven有一个addCompileSourceRoot方法,但没有相应的removeCompileSourceRoot。)想象一下以下黑客行为:

  1. 覆盖默认值<代码>

基本上,您将使用src/main/java,但Maven将忽略它,而是使用目标/生成的源代码/delombok。Lombok插件将把src/main/java转换成目标/生成源/delombok中的详细代码。

<build>
  <sourceDirectory>${project.build.directory}/generated-sources/delombok</sourceDirectory>
  <plugins>
    <plugin>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok-maven-plugin</artifactId>
      <version>1.16.6.1</version>
      <executions>
        <execution>
          <id>delombok</id>
          <phase>generate-sources</phase>
          <goals>
            <goal>delombok</goal>
          </goals>
          <configuration>
            <addOutputDirectory>false</addOutputDirectory>
            <sourceDirectory>src/main/java</sourceDirectory>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

请注意,您不需要破解其他插件,如maven jar插件或maven javadoc插件,因为它们应该尊重sourceDirectory。

使用此黑客,风险自负。(我的猜测是,这可能会混淆您的IDE和其他一些开发人员。)

董俊晖
2023-03-14

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

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

或者说

  1. 构建助手:有一个构建助手似乎提供了此功能,但我以前没有使用过。
  2. hack:这里描述了一个hack,但作者建议不要使用它,此外:如果您要花时间修改POM并创建此hack,您还可以按照正确的方式进行操作并实现配置文件
谢英耀
2023-03-14

我最近从使用flakey maven exec插件方法为javadoc工具生成原始源代码切换到使用lombok maven插件

我的设置

  • src/main/java
  • 中的所有来源
  • 生成的源进入目标/生成的源/delombok

我最初遇到了这个问题,但它似乎是一个简单的解决方案:不要让lombok-maven-plugin使用addOutputDirec玩具将delombok路径添加到编译器源路径。IE

<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>

这似乎暂时解决了问题

编辑:Bonus,如何使用此设置生成正确的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>
 类似资料:
  • 问题内容: 我正在尝试使用Lombok Maven插件来确保在使用Lombok时正确创建Javadocs 。 在编译之前,Lombok Maven引入了一个新的代码生成目标。在我的配置中,我的(带有Lombok批注的Java )被处理以在中创建Java(没有Lombok批注)。 但是,其中的每个文件现在在中都有一个对应的文件(名称相同),由于类重复,导致编译失败。 如何告诉Java编译器忽略其中的

  • 我有一个Visual Studio 2012 TypeScript项目。当我第一次制作项目时,我添加了 2 个新的 .ts 文件,这些文件是 Framework.ts 此时我不知所措。我看了看csproj文件: 然后是打字稿编译器的执行命令: 这确实也应该构建这些文件。我只是不知道为什么它拒绝。有谁知道如何解决这个问题?

  • 我希望能够自动设置我们的eclipse项目来忽略使用m2e的可选编译问题,但是我似乎遇到了m2e和maven的冲突。 如果我使用build helper maven插件添加源目录,那就太好了——我不必自动将

  • 本文向大家介绍Maven在Java8下如何忽略Javadoc的编译错误详解,包括了Maven在Java8下如何忽略Javadoc的编译错误详解的使用技巧和注意事项,需要的朋友参考一下 JavaDoc简介And基础知识 (一) Java注释类型 //用于单行注释。 /*...*/用于多行注释,从/*开始,到*/结束,不能嵌套。 /**...*/则是为支持jdk工具javadoc.exe而特有的注释语

  • 我已经搜索了所有关于为什么我们应该有不同于目标的来源,但不一致的答案: 如果JDK向下兼容,为什么在1.7上编译时需要将目标设置为1.8? 将源设置为高于目标将不起作用,例如错误: 源版本8需要目标版本1.8 同样来自Maven: 仅仅设置target选项并不能保证代码在具有指定版本的JRE上实际运行。陷阱在于无意中使用了只存在于后来的JRE中的API,这会导致代码在运行时出现链接错误 有人能举个

  • 忽略编译器警告 格式 #pragma clang push #pragma clang diagnostic ignored "错误类型" // 存在警告的代码 #pragma clang pop > 1.在需要忽略的警告处右键 -- Reveal in Log 2.会给出警告的详细信息,其中包括警告的类型 3.高亮选中的便是这个警告的类型 4.在警告代码处增加如下代码 Command