java - 具有编译依赖项的 Gradle 任务
问题描述
我想根据每个 Gradle 任务的 java 类中的注释生成一个文本文件。
我找到了一些参考资料,例如https://mrhaki.blogspot.com/2014/09/gradle-goodness-running-groovy-scripts.html:
task runScript(type: JavaExec) {
main = 'com.mrhaki.CurrentDate'
classpath = sourceSets.main.compileClasspath
}
但在这里我必须使用我不想要的外部文件。
我尝试在build.gradle
文件中定义类:
class MyScript {
def call() {
println ":: Vertx version : $io.vertx.core.impl.launcher.commands.VersionCommand.version"
}
}
task runScript(type: JavaExec) {
main = 'MyScript'
classpath = sourceSets.main.runtimeClasspath
}
但无法解决:
> Task :runScript FAILED
Error: Could not find or load main class MyScript
我可以使用一些解决方法将脚本作为 args 中的字符串传递,例如
task runGroovyScript(type: JavaExec) {
classpath = configurations.groovyScript
main = 'groovy.ui.GroovyMain'
args '-e', "println 'Hello Gradle!'"
}
但这会非常难看。
如何在 Gradle 任务中运行内联 groovy 代码?
解决方案
您可以在任务的 adoFirst
或doLast
闭包中实现任何您想要的 Groovy 代码:
task doSomething {
doFirst {
// any Groovy code you want
println ":: Vertx version : $io.vertx.core.impl.launcher.commands.VersionCommand.version"
}
}
或者,您可以创建实现所需行为的自定义任务类型:
class MyTask extends DefaultTask {
@TaskAction
def doSomething() {
println ":: Vertx version : $io.vertx.core.impl.launcher.commands.VersionCommand.version"
}
}
task doSomething(type: MyTask)
推荐阅读
- ruby-on-rails - 为什么 Ruby on Rails Azure Web App 教程无法部署到远程?
- java - 为什么 Files.createSymbolicLink() 会为链接参数抛出 java.nio.file.NoSuchFileException?
- javascript - axios请求中将多个文件作为对象提交
- reactjs - 单元测试使用反应测试库来测试组件
- python - 不可能创建一个新列python
- c++ - 在字节数组中连接结构
- c++ - SIMD 256i 仅处理 4 个元素
- mysql - 将运行 RHEL 7 和 MySQL 5.7 的服务器升级到 RHEL 8
- kubernetes - Flannel 支持多播
- java - java.lang.IllegalStateException:在视图类上定义的 android:onClick 属性的父或祖先上下文中找不到方法 count(View)