我们正在使用windows、linux和solaris进行开发。目前,在windows上,我们使用windows shell和批处理(.BAT)脚本来运行与构建相关的脚本。我们使用subversion作为版本控制工具。
我们希望对bash脚本进行标准化,以便它们在Windows、Linux和solaris上都能正常工作。如果我想要将windows开发环境从CMD.EXE迁移到cygwin,我会遇到什么问题?
此外,我们目前正在使用Ant,但很快就会迁移到maven。eclipse是我们的开发环境。
如果有帮助的话,我们正在开发多线程服务器--该产品只能在solaris或linux(而不是windows)上运行。
谢谢,
发布于 2011-07-01 02:24:02
完全不使用shell脚本或批处理文件会更容易。Maven应该能够做你想放在脚本中的所有事情,而且它是跨平台的。
发布于 2011-07-01 01:57:34
只要您的cygwin脚本不需要任何特定于操作系统的程序,cygwin应该可以非常忠实地转换为Unix。更难的部分是像用户创建和目录权限这样的事情,假设你的脚本需要安装,而不仅仅是运行。
你最大的问题可能是目录。
/和ANT)中使用/分隔符作为标准化,在Java语言中,它将使您的工作更加轻松。/cygdrive/c表示法,而不是C:/。对于Eclipse,我还会在您的所有源代码中标准化UTF-8和Unix换行符。请参阅首选项->常规->工作区、首选项-> -> (CSS | HTML | JSP文件)和首选项-> -> XMLFiles。
最后要考虑的是如何在Cygwin中执行脚本。您可以有一个通过bash.exe调用脚本的批处理文件,也可以直接将cygwin放入您的路径中并直接执行bash。
发布于 2011-07-01 01:58:19
我这样做过一次,遇到了下面详细说明的几种问题。如果您使用健全性检查将所有环境声明和工具路径分离到一个文件中,并且明智地使用symlink,那么您应该能够在两个环境中维护一个构建。
Windows使用 :而不是作为路径分隔符
如果您的脚本使用从windows环境继承的PATH和CLASSPATH以及其他环境变量,那么假设它们可以在:上拆分/联接路径的脚本将会被混淆。
同样,包含分号的路径也很容易混淆。很少有脚本会这样做,因为分号在bash中是一个特殊的字符,但在调试时最好记住这一点。
Symlink类工作
我见过的一些构建系统会构建符号链接树。cygwin上的symlink在为cygwin编译的工具上工作得很好,但是如果你将一个symlink传递给一个java程序,并期望它自动取消引用它,那么你可能会感到惊讶。
没有单个根目录
精心编写的java程序可以解决没有单一/的问题,而编译/捆绑了cygwin的二进制文件可以解决这个问题,因为有假的/cygdrive/目录和假的/,但其他工具可能没有。
这对我来说不是一个真正的问题,因为构建脚本不应该从/遍历,但我提到这是另一个令人困惑的来源。
https://stackoverflow.com/questions/6538427
复制相似问题