java - gradle 中的任务在编译前包含 java 类

标签 java gradle

我需要创建 Gradle 任务,它可以在 Gradle 构建之前替换 .java 文件。 Gradle 在 .war 文件中构建包应用程序。我需要在构建后替换字节码。 我尝试了 sourceSets Gradle 任务,但它只能排除文件。

sourceSets {
        main {
            java {
                exclude 'com/myapp/example/resource/impl/ResourceBundleImpl.java'
            }
        }
    }

但我还需要在同一位置包含文件。我如何使用 Gradle 做到这一点?

The directory to  file that I need to exclude: com/myapp/example/resource/impl/ResourceBundleImpl.java
The directory to file that I need to include: src/main/webapp/WEB-INF/my/ResourceBundleImpl.java

复制文件内容也是可行的解决方案。但是我怎样才能在编译之前做到这一点?

以下任务没有帮助,因为构建文件中有 .java 文件而不是 .classe 文件。

  task prepareSources(type: Copy) {
        from('src/main/webapp/WEB-INF/my')
        into('build/classes/java/main/com/myapp/example/resource/impl')com/myapp/example
    }

// Prepare sources, before compile
    compileJava {
        dependsOn prepareSources
    }

以下任务抛出: 任务:cdx-war:compileJava失败 错误:包 com.myapp.example.util 不存在

sourceSets {
    main {
        java {
            srcDir "$projectDir"

            exclude 'com/medtronic/diabetes/carelink/rbps/resource/impl/ResourceBundleImpl.java'

            include 'src/main/webapp/WEB-INF/my/ResourceBundleImpl.java'
        }
    }

最佳答案

我将需要替换的类放在一起,并向其中之一添加后缀,并在编译时替换此后缀:

   sourceSets {
        main {
            java {
                srcDirs = ["$buildDir\\generated-src"]
            }
        }
    }

    task copySourceSet(type: Copy) {

        println 'Change java class in patient-svc-war'

        from "$rootDir\\patient-svc-war\\src\\main\\java"
        into "$buildDir\\generated-src"

        from file("$rootDir\\patient-svc-war\\**_suffix.java")
        into "$buildDir\\generated-src"
        rename { String fileName ->
            fileName.replace("_suffix", "")
        }

        filter { line -> line.replaceAll('_suffix', '')}
    }

    compileJava.source "$buildDir\\generated-src"

    compileJava {
        dependsOn copySourceSet
    }

    compileJava.doLast {
        delete "$buildDir\\generated-src"
    }

关于java - gradle 中的任务在编译前包含 java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58952244/

相关文章:

gradle - Android Studio 1.0X上的Gradle配置

java - 如何对用户输入的平方和使用递归?

安卓NDK : How to build for ARM64-v8a with minimumSdkVersion = 19

android - 我如何获得最新的 Google Play 服务版本?

Java:ArrayList 瓶颈

java - Gradle 删除注释并重新格式化属性文件

gradle - 如何对 gretty 和 war 执行相同的资源过滤?

java - 如何让我的广告横幅出现在我的应用程序上而不带走整个应用程序?

java - 访问不同文件夹中的类

java - docx4j traversalutil 在段落节点中找不到 TextElements