2010-08-27 63 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> 
相关问题