我如何编写运行脚本(如“0”)的gradle构建任务;npm安装“;在与我的gradle生成文件不同的目录中?

我如何编写运行脚本(如“0”)的gradle构建任务;npm安装“;在与我的gradle生成文件不同的目录中?,gradle,npm,kotlin,Gradle,Npm,Kotlin,在一个项目中,我有两个文件夹,project/server和project/web project/server是带有build.gradle.kts文件的spring boot应用程序的根,而project/web是带有package.json脚本的react应用程序,例如npm start。我想创建一个自定义gradle任务,在project/server文件夹中运行“npm install”和“npm start”,但我在编写此任务时遇到了问题 我一直在遵循:并且在教程中说要运行的部分被绊

在一个项目中,我有两个文件夹,
project/server
project/web

project/server
是带有
build.gradle.kts
文件的spring boot应用程序的根,而
project/web
是带有
package.json
脚本的react应用程序,例如
npm start
。我想创建一个自定义gradle任务,在
project/server
文件夹中运行“npm install”和“npm start”,但我在编写此任务时遇到了问题

我一直在遵循:并且在教程中说要运行的部分被绊倒了:

// Task for installing frontend dependencies in web
task installDependencies(type: NpmTask) {
    args = ['install']
    execOverrides {
        it.workingDir = '../web'
    }
}

// Task for executing build:gradle in web
task buildWeb(type: NpmTask) {
    args = ['run', 'build:gradle']
    execOverrides {
        it.workingDir = '../web'
    }
}

// Before buildWeb can run, installDependencies must run
buildWeb.dependsOn installDependencies

// Before build can run, buildWeb must run
build.dependsOn buildWeb

我无法使用这些代码段,因为它们无法被Kotlin识别。

这是转换为Kotlin DSL的脚本:

import com.moowork.gradle.node.npm.NpmTask

// Task for installing frontend dependencies in web
val installDependencies by tasks.registering(NpmTask::class) {
    setArgs(listOf("install"))
    setExecOverrides(closureOf<ExecSpec> {
        setWorkingDir("../web")
    })
}

// Task for executing build:gradle in web
val buildWeb by tasks.registering(NpmTask::class) {
    // Before buildWeb can run, installDependencies must run
    dependsOn(installDependencies)

    setArgs(listOf("run", "build:gradle"))
    setExecOverrides(closureOf<ExecSpec> {
        setWorkingDir("../web")
    })
}

// Before build can run, buildWeb must run
tasks.build {
    dependsOn(buildWeb)
}
导入com.moowork.gradle.node.npm.NpmTask
//用于在web中安装前端依赖项的任务
val installDependencies by tasks.正在注册(NpmTask::class){
setArgs(listOf(“安装”))
setExecOverrides(closureOf{
setWorkingDir(“../web”)
})
}
//用于在web中执行build:gradle的任务
val buildWeb by tasks.正在注册(NpmTask::class){
//在运行buildWeb之前,必须先运行installDependencies
dependsOn(安装依赖项)
setArgs(listOf(“run”、“build:gradle”))
setExecOverrides(closureOf{
setWorkingDir(“../web”)
})
}
//buildWeb必须先运行,生成才能运行
任务.build{
dependsOn(buildWeb)
}

为了澄清,Groovy脚本工作正常,但您的问题是将Groovy转换为Kotlin,对吗?嘿@Slaw,我无法确认这些脚本是否工作,但我的主要问题是如何将其正确转换为Kotlin。谢谢你的提问!