我在作業中繼承了一個 Java (Maven) 專案。我不是 Java 開發人員,但該專案現在是我的了。當我克隆(a la git clone)存盤庫時,我注意到在任何 .java 檔案出現之前,檔案夾結構變得非常深。例如,檔案夾結構如下所示:
project_name
.git
.idea
src/
main/
java/
org/
bah/
co/
lab/
zeus/
apimanager/
RestClient.java
我四處搜索,試圖找出檔案夾結構如此深入的原因。經過對 Maven 的一些研究,我的理解是默認結構以/src/main/java開頭。所以,我很好奇為什么以前的(現在是單獨的)開發人員會像這樣構建這個 repo(以及許多其他的)。為了不征求意見,請告訴我:這個專案的結構是不是有技術上的原因?該檔案apimanager夾之外實際上沒有其他 .java 檔案,那么將所有內容埋藏得如此深的技術原因是什么?
uj5u.com熱心網友回復:
Maven 是一個對事情應該去哪里有一定意見的工具;默認配置。你不必須遵循它,但不遵循此默認配置有三個顯著缺點:
- 然后你必須配置 maven 來告訴它你所做的替代選擇。Maven 并沒有讓這一切變得容易。
- 其他 Java 程式員通常采用默認值。如果你有充分的理由偏離,那就去吧,但“我不喜歡它”不是一個很好的理由,因為它會毫無意義地增加學習曲線。
- Maven 開發人員出于某種原因選擇此結構作為默認結構。如果您認為這是一個愚蠢的理由,那當然是可能的,您甚至可能是對的,但是您正在使用由那些人撰寫的構建工具(根據您的說法,這本書的封面有點)使笨蛋關于合理默認值的選擇。那不是一個好地方。
解釋每一層:
src
表示這些是源檔案:編譯和生成的東西不應該在這里,整個 src樹應該在版本控制中。與例如bin或build包含構建doc工件、包含檔案以及誰知道存盤庫的其他相關部分需要哪些其他目錄形成對比。
main
一個專案可以由多個可單獨構建的人工制品和“種類”的產品組成。例如,大多數專案都包含一堆僅用于測驗目的的代碼(單元測驗)。他們住在src/test. 核心產品位于main. 例如,您還可以為安裝程式(可能src/installer)、構建插件或需要首先構建的注釋處理器提供單獨的源,然后在編譯main專案時需要在類路徑上,等等。
java
有分裂語言專案這樣的事情,其中??一些是用語言 A 撰寫的,一些是用語言 B 撰寫的。就其價值而言,我認為這一層是糟糕的設計;以 結尾的檔案.java給出了“編譯它”的方式,這適用于幾乎每個需要應用編譯器的源檔案:擴展名與檔案夾名稱一樣多java。為了向您展示一個共同的對比:許多專案具有src/main/resources以及src/main/java: 資源通過簡單地復制來“編譯”:假設您的應用程式有一個文本檔案,其中包含美國所有州的串列以及每個州使用的所有郵政編碼。或png帶有 GUI 應用程式圖示影像的檔案。jar檔案),但要“編譯”它們,您只需.. 復制它們,您不必運行javac來執行此操作。這就是這個級別的內容:應該使用什么工具將源檔案轉換為可分發的方面?
co/lab/zeus/apimanager
這與 java 包結構匹配。這實際上是一個單獨應用的要求javac。使用如此深度嵌套的包結構的原因僅僅是因為包充當命名空間:如果有一個完全限定的名稱沖突,一切都會崩潰:Java 根本無法處理這個。因此,Java 程式員通過使用“反向域名”結構來確保此類沖突永遠不會發生:如果您擁有該zeus.lab.co域,您會將您的專案放在該包中,從而確保除了團隊中共享該服務器控制權的其他人之外沒有其他人可能會發生沖突(對于那些:他們在你的團隊中,與他們交談以避免沖突)。例如,有 3 個不同的開源 Java 專案都稱為 spark。如果他們都走了package spark;(因此,src/main/java/spark/Main.java作為示例檔案),然后對于每個 java 專案,您將選擇以下 3 個專案之一:另外 2 個您永遠無法在此專案中使用。苛刻且毫無意義,這就是為什么(幾乎)所有 java 庫都使用反向域名作為根包名,然后 maven 在其目錄結構中遵循這個包名,因為javac如果你不這樣做,生活會變得非常困難。
這使我們能夠project_name/src/main/java.
org/bah
你編造了夸張。沒有人在zeus.lab.co.bah.org. 但如果他們這樣做了:與決定將域名的大佬分配給團隊的管理層交談。這取決于他們,而不是這個專案的作者。
uj5u.com熱心網友回復:
Maven的是一個構建和依賴管理工具,可幫助開發應用程式和管理開發程序的所有生命周期,如build,compilation,packaging,testing等... throught命令列。關于maven專案的結構有一個約定:
└───maven-project
├───pom.xml
├───README.txt
├───NOTICE.txt
├───LICENSE.txt
└───src
├───main
│ ├───java
│ ├───resources
│ ├───filters
│ └───webapp
├───test
│ ├───java
│ ├───resources
│ └───filters
├───it
├───site
└───assembly
目前重要的是要了解每個檔案和檔案夾的作用以及如何使用maven 命令。
pom.xml:這個檔案包含你的專案的結構和資訊,以及你的依賴項(外部 jars)。該檔案由您在其中執行的命令使用maven
src/main/java:包含您packages和您的源代碼。
src/test/java : 包含您的測驗代碼
在您的情況下,您的專案結構取決于包名稱。在這里,名稱是org.bah.co.lab.zeus.apimanager并且在Javaapackage中實際上是一組嵌套的檔案夾。有一個package命名約定,但在大多數情況下,您可以選擇要使用的名稱。
當您使用時IntelliJ IDEA,您可以使用選項顯示您的包Compact Middle Packages。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/336828.html
上一篇:如何將Maven存盤庫組態檔重置為特定專案的默認值?
下一篇:RubyOOP-實體方法
