3

我需要在 gradle build 脚本中添加一个创建符号链接的命令。我知道构建安装了 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}
    }

有标准的做法吗?

4

3 回答 3

4

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

task createLink << {  
   ant.symlink(resource: "file", link: "link")
}

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

于 2013-08-02T12:01:19.913 回答
4

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

于 2013-06-03T12:26:44.593 回答
0

在您的目标是创建指向可执行文件的符号链接的特殊情况下,有一个跨平台解决方法,即创建一个将转发到目标的 shell 脚本:

文件forwarding_script_template

#! /bin/bash

_DIR_=$(dirname "$'{'BASH_SOURCE[0]'}'")

"$_DIR_/"{0} "$@"

在 Gradle 构建文件中:

String templateScript = new File(projectDir, 
   "gradle/forwarding_script_template.sh").text;
String script = MessageFormat.format(templateScript, target);
writeFile(destination, script);
destination.setExecutable(true);

writeFile方法等于:

void writeFile(File destination, String content) {
       Writer writer = new FileWriter(destination);
       writer.write(content);
       writer.close();
}
于 2018-01-20T18:13:50.420 回答