gradle - 如何编写一个 gradle 构建任务,在与我的 gradle 构建文件不同的目录中运行诸如 "npm install"之类的脚本?

标签 gradle npm kotlin

在单个项目中,我有两个文件夹:project/serverproject/web

project/server 是我的 Spring Boot 应用程序的根目录,其中包含 build.gradle.kts 文件,而 project/web 是使用我的 package.json 脚本对应用程序进行 react ,例如 npm start。我想创建一个在 project/server 文件夹中运行“npm install”和“npm start”的自定义 gradle 任务,但我在编写此任务时遇到问题。

我一直在关注:https://karl.run/2018/05/07/kotlin-spring-boot-react/我被教程中说要运行的部分绊倒了:

// 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)
}

关于gradle - 如何编写一个 gradle 构建任务,在与我的 gradle 构建文件不同的目录中运行诸如 "npm install"之类的脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56719661/

相关文章:

javascript - 1.3版本中日期格式与1.2版本不同

java - 如何在 graphql-java-tools Resolver 中 @Autowire JPA 存储库

generics - 为什么我不能在这个 Rx 转换器中使用接口(interface)作为泛型类型?

gradle - 无法为@higherkind 和@extension 生成对象

Gradle exec 任务返回非零退出值并使构建失败但我不想失败而是执行另一个任务

android - Gradle 不会自动将 jar 添加到项目中

android - res/xml下的文件是否通过gradle合并?

node.js - Docker:未找到 npm

node.js - 无法在 Zeit 中部署 Meteor 应用程序,Object.getOwnPropertyDescriptors 不是函数

java - 修改匿名函数以在 Kotlin 中调用另一个匿名函数