1

使用 delombok maven 插件将我的所有文件放在“target/generated-sources/delombok”中。当我尝试运行 maven 编译器时,它会抱怨重复的类,所以我按照这个问题的建议将 addOutputDirectory 设置为 false 。现在的问题是 delombok 的文件被忽略了,因此编译器抱怨缺少方法。

如何告诉 maven 编译器插件忽略默认的“src/main/java”目录,而是使用“target/generated-sources/delombok”目录进行编译?

当编译器运行时,运行 mvn compile -X 会产生以下输出:

[DEBUG]   (f) compileSourceRoots = [C:\Users\Jamey.Holden\workspace\Apollo\Website\src\main\java, C:\Users\Jamey.Holden\workspace\Apollo\Website\target\generated-sources\java]
[DEBUG]   (f) compilerId = javac
[DEBUG]   (f) debug = true
[DEBUG]   (f) encoding = UTF-8
[DEBUG]   (f) failOnError = true
[DEBUG]   (f) forceJavacCompilerUse = false
[DEBUG]   (f) fork = false
[DEBUG]   (f) generatedSourcesDirectory = C:\Users\Jamey.Holden\workspace\Apollo\Website\target\generated-sources\annotations
[DEBUG]   (f) mojoExecution = org.apache.maven.plugins:maven-compiler-plugin:3.0:compile {execution: default-compile}
[DEBUG]   (f) optimize = false
[DEBUG]   (f) outputDirectory = C:\Users\Jamey.Holden\workspace\Apollo\Website\target\classes
[DEBUG]   (f) proc = none
[DEBUG]   (f) projectArtifact = ic.apollo:website:war:0.1
[DEBUG]   (f) showDeprecation = false
[DEBUG]   (f) showWarnings = false
[DEBUG]   (f) skipMultiThreadWarning = false
[DEBUG]   (f) source = 1.6
[DEBUG]   (f) staleMillis = 0
[DEBUG]   (f) target = 1.6
[DEBUG]   (f) verbose = false
[DEBUG]   (f) mavenSession = org.apache.maven.execution.MavenSession@393e6226
[DEBUG]   (f) session = org.apache.maven.execution.MavenSession@393e6226

然后再往下打印命令行选项,我可以看到 -sourcepath 参数是:-sourcepath C:\Users\Jamey.Holden\workspace\Apollo\Website\src\main\java;C:\Users\Jamey.Holden\workspace\Apollo\Website\target\generated-sources\java; 这些都不是 delombok 目录,所以它在尝试编译时找不到所有的 getter 和 setter 是很公平的。

更新 我想我已经找到了问题的根源。我正在设置 proc=none 以防止注释处理,因为我正在使用 queryDSL 生成元实体,并且当未设置此项以避免注释处理时,编译器发现重复实体错误。删除 proc=none 和 querydsl 注释处理器解决了这个问题。现在我只是去让 m2e 再次工作。

4

3 回答 3

5

看起来您没有阅读文档,因为插件需要像这样正确配置,这是 generate-sources 生命周期阶段,之后生成的源文件将由 maven-compiler-plugin 自动拾取.

<build>
  <plugins>
    <plugin>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok-maven-plugin</artifactId>
      <version>0.11.6.0</version>
      <executions>
        <execution>
          <phase>generate-sources</phase>
          <goals>
            <goal>delombok</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
于 2012-11-21T10:05:18.180 回答
3

这不会对每个人都有用。但是如果你使用 lombok编写自己的注解处理器,那么你需要有不同的配置。

要创建没有 lombok 的编译器,您需要将 proc 设置为 none:

      <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven-compiler-plugin.version}</version>
            <configuration>
                                    <proc>none</proc>
                <source>${java.version}</source>
                <target>${java.version}</target>
            </configuration>
        </plugin>
    </plugins>

并且使用 lombok 您必须明确设置注释处理器:

      <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven-compiler-plugin.version}</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
                <annotationProcessors>
                    <annotationProcessor>lombok.core.AnnotationProcessor</annotationProcessor>
                </annotationProcessors>
            </configuration>
        </plugin>
    </plugins>
于 2013-09-14T13:25:51.930 回答
0

做类似的事情

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.0</version>
      <configuration>
        <includes>
            <include>target/generated-sources/delombok/*.java</include>
        </includes>
        <excludes>
            <exclude>src/main/java</exclude>
        </excludes>         
      </configuration>
    </plugin>
于 2012-11-21T11:34:20.780 回答