我正在使用Maven 2和Hibernate作为Java Web应用程序。
我有一个Hibernate映射文件,Domain.hbm.xml
在同一个源文件夹中,有几个域类。
如果我运行mvn clean package
,我发现此文件未复制到目标文件夹中的war文件中。
但是,如果我只执行mvn clean
然后转到eclipse并从“项目”菜单中选择“清理”,则会将文件发送到目标中的适当位置。然后我可以mvn package
成功打包一个有权访问数据库的war文件。
这是一个pom设置吗?发生了什么事?
答案 0 :(得分:13)
如果我运行mvn clean包,我发现该文件没有被复制到目标文件夹中的war文件中。
然后映射文件可能不在默认资源目录(src/main/resources
)中,而是在源目录(src/main/java
)中,默认情况下Maven不会将它们复制到构建输出目录。 / p>
但是,如果我只进行mvn clean然后转到eclipse并从Project菜单中选择Clean,则该文件将被发送到目标中的适当位置。然后,我可以执行mvn包来成功打包一个可以访问数据库的war文件。
在Eclipse下,我的猜测是源目录中的文件被复制到构建输出目录,包括应用程序资源文件。因此,在Eclipse清理步骤之后运行package
时,这会以某种方式“欺骗”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>
有些人这样做,我更喜欢使用单独的目录。
答案 1 :(得分:9)
除了Java源之外的资源,你想直接在类路径上(在你的情况下在/ WEB-INF / classes中)必须放在你的src / main / resources目录中,而不是src / main / java。
答案 2 :(得分:0)
我有同样的问题。这解决了我的问题。
<sourceDirectory>src/main/java</sourceDirectory>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
答案 3 :(得分:0)
也遇到相同的问题
在pom.xml中进行以下更改可以解决我的问题
<build>
<finalName>spring-mvc-jquery</finalName>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
对于不同的Maven版本,请遵循相应的版本布局。