2010-08-27 68 views
6

我正在使用Maven 2和Hibernate的Java Web應用程序。爲什麼maven不打包我的hibernate-mapping文件?

我有一個Hibernate映射文件Domain.hbm.xml在同一個源文件夾中有幾個域類。

如果我運行mvn clean package我發現這個文件沒有被複制到目標文件夾中的war文件中。

但是,如果我只輸入mvn clean,然後進入eclipse並從Project菜單中選擇Clean,則文件將被髮送到目標中的適當位置。然後,我可以執行mvn package以成功打包可訪問數據庫的war文件。

這是一個pom設置?這是怎麼回事?

+0

你確定你的xml文件在資源文件夾下嗎? – mhshams 2010-08-27 20:38:16

回答

9

要直接在類路徑上結束Java源代碼的資源(在/ WEB-INF/classes裏面)必須放在src/main/resources目錄中,而不是src/main/java。

12

如果我運行mvn clean package,我發現這個文件沒有被複制到目標文件夾中的war文件中。

則映射文件可能不是在默認的資源目錄(src/main/resources),但在源目錄(src/main/java)和Maven默認情況下不會將它們複製到構建輸出目錄。

但是,如果我只做mvn clean,然後轉到eclipse並從Project菜單中選擇Clean,則文件將發送到目標中的相應位置。然後我可以使用mvn包來成功打包可訪問數據庫的war文件。

在Eclipse下,我的猜測是來自源目錄的文件被複制到構建輸出目錄,包括應用程序資源文件。因此,在Eclipse清理步驟之後,當您運行package時,這會以某種方式「欺騙」Maven。但這並不重要,主人是Maven,其他一切都是無關緊要的。

要修復它,請將您的映射文件移動到src/main/resources。或者讓他們在src/main/java並聲明源目錄作爲「額外」的資源目錄:

<build> 
    <resources> 
    <resource> 
     <directory>src/main/resources</directory> 
    </resource> 
    <resource> 
     <directory>src/main/java</directory> 
     <excludes> 
     <exclude>**/*.java</exclude> 
     </excludes> 
    </resource> 
    </resources> 
</build> 

有人做到這一點,我更喜歡使用獨立的目錄。

0

我有同樣的問題。這解決了我的問題。

<sourceDirectory>src/main/java</sourceDirectory> 
    <resources> 
     <resource> 
      <directory>src/main/java</directory> 
       <includes> 
        <include>**/*.xml</include> 
        <include>**/*.properties</include> 
       </includes> 
     </resource> 
    </resources> 
相關問題