Maven的相关标签
Maven项目的标准目录结构
src
main
java 源文件
resources 资源文件
filters 资源过滤文件
config 配置文件
scripts 脚本文件
webapp web应用文件
test
java 测试源文件
resources 测试资源文件
filters 测试资源过滤文件
it 集成测试
assembly assembly descriptors
site Site
target
generated-sources
classes
generated-test-sources
test-classes
xxx.jar
pom.xml
LICENSE.txt
NOTICE.txt
README.txt
构建Maven项目的时候,如果没有进行特殊的配置,Maven会按照标准的目录结构查找和处理各种类型文件。
src/main/java和src/test/java
这两个目录中的所有*.java
文件会分别在comile
和test-comiple
阶段被编译,编译结果分别放到了target/classes
和targe/test-classes
目录中,但是这两个目录中的其他文件都会被忽略掉。
src/main/resouces
和src/test/resources
这两个目录中的文件也会分别被复制到target/classes和target/test-classes目录中。
target/classes
打包插件默认会把这个目录中的所有内容打入到jar包或者war包中。
资源文件
.xml、.properties等资源文件是Java代码中要使用的文件。代码在执行的时候会到指定位置去查找这些文件。
前面已经说了Maven默认的处理方式,默认情况下,编译时,只会将src/main/resouces
和src/test/resources
这两个目录中的文件分别被复制到target/classes和target/test-classes目录中。
但有时候有些资源配置文件通常与.java
文件一起放在src/main/java
目录(如mybatis
或hibernate
的表映射文件)。有的时候还希望把其他目录中的资源也复制到classes目录中。这些情况下就需要在Pom.xml
文件中修改配置了。、
可以有两种方法另外访问资源
- 一是在build元素下添加resources进行配置。
- 另一种是在build的plugins子元素中配置maven-resources-plugin等处理资源文件的插件。
在build标签下添加resource子标签
resource用来将配置资源文件,将其他目录下的资源文件复制到target/classes目录中。
<build>
...
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/webapp</directory>
</resource>
</resources>
<build>
采用maven-resources-plugin
插件
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<id>copy-xmls</id>
<phase>process-sources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>
/target/classes
</outputDirectory>
<resources>
<resource>
<directory>
/src/main/java
</directory>
<includes>
<include>
**/*.xml
</include>
</includes>
<excludes>
<exclude>
**/*.java
</exclude>
</excludes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
采用builder-helper-maven-plugin
插件
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>some directory</source>
//示例如下
<source>
src/java/main
</source>
<source>
../usermng-api/src/main/java
</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
打包时文件相关的配置
打包时target/classes目录中的资源文件会和class字节码一起被打进jar包或war包中。有时候默认的情况不能完全满足需求,如target/classes目录中的一些文件不希望打入jar包中,就需要额外配置maven-jar-plugin
或maven-war-plugin
插件。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<outputDirectory>
vms-start/target
</outputDirectory>
<packagingExcludes>
WEB-INF\classes\static\**,
WEB-INF\classes\huiPro\**,
WEB-INF\classes\WEB-INF\**,
WEB-INF\classes\index.html,
WEB-INF\classes\script\**,
WEB-INF\classes\skin\**
</packagingExcludes>
</configuration>
</plugin>
如果在打包时未指定具体输出目录,则会在工程根目录下输出打好的war包或jar包。
maven -package,-install, -deploy
package命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库。
install命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库。
deploy命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库。