2011-06-30 34 views
0

我們正在使用windows,linux和solaris進行開發。目前,在Windows上,我們使用Windows Shell和批處理(.BAT)腳本來運行與構建相關的腳本。我們使用Subversion作爲我們的版本控制工具。使用cygwin進行java開發的一些小問題?

我們希望在bash腳本上實現標準化,以便它們在Windows,Linux和solaris上運行相同。 如果我想將Windows開發環境從CMD.EXE移動到cygwin,我可以期待什麼問題?

此外,我們目前正在使用Ant,但很快就會轉向maven。 eclipse是我們的開發環境。

如果它有幫助,我們正在開發多線程服務器 - 產品僅在solaris或linux(不在Windows)上生產。

謝謝

+0

爲什麼不使用像gradle這樣的工具來處理所有的腳本,它是平臺獨立的? –

回答

2

只要你的cygwin腳本不需要任何操作系統的具體方案,cygwin的應該很忠實地轉換爲Unix。更難的部分將是用戶創建和目錄權限等事情,假設您的腳本需要安裝,而不僅僅是運行。

你最大的問題可能是目錄。

  1. 標準化使用/分離 在所有的腳本(bash和ANT) 在Java中,它會讓你的生活變得更輕鬆。 Java上的Windows (包括ANT)足夠智能以便 正確解析類似C:/Program Files/myprogram的內容。
  2. 如果 可能,請避免使用空格的目錄名稱。
  3. 在您的 腳本中使用cygwin /cygdrive/c 表示法而不是C:/

對於Eclipse,我還將標準化所有源代碼中的UTF-8和Unix換行符。請參閱首選項 - >常規 - >工作區,首選項 - > Web - >(CSS | HTML | JSP文件)和首選項 - > XML - > XMLFiles。

最後的考慮是你想如何在Cygwin中執行腳本。你可以有一個通過bash.exe調用腳本的批處理文件,或者你可以將cygwin放入你的路徑並直接執行bash。

2

我這樣做了一次,並遇到了下面詳述的幾種麻煩。如果您將所有的環境聲明和工具路徑分成一個文件並進行完整性檢查,並且在使用符號鏈接時明智,您應該能夠在兩種環境中維護一個構建。

Windows使用;作爲路徑分隔符,而不是:

如果你的腳本中使用PATH和CLASSPATH,並從Windows環境中繼承其他環境變量,那麼假設腳本,他們可以分裂/上:加入路徑會感到困惑。

同樣,包含分號的路徑也很混亂。由於分號無論如何都是分號中的特殊字符,因此很少有腳本會這樣做,但在調試時保留在頭腦中是很好的做法。

符號鏈接樣的工作

我見過建立符號鏈接的樹木有些構建系統。 cygwin上的符號鏈接可以和爲cygwin編譯的工具一起工作,但如果你將一個符號鏈接傳遞給一個java程序,並期望它自動解引用它,那麼你可能會感到驚訝。

沒有單一的根目錄

精心編寫的Java程序可以解決存在的問題沒有單一的/和二進制編譯/使用Cygwin捆綁可以處理,因爲有假/cygdrive/目錄和假/但其他工具可能不會。

這對我來說不是一個真正的問題,因爲構建腳本不應該從/遍歷,但我提到它是另一個混​​淆源。

3

根本就不用shell腳本或批處理文件。 Maven應該能夠完成你在腳本中所做的一切,而且它是跨平臺的。