我需要在gradle构建脚本中添加一个创建符号链接的命令。我知道那个安装了cygwin的人。问题出在export命令上。这是我到目前为止所得到的
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}
}
有没有标准的方法呢?
答案 0 :(得分:4)
每个任务提供的Ant构建器都有一个。看起来像一个解决方案,但正如评论中指出的那样,并不是真正的跨平台:
task createLink << {
ant.symlink(resource: "file", link: "link")
}
相反,你可以用Java调用NIO API,但是你需要1.7。看看吧 createSymbolicLink
答案 1 :(得分:3)
Gradle不提供用于创建符号链接的公共API。如果您的构建在JDK 7或更高版本下运行,您可以尝试使用JDK的符号链接API。否则,只要你能找出正确的命令,就应该可以用exec
来解决这个问题。
答案 2 :(得分:0)
在您的目标是创建可执行文件的符号链接的特殊情况下,有一个跨平台的解决方法,即创建一个将转发到目标的shell脚本:
forwarding_script_template
:#! /bin/bash
_DIR_=$(dirname "$'{'BASH_SOURCE[0]'}'")
"$_DIR_/"{0} "$@"
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();
}