使用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重新开始工作。
答案 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>