2009-12-18 162 views
3

我正在編寫客戶端和服務器應用程序。現在我只是自己開發它,所以我將它編寫成一個Eclipse項目,並將其組織成Java包(org.myorg.server,org.myorg.client,org.myorg.networksystem等)。該項目部署到一個單獨的jar文件。然後,客戶端是一個小程序,所以我只需在jar文件內的org.myorg.client.ClientApplet中指向小程序代碼參數,而當我運行服務器時,它是一個命令行應用程序,我只是運行:客戶端/服務器項目結構,文件夾結構,構建文件等

Java的罐子MyJar.jar org.myorg.server.ServerApplication

好了,我要清理它的結構,提高了構建過程。我也想分開這些jar文件,這樣用戶就無法像現在一樣訪問內置在jar文件中的服務器副本。

我想使用持續集成服務器,如CruiseControl。如果我只需要將我的代碼檢入SVN存儲庫,那將非常酷;那麼CruiseControl服務器將獲取代碼,編譯它並將其打包到單獨的jar中,然後將服務器jar部署到我的專用服務器上並運行它,並將客戶端jar部署到我的web服務器上,以便更新applet。

我可以找出CruiseControl。我目前的問題是如何分離代碼。它很好地分離成客戶端和服務器軟件包,但是有一些共享軟件包,比如網絡協議。我應該將我的項目分成3個客戶端,服務器和通用項目嗎?我應該做點別的嗎?我正在考慮手動編寫Ant構建文件,但我真的很想留在Eclipse中。

如何最好地組織我的代碼以實現這些目標?

(順便說一句,對不起,如果這個問題是混亂的,我想我有一個很難用語言都圍繞我的頭紛飛的不同的問題)

回答

2

如果看來你已經知道你需要什麼這樣做,但是,如果你想CruiseControl的編譯和打包的代碼,那麼你將需要使用像螞蟻,或可能MavenGradle,或其他一些構建工具的工具,以擁有它你想要做什麼。即使你有一個構建工具包的代碼,你仍然可以使用Eclipse來構建和運行一切。

我不知道你是多麼熟悉的螞蟻,但使用Ant會給你需要定義過程的費用比建造過程中加以控制。像Maven和Gradle這樣的其他工具可以通過規定的方式來構建代碼,從而減少構建的配置數量,就Maven而言,我不確定是否可以改變它期望項目佈局的方式。另一方面,Gradle可以更改默認值。

至於組織,我想分離代碼到客戶端,服務器和客戶端和服務器共享的網絡協議,如你所提到的,將是一件好事。我不使用Eclipse,所以我不知道如何完成。您可以將客戶端和服務器打包到單獨的JARS中,同時使用網絡協議模塊中的類文件,也可以只製作三個JARS。

+0

我已經看到了Maven,決定它不適合我,現在我開心地使用Ant。我決定共享代碼很少,我只需要手工複製它們之間的項目,所以我有兩個獨立的項目。我在學校和學習Ant之間一直如此肆意,以至於我還沒有把它們加載到Eclipse中,但我沒有預見到任何困難。 – Ricket 2010-01-13 15:32:20

3

你是在正確的軌道與您的項目分割成3個獨立的項目上 - 你需要1個客戶,1個服務器和1個共同的。

您可以在Eclipse中爲每個項目定義項目間依賴關係 - 如果右鍵單擊該項目,它將位於由「configure build path」選項啓動的對話框中。

您應該研究編寫ANT文件來處理構建 - 稍後插入CruiseControl會更容易。

0

我認爲你的問題非常好。
我建議看看maven。它專門設計用於提供通用的最佳實踐工作流程,包括開發,測試和部署階段。即使你最終不使用maven,它也可能會給你一些關於項目結構的想法。
Eclipse與ant有很好的集成,所以您可以使用ant來構建/部署您的項目,並仍然保留在Eclipse中。
我絕對建議將你的代碼分成幾個Eclipse項目。這將強制執行正確的依賴關係:您可以確保您的客戶端代碼可以使用您的通用代碼,並且您的服務器代碼可以使用您的通用代碼,但通用代碼不能使用其他兩種通用代碼,並且類似地,服務器可以不使用客戶端代碼。

0

對於大型項目,最好爲每個客戶端,服務器和公共項目分別安裝Eclipse項目。我認爲,對於一個小項目來說,這將是矯枉過正的:在這種情況下,我會將它保留爲一個Eclipse項目,但編寫自定義Ant目標(全部在同一個build.xml文件中)來處理客戶端與服務器罐的包裝。通用代碼只會出現在兩個罐子中。

但是,是的,你將不得不做一些手動的Ant工作,但這是一個很好的技能,無論如何。