如何从代码修改(delombok'd)而不是从src / main / java编译Maven

时间:2012-11-20 17:50:52

标签: maven lombok maven-compiler-plugin

使用delombok maven插件将我的所有文件放在'target / generated-sources / delombok'中。 当我尝试运行maven编译器时,它会抱怨重复的类,所以我将addOutputDirectory设置为false为this question recommends现在问题是delombok'ed文件被忽略,因此编译器抱怨关于缺少方法。

如何告诉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重新开始工作。

3 个答案:

答案 0 :(得分:6)

看起来你没有读documentation因为插件需要正确配置,这就是生成源生命周期阶段,之后生成的源文件将自动成为由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>

答案 1 :(得分:2)

这对每个人都没用。但如果您使用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>

答案 2 :(得分: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>