2008-12-08 69 views
1

在用java編寫的軟件項目中,您經常擁有資源,這些資源是項目的一部分,應該包含在類路徑中。例如一些模板或圖像,應該可以通過類路徑(getResource)訪問。這些文件應該包含在生成的JAR文件中。如何組織您的java-project中類路徑中可用的非源資源?

很明顯,應將這些資源添加到修訂控制系統。但是在哪個目錄中放置這些文件?與java-source-files並行,或者在另一個目錄中也可以重現所需的包結構?

回答

2

我更喜歡你的後者解決方案:一個單獨的目錄,模仿源代碼的包結構。這樣他們就不會破壞你的源代碼,而是緊挨着打包好的JAR文件中的已編譯類文件。

2

就個人而言,如果它們與代碼的特定部分密切相關,並且它們不是太多,我寧願將它們與源代碼放在一起。

但是,如果這些文件具有自己的組織結構,或者如果有成百上千的文件很難在其中找到源代碼,我會將它們分開。

4

Maven將它們放到src/main/resources /中(Java代碼將轉到src/main/java /)。主要原因是Maven可以用各種語言編譯代碼,並且將它們分開以使一個編譯不會被另一個文件所迷惑。

在資源的情況下,Maven會在它們被添加到Jar之前替換它們中的變量,因此它們也是「編譯」源。

2

這取決於您的喜好。將它們與源代碼文件混合在一起會使重構變得更容易(因爲源文件會隨着源文件而移動),但只有少數圖標,圖像和本地化文件會讓文件變得非常容易混亂。

與今天的工具,它也並不重要。無論您使用Eclipse,Netbeans還是其他工具,它們都允許您使用與源代碼不同的佈局的二進制包。所以最後你可以像你想的那樣做。

就我個人而言,我儘量避免將資源與資源混合,因爲我通常很少更改資源,但源代碼非常頻繁。

0

如果您的構建工具不會感到困惑,可以將這些東西放在類路徑中。 Eclipse不會嘗試編譯你的jpeg,Ant也不會,所以沒有什麼值得擔心的。好的是,如果你有很多相關的東西,你可以把它們放在一起,按照功能進行組織,而不是按文件類型進行組織。

我們這樣做,我工作;我們有需要一些代碼和少量靜態資源的電子郵件。所有這些東西都一起放在java源路徑的一個文件夾中;我們可以輕鬆地添加和刪除系統中的電子郵件,而不會忘記事情或者出錯,比如src/resource路徑不匹配,或者一棵樹中的孤立文件不在另一棵樹中。

2

我通常是這樣的:

project/src 
project/resources 
project/classes 
project/lib 
project/dist 

兩個SRC資源有封裝結構及其構建文件採取資源爲這是擺在罐子裏輸入dist

在內部運行時,classpath類似於:lib; classes; resources;

如果應用程序安裝了安裝程序,安裝程序會創建資源目錄並將其完好地保存在安裝目錄中。

0

如前所述,這取決於您,每個項目可能會有所不同。 例如,使用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權限。