我想知道是否有一些關於如何組織更大的Java項目的推薦閱讀,最佳實踐或意見。如何組織更大的Java項目 - 項目與命名空間?
我做了一些觀察,有些人把所有東西都分解成項目(即模塊)並創建許多共享依賴關係網絡的項目。這具有編譯速度通常超快的優點,但是當項目變大時,沒有人知道什麼取決於什麼以及爲什麼。不是在談論依賴庫,版本衝突& co。
另一種方法是隻有幾個項目,如前端,後端......。命名空間完成這項工作。
任何意見,任何人都可以推薦進一步閱讀?
我想知道是否有一些關於如何組織更大的Java項目的推薦閱讀,最佳實踐或意見。如何組織更大的Java項目 - 項目與命名空間?
我做了一些觀察,有些人把所有東西都分解成項目(即模塊)並創建許多共享依賴關係網絡的項目。這具有編譯速度通常超快的優點,但是當項目變大時,沒有人知道什麼取決於什麼以及爲什麼。不是在談論依賴庫,版本衝突& co。
另一種方法是隻有幾個項目,如前端,後端......。命名空間完成這項工作。
任何意見,任何人都可以推薦進一步閱讀?
一個非常大的項目需要有跟蹤所有使用的庫及其他依賴的一些方式。事實上這樣做的標準是Maven。這絕對是開始跟蹤應用程序內容的最佳方式。
然後你可以決定如何分割你的應用程序。基本上,你要做的是將應用程序分解爲完整的功能塊。例如,如果您的網站有聯繫表單,照片庫,購物車和論壇,則可以將項目拆分爲包含每個不同模塊的部分。
Maven對於項目管理非常出色,但他有一個現有項目,而將他的項目投入Maven的成本可能會高一點。如果他能做到,太棒了!如果他只需要依賴關係跟蹤(不需要重新設計他的構建/部署以適應Maven模型),Apache的常春藤更有意義。 –
非常真實。但是,我沒有得到他所問的關於現有項目的印象,而是總體最佳實踐。如果你從頭開始,那麼我會說Maven。 – JCab
Maven是比常青藤更完整的解決方案,所以這就是爲什麼我會把Maven放在常春藤上。在Apache網站上:「首先,最重要的不同之處在於它們並不是同一種工具,Apache Maven是一個軟件項目管理和理解工具,而Apache Ivy只是一個依賴管理工具,與高度集成Apache Ant™是流行的構建管理工具,所以也許有一個比較有趣的比較可以比較Apache Ant + Ivy和Apache Maven,但這超出了本頁的範圍,它只關注依賴管理。 – JCab
只要你開始將一個大項目分割成更小的項目,就會遇到很多你通常不需要考慮的依賴關係跟蹤。你可以自己管理它,或者你可以使用已經處理了很多核心問題的軟件。
I would recommend Apache's Ivy。它與Apache的Ant很好地集成,並具有一個單獨的配置文件(可以檢入)來跟蹤每種構建所需的內容。
Apache的Maven是另一個不錯的選擇;然而,它比Apache的常春藤做得更多。有時候,「更多」意味着你減少了反正會做的事情,有時候「更多」意味着你正在做(並配置)以前沒有做過的事情。根據您的練習對Maven的適合程度,遷移到Maven可能很容易或很難。
此外,使用Ivy,您可以設置您自己的「許可」jar文件的私有存儲庫,從而使代碼審計變得更容易。基本上,重新配置常春藤不從網上拉,而是從本地存儲庫中取出,然後控制對存儲庫的訪問,以僅允許經過審查的jar文件具有可接受的許可。
一旦您安裝了軟件,就可以將項目拆分爲更小的部分。這將允許你做正確的事情(如果你的項目傾向於小分解)而不是權宜之計(幾個大塊在分解可維護性方面可能並不真正購買你)。至於在哪裏做削減,這很大程度上取決於您的應用程序的具體情況。
許多小零件往往容易讓一個新人一個接一個消化。他們還讓人們考慮將功能添加到項目中的位置;然而,解開和分離所有組件需要花費時間和精力。好的一面是,測試和驗證較小的東西通常更容易,不利的一面是,將一個龐大的責任集合分解成許多小的,集成度很高但功能完全不同的單元是一條更長的路。
好運
其實,你會想要利用項目和命名空間。
命名空間是區分代碼在代碼級別具有什麼用途的重要工具。無論哪個課程來自哪個項目,該軟件包都應該讓我對其目的有所瞭解。
在更高層次上,通過將代碼分離到項目中來更容易地管理構建和開發環境。例如,如果您正在開發一個UI,爲什麼您需要將數據庫代碼加載到IDE中?這只是在你的工作空間中更加混亂。這也使得在不同項目之間共享通用功能變得更加簡單。這當然會導致需要某種形式的依賴管理,其中任何一種提到的工具,如Maven或Ivy都可以滿足。
雖然是一個重要的說明。不要在項目之間使用拆分包。如果你或任何曾經使用過你的代碼的人都希望在OSGi環境中這樣做,這會導致惡夢。所以,你的命名空間在一個項目中應該是唯一的,儘管它們應該與其他相關項目共享一個通用根。
我們使用Maven來管理依賴和獨立的項目。將源代碼分隔成可用的塊,並確保我們沒有庫地獄。 – mcfinnigan