maven - Gradle自定义编译

标签 maven gradle compilation mapstruct

我想在 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/

相关文章:

java - Gradle 子项目配置未通过 configureondemand=true 调用

gradle - 在 Gradle 中扩展属性会破坏 LDAP 配置

java - 如何修复此代码中的导入错误?

编译一个简单的C程序以使用Pixie进行渲染(开源renderman)

java - 我如何在intellij idea插件开发中获取maven本地存储库

Spring Boot-绝对 uri : http://java. sun.com/jsp/jSTL/core 无法在 web.xml 或 jar 文件中解析

Android Studio build.gradle - 无法解析符号 'android'

java - 无法使用maven构建项目

java - 在 Mojo 中使用 @requiresDependencyResolution 时调试 ClassNotFoundException 抛出我的 Maven Mojo

c++ - 将静态库链接到 Boost Python(共享库)- 导入错误