在用java編寫的軟件項目中,您經常擁有資源,這些資源是項目的一部分,應該包含在類路徑中。例如一些模板或圖像,應該可以通過類路徑(getResource)訪問。這些文件應該包含在生成的JAR文件中。如何組織您的java-project中類路徑中可用的非源資源?
很明顯,應將這些資源添加到修訂控制系統。但是在哪個目錄中放置這些文件?與java-source-files並行,或者在另一個目錄中也可以重現所需的包結構?
在用java編寫的軟件項目中,您經常擁有資源,這些資源是項目的一部分,應該包含在類路徑中。例如一些模板或圖像,應該可以通過類路徑(getResource)訪問。這些文件應該包含在生成的JAR文件中。如何組織您的java-project中類路徑中可用的非源資源?
很明顯,應將這些資源添加到修訂控制系統。但是在哪個目錄中放置這些文件?與java-source-files並行,或者在另一個目錄中也可以重現所需的包結構?
我更喜歡你的後者解決方案:一個單獨的目錄,模仿源代碼的包結構。這樣他們就不會破壞你的源代碼,而是緊挨着打包好的JAR文件中的已編譯類文件。
就個人而言,如果它們與代碼的特定部分密切相關,並且它們不是太多,我寧願將它們與源代碼放在一起。
但是,如果這些文件具有自己的組織結構,或者如果有成百上千的文件很難在其中找到源代碼,我會將它們分開。
Maven將它們放到src/main/resources /中(Java代碼將轉到src/main/java /)。主要原因是Maven可以用各種語言編譯代碼,並且將它們分開以使一個編譯不會被另一個文件所迷惑。
在資源的情況下,Maven會在它們被添加到Jar之前替換它們中的變量,因此它們也是「編譯」源。
這取決於您的喜好。將它們與源代碼文件混合在一起會使重構變得更容易(因爲源文件會隨着源文件而移動),但只有少數圖標,圖像和本地化文件會讓文件變得非常容易混亂。
與今天的工具,它也並不重要。無論您使用Eclipse,Netbeans還是其他工具,它們都允許您使用與源代碼不同的佈局的二進制包。所以最後你可以像你想的那樣做。
就我個人而言,我儘量避免將資源與資源混合,因爲我通常很少更改資源,但源代碼非常頻繁。
如果您的構建工具不會感到困惑,可以將這些東西放在類路徑中。 Eclipse不會嘗試編譯你的jpeg,Ant也不會,所以沒有什麼值得擔心的。好的是,如果你有很多相關的東西,你可以把它們放在一起,按照功能進行組織,而不是按文件類型進行組織。
我們這樣做,我工作;我們有需要一些代碼和少量靜態資源的電子郵件。所有這些東西都一起放在java源路徑的一個文件夾中;我們可以輕鬆地添加和刪除系統中的電子郵件,而不會忘記事情或者出錯,比如src/resource路徑不匹配,或者一棵樹中的孤立文件不在另一棵樹中。
我通常是這樣的:
project/src
project/resources
project/classes
project/lib
project/dist
兩個SRC和資源有封裝結構及其構建文件採取類和資源爲這是擺在罐子裏輸入dist。
在內部運行時,classpath類似於:lib; classes; resources;
如果應用程序安裝了安裝程序,安裝程序會創建資源目錄並將其完好地保存在安裝目錄中。
如前所述,這取決於您,每個項目可能會有所不同。 例如,使用Wicket,將.html
文件保持在類旁邊是非常平常和實用的。另外,我經常保留一些配置和源代碼 - META-INF
,WEB-INF
,日誌記錄。
讓Maven使資源從源代碼樹,使用此:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<!-- Web - Wicket -->
<resource>
<filtering>false</filtering>
<directory>src/main/java</directory>
<includes><include>**</include></includes>
<excludes><exclude>**/*.java</exclude></excludes>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/test/resources</directory>
</testResource>
<!-- Web - Wicket -->
<testResource>
<filtering>false</filtering>
<directory>src/main/java</directory>
<includes><include>**</include></includes>
<excludes><exclude>**/*.java</exclude></excludes>
</testResource>
</testResources>
主要理由繼續分離工作角色的是(恕我直言)分離的資源。例如。如果您有翻譯團隊的項目,那麼您將保留資源中的字符串與代碼分開並具有不同的SCM權限。