为什么maven没有打包我的hibernate-mapping文件?

Eri*_*son 7 java maven-2 hibernate

我正在使用Maven 2和Hibernate作为Java Web应用程序.

我有一个Hibernate映射文件,Domain.hbm.xml在同一个源文件夹中有几个域类.

如果我运行,mvn clean package我发现该文件未被复制到目标文件夹中的war文件中.

但是,如果我只mvn clean执行eclipse并从"项目"菜单中选择"清理",则会将文件发送到目标中的适当位置.然后我可以mvn package成功地打包一个有权访问数据库的war文件.

这是一个pom设置?这是怎么回事?

Pas*_*ent 14

如果我运行mvn clean包,我发现这个文件没有被复制到目标文件夹中的war文件中.

然后映射文件可能不在默认资源目录(src/main/resources)中,而是在源目录(src/main/java)中,默认情况下Maven不会将它们复制到构建输出目录.

但是,如果我只进行mvn clean然后转到eclipse并从Project菜单中选择Clean,则该文件将被发送到目标中的适当位置.然后我可以做mvn包来成功打包一个有权访问数据库的war文件.

在Eclipse下,我的猜测是源目录中的文件被复制到构建输出目录,包括应用程序资源文件.所以当你package在Eclipse清理步骤之后运行时,这会以某种方式"欺骗"Maven .但这并不重要,主人是Maven,其他一切都无关紧要.

要修复它,请将映射文件移动到src/main/resources.或者保留它们 src/main/java并将sources目录声明为"额外"资源目录:

<build>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
    </resource>
    <resource>
      <directory>src/main/java</directory>
      <excludes>
         <exclude>**/*.java</exclude>
      </excludes>
    </resource>
  </resources>
</build>
Run Code Online (Sandbox Code Playgroud)

有些人这样做,我更喜欢使用单独的目录.


Ram*_*mon 9

您想要直接在类路径上的Java源代码以外的资源(在您的情况下在/ WEB-INF/classes中)必须放在src/main/resources目录中,而不是src/main/java.