构建脚本中的平台独立符号链接

Luk*_*don 3 windows symlink cygwin gradle

我需要向 gradle 构建脚本添加一个将创建符号链接的命令。我知道构建者已经安装了 cygwin。问题出在导出命令上。这是我到目前为止得到的

    if(OS == 'win32') {
        exec { commandLine "C:\\cygwin\\bin\\mintty.exe", "--hold always", "/bin/bash", "-l", "-e", "export", "CYGWIN=winsymlinks", "&&",  "-e",  "ln", "-s", link, file}
        //exec { commandLine "cmd", "/c", "mklink", link, file}
        //exec { commandLine "export", "CYGWIN=winsymlinks" }
        //exec { commandLine "C:\\cygwin\\bin\\ln.exe" , "-s", link, file}
    }
    else {
        exec { commandLine "ln", "-s", link, file}
    }
Run Code Online (Sandbox Code Playgroud)

有标准的方法吗?

Alp*_*par 6

Ant 构建器为每个任务提供一个。似乎是一个解决方案,但正如评论中指出的那样,它并不是真正的跨平台:

task createLink << {  
   ant.symlink(resource: "file", link: "link")
}
Run Code Online (Sandbox Code Playgroud)

相反,您可以在 Java 中调用 NIO API,但您需要 1.7。看一下 createSymbolicLink

  • 这与平台无关:`任务':createLink'执行失败。&gt; 无法启动 ln: java.io.IOException: 无法运行程序“ln”: CreateProcess error=2,系统找不到指定的文件`。当然,如果你的“PATH”上有来自 cygwin 或其他来源的“ln”,那就没有问题了。 (6认同)

Pet*_*ser 5

Gradle 不提供用于创建符号链接的公共 API。如果您的构建在 JDK 7 或更高版本下运行,您可以尝试 JDK 的符号链接 API。exec否则,只要你能找出正确的命令,应该也可以解决这个问题。

  • 与“JDK的符号链接API”我假设你的意思是“nio.file.Files”? (2认同)