【问题标题】:Is there any way to automatically setting windows path in a string in groovy?有没有办法在groovy的字符串中自动设置windows路径?
【发布时间】:2020-06-15 06:38:09
【问题描述】:

我的项目根目录是:

D:/Project/Node_Project

我正在使用 gradle 插件在我的项目根目录中临时安装 nodejs,以便在构建 thoject 时可以在项目中运行一些 nodejs 命令。插件如下:

plugins {
    id "com.github.node-gradle.node" version "2.2.4"
}
node {
    download = true
    version = "10.10.0"
    distBaseUrl = 'https://nodejs.org/dist'
    workDir = file("${project.buildDir}/nodejs")
}

所以,nodejs 正在安装在项目中的位置:

D:/Project/Node_Project/build/nodejs/node-v10.10.0-win-x64

现在,我正在使用.execute(String[] "path to set at environment variable", String path of file to be executed which is in the project root directory) 方法运行具有节点依赖性的 windows 命令。代码如下:

cmd = "node connect.js"
def process = cmd.execute(["PATH=${project.projectDir}/build/nodejs/node-v10.10.0-win-x64"],null)

在上面的 .execute 方法中,有没有办法自动填充字符串的 "build/nodejs/node-v10.10.0-win-x64" 部分,而不是将其硬编码到方法中? 比如:

def process = cmd.execute(["PATH=${project.projectDir}/.*"],null)

.execute 方法的语法: https://docs.groovy-lang.org/latest/html/groovy-jdk/java/lang/String.html#execute(java.lang.String[],%20java.io.File)

所有代码都在“build.gradle”文件中。请帮忙!

【问题讨论】:

  • 是否有理由不使用NodeTask 类型来运行您的脚本?

标签: java node.js gradle groovy build.gradle


【解决方案1】:

我问你为什么不只编写NodeTask 类型的任务,但我知道你喜欢在后台运行它,而你不能这样做。

您可以列出目录的内容并将其用作命令的一部分。但你也可以从插件提供的扩展中获取它。

这没有记录在案,它可能会在插件的未来版本中中断,但您可以执行以下操作(Groovy DSL):

task connectJS {
    dependsOn nodeSetup
    doFirst {
        def connectProcess = "$node.variant.nodeExec $projectDir/src/js/connect.js".execute()
        // Blocking readers (if async, pipe to a log file instead)
        connectProcess.in.eachLine { logger.info(it) }
        connectProcess.err.eachLine { logger.err(it) }
    }
}

【讨论】:

  • 我明白你的意思.. 但我没有使用节点任务,因为以下问题:stackoverflow.com/q/62304898/12930288 感谢您与我们联系!
  • 抱歉,我可能不太清楚。这不是使用 node 任务 - 它使用 nodeSetup 任务下载 Node,然后使用 Groovy 进程构建器使用来自 setup 任务的 node 可执行文件 path 执行命令。这可以在后台执行(如果您从示例中删除记录器行)。
  • 谢谢.. def connectProcess = "$node.variant.nodeExec $projectDir/connect.js".execute() 这解决了我的目的.. :)
猜你喜欢
  • 2023-04-05
  • 1970-01-01
  • 2014-11-19
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
相关资源
最近更新 更多