gpt4 book ai didi

java - 如何在构建时在Gradle中运行控制台命令?

转载 作者:行者123 更新时间:2023-12-03 03:16:51 25 4
gpt4 key购买 nike

我目前正在一个项目中,该项目在Rust中具有 native 组件,而在Java组件中具有。主要的构建系统是Gradle,我希望Gradle每次在构建时都调用Rust构建系统(Cargo),以确保存在正确的共享库以供JNI使用,并根据需要重新编译这些库。经过研究,我想到了这一点:

task buildRustDebug(type:Exec){
workingDir './native'
commandLine 'cargo', 'build'
}

task buildRustRelease(type:Exec){
workingDir './native'
commandLine 'cargo', 'build', '--release'
}

task buildRust(){
dependsOn 'buildRustDebug'
dependsOn 'buildRustRelease'
}

build dependsOn 'buildRust'
除最后一行与 build任务建立依赖关系外,所有其他方法都工作正常。当出现此行时,当我尝试运行任何任务时会出现以下错误:
Build file '<censored>' line: 23

A problem occurred evaluating root project '<censored>'.
> Could not get unknown property 'dependsOn' for root project '<censored>' of type org.gradle.api.Project.
直到我的主文件中的代码运行之后, build任务才不存在。我该如何完成我想要的?请注意,此代码位于多项目Gradle构建的根项目中。

最佳答案

您对这个问题的评论是正确的。但是只是给您一些背景信息(并可以将问题标记为已解决):
Gradle使用Groovy或Kotlin作为脚本语言。您正在使用Groovy。
当您编写dependsOn 'buildRustDebug'时,您将使用String参数'buildRustDebug'调用一个名为dependsOn的方法。之所以有效,是因为在Groovy中,method parenthesis are optional。因此,它与dependsOn('buildRustDebug')相同。
当您编写build dependsOn 'buildRust'时,在语法上是不正确的。您要使用参数调用dependsOn对象上的build方法。尝试以下方法:

build.dependsOn 'buildRust' // Or
build.dependsOn('buildRust')
注意方法调用之前的点。
另一件事是 build是依赖关系树中的“最外部”任务之一,它本身依赖于其他任务,例如 compileJavatest。如果要在组装或测试应用程序之前确保Rust项目已构建且可用,则可能需要将依赖项稍微向下移动一棵树。否则,您冒着 buildRust任务是它做的最后一件事的风险,而它可能应该是它做的第一件事。

关于java - 如何在构建时在Gradle中运行控制台命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63608261/

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