Is there any way to automatically setting windows path in a string in groovy?

家住魔仙堡 提交于 2020-06-17 09:17:08

问题


My project root directory is:

D:/Project/Node_Project

I am using a gradle plugin to install nodejs temporarily in my project root directory so that some nodejs command can run in the project while the thoject builds. The plugin is as below:

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

So, nodejs is getting installed inside the project in the location:

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

Now, I am using a .execute(String[] "path to set at environment variable", String path of file to be executed which is in the project root directory) method to run a windows command with node dependency. Code below:

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

In the above .execute method, is there a way to auto-populate the "build/nodejs/node-v10.10.0-win-x64" part of the string instead of hardcoding it into the method? Something like:

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

Syntax of .execute method: https://docs.groovy-lang.org/latest/html/groovy-jdk/java/lang/String.html#execute(java.lang.String[],%20java.io.File)

All the codes are inside "build.gradle" file. Please help!


回答1:


I asked why you don't just write a task of type NodeTask, but I understand that you like to run a it in the background, which you can't do with that.

You could list the content of a directory and use that as part of the command. But you could also just grab it from the extension provided by the plugin.

This is not documented and it might break in future releases of the plugin, but you can do something like this (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) }
    }
}


来源:https://stackoverflow.com/questions/62382667/is-there-any-way-to-automatically-setting-windows-path-in-a-string-in-groovy

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!