我想在 gradle 中使用 maven 实现以下目标:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<executions>
<!-- 1. Exclude Default Compiler -->
<execution>
<id>default-compile</id>
<phase>none</phase>
</execution>
<!-- 2. Compile without Mappers. -->
<execution>
<id>Compile without Mappers</id>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<excludes>
<exclude>**/**/mapper/**/*</exclude>
</excludes>
</configuration>
</execution>
<execution>
<!-- 3. Compile Mappers -->
<id>Compile Mappers</id>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<includes>
<include>**/**/mapper/**/*</include>
<include>${project.build.directory}/classes/**/*</include>
</includes>
<annotationProcessors>
<processor>org.mapstruct.ap.MappingProcessor</processor>
</annotationProcessors>
</configuration>
</execution>
</executions>
</plugin>
我正在做的是禁用默认编译,编译除我的 Mapstruct 映射器之外的所有源文件,然后编译 Mapstruct 映射器,包括之前编译的源代码。我是 gradle 的新手,不知道如何实现类似的目标。到目前为止我尝试过的内容如下:
task compileWithoutMapperClasses(type: JavaCompile) {
options.incremental = true
// Compile without Mappers
sourceSets.main.java.exclude '**/**/mapper/**/*'
}
task compileMapperClasses(type: JavaCompile) {
sourceSets.main.java.include '**/**/mapper/**/*'
sourceSets.main.java.include 'build/classes/**/*'
options.define(
compilerArgs: [
"-nowarn",
"-proc:only",
"-encoding", "UTF-8",
"-processor", "org.mapstruct.ap.MappingProcessor",
]
);
}
compileMapperClasses.dependsOn compileWithoutMapperClasses
compileJava.dependsOn compileWithoutMapperClasses
结果实际上是什么都没有被编译。我想这样做的原因是我想在我的项目中使用 lombok 和 mapstruct。
最佳答案
尝试
task compileMapperClasses(type: JavaCompile) {
includes '**/**/mapper/**/*'
includes 'build/classes/**/*'
options.define(
compilerArgs: [
"-nowarn",
"-proc:only",
"-encoding", "UTF-8",
"-processor", "org.mapstruct.ap.MappingProcessor",
]
);
}
有关更多信息,请遵循 JavaCompile 任务的配置 https://docs.gradle.org/current/dsl/org.gradle.api.tasks.compile.JavaCompile.html
关于maven - Gradle自定义编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42418450/