【发布时间】:2017-10-31 12:06:04
【问题描述】:
我有一个 Gradle 构建脚本,它必须在任务中调用 Scala(或 Java)方法。
目前,我有 src/.../utils/lib.java
这个文件有一个简单的类和一个我想在 build.gradle 脚本中调用的静态方法。
但我不知道如何导入此文件并使用此方法。
【问题讨论】:
我有一个 Gradle 构建脚本,它必须在任务中调用 Scala(或 Java)方法。
目前,我有 src/.../utils/lib.java
这个文件有一个简单的类和一个我想在 build.gradle 脚本中调用的静态方法。
但我不知道如何导入此文件并使用此方法。
【问题讨论】:
这实际上取决于您的 gradle 脚本的设置方式以及您要完成的工作。没有看到它,很难给出具体的包罗万象的回应。这是我所知道的两种最常见的方法,它们可以让您在 gradle 脚本中执行代码。
1) 直接回答你的回复,要执行一个静态java方法,需要先编译。如果您的构建的其余部分需要执行此操作,那么您需要将其构建为多项目构建。
https://docs.gradle.org/current/userguide/multi_project_builds.html
假设你有
apply plugin: 'java'
然后,您将能够使用包含您的静态方法的类创建一个 jar,并创建一个您可以执行的类型为 Exec 或 JavaExec 的任务,该任务将执行此 jar。
2) 更简单且不太复杂的方法:
由于 gradle 允许您直接执行 groovy 代码,如果可能,我会尝试将逻辑从静态方法移动到 gradle 文件中。您可以参考 org.gradle.api 上的对象和方法来自定义很多构建操作。
https://docs.gradle.org/current/javadoc/
这是我的 build.gradle 中的一个示例,用于在编译步骤之后将资源文件复制到构建目录中,然后再将其打包到 jar 中。
compileJava {
doLast {
def f = file("src/main/java/resources/db/migration")
println "Copying SQL from {$f} to {$buildDir/db/migration}"
copy {
from file(f)
into file("$buildDir/db/migration")
include('*.sql')
}
}
}
这可能不是您正在寻找的简单解决方案,但我希望它能给您一些好的指导。
【讨论】: