我们正在使用windows,linux和solaris进行开发。目前,在Windows上,我们使用Windows shell和批处理(.BAT)脚本来运行与构建相关的脚本。我们使用subversion作为我们的版本控制工具。
我们希望对bash脚本进行标准化,以便它们在Windows,Linux和solaris上运行相同。 如果我想将Windows开发环境从CMD.EXE移动到cygwin,我可以期待什么问题?
此外,我们目前正在使用Ant,但很快就会转向maven。 eclipse是我们的开发环境。
如果它有帮助,我们正在开发多线程服务器 - 该产品仅在solaris或linux(不在Windows上)上运行。
谢谢,
答案 0 :(得分:3)
根本不使用shell脚本或批处理文件更容易。 Maven应该能够完成您在脚本中放置的所有内容,而且它是跨平台的。
答案 1 :(得分:2)
只要您的cygwin脚本不需要任何特定于操作系统的程序,cygwin就应该非常忠实地转换为Unix。假设您的脚本需要安装,而不仅仅是运行,那么更难的部分将是用户创建和目录权限之类的东西。
你最大的问题可能是目录。
/
分隔符进行标准化
在你的所有脚本中(bash和ANT)
在Java中和,它将使您的生活更轻松。 Windows上的Java
(包括ANT)非常聪明
正确解析C:/Program
Files/myprogram
之类的内容。/cygdrive/c
你的符号中的符号而不是C:/
脚本。对于Eclipse,我还会在所有来源中标准化UTF-8和Unix换行符。请参阅首选项 - >一般 - >工作区,首选项 - >网络 - > (CSS | HTML | JSP文件)和首选项 - > XML - > XMLFILES。
最后一个考虑因素是你想如何在Cygwin中执行脚本。您可以拥有一个通过bash.exe调用脚本的批处理文件,也可以将cygwin放在路径中并直接执行bash。
答案 2 :(得分:2)
我这样做了一次并遇到了下面详述的几种麻烦。如果您使用完整性检查将所有环境声明和工具路径分离到一个文件中,并且您在使用符号链接时明智,那么您应该能够在两个环境中维护一个构建。
Windows使用;
作为路径分隔符而不是:
如果您的脚本使用PATH和CLASSPATH以及从Windows环境继承的其他环境变量,那么假设它们可以在:
上拆分/加入路径的脚本将会混淆。
同样,包含分号的路径令人困惑。很少有脚本可以这样做,因为分号在bash中是一个特殊字符,但是在调试时保持在你的脑海中是很好的。
符号链接工作
我见过的一些构建系统构建了符号链接树。 cygwin上的符号链接可以很好地使用为cygwin编译的工具,但如果你将符号链接传递给java程序并期望它自动取消引用它,那么你可能会感到惊讶。
没有单个根目录
精心编写的java程序可以解决没有单/
的问题,并且与cygwin编译/捆绑的二进制文件可以处理,因为有假/cygdrive/
目录和假/
但是其他工具可能不会。
这对我来说不是一个真正的问题,因为构建脚本不应该从/
遍历,但我提到它是另一个混乱的来源。