gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 20:16:47 24 4
gpt4 key购买 nike

我需要创建 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com