Maven 资源文件的相关配置

Resources Configurations of Maven

Posted by decaywood on 2017-05-11
- 错误校对

Maven 资源文件的相关配置

构建 Maven 项目的时候,如果没有进行特殊的配置,Maven 会按照标准的目录结构查找和处理各种类型文件。

src/main/java和src/test/java

这两个目录中的所有*.java文件会分别在comile和test-comiple阶段被编译,编译结果分别放到了target/classestarge/test-classes目录中,但是这两个目录中的其他文件都会被忽略掉。


这两个目录中的文件也会分别被复制到```target/classes```和```target/test-classes```目录中。

```target/classes```

打包插件默认会把这个目录中的所有内容打入到jar包或者war包中。

## 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

## 资源文件的配置

资源文件是Java代码中要使用的文件。代码在执行的时候会到指定位置去查找这些文件。前面已经说了Maven默认的处理方式,但是有时候我们需要进行自定义的配置。

有时候有些配置文件通常与.java文件一起放在```src/main/java```目录(如 mybatis 或 hibernate 的表映射文件)。有的时候还希望把其他目录中的资源也复制到 classes 目录中。这些情况下就需要在 Pom.xml 文件中修改配置了。

可以有两种方法:

* 在 \<build\> 元素下添加 \<resources\> 进行配置。
* 在 \<build\> 的 \<plugins\> 子元素中配置 maven-resources-plugin 等处理资源文件的插件。

## 配置 Resources 节点

....... src/main/resources **/*.properties **/*.xml false src/main/java **/*.properties **/*.xml false ......

## 配置资源处理插件

maven-resources-plugin 2.5 copy-xmls process-sources copy-resources ${basedir}/target/classes ${basedir}/src/main/java **/*.xml

## 另一个插件也能完成相同的功能

org.codehaus.mojo build-helper-maven-plugin 1.8 add-resource generate-resources add-resource src/main/java **/*.xml

## 打包时文件相关的配置

打包时```target/classes```目录中的资源文件会和 class 字节码一起被打进 jar 包或 war 包中。有时候默认的情况不能完全满足需求,如```target/classes```目录中的一些文件不希望打入 jar 包中,就需要额外配置 maven-jar-plugin 插件。

org.apache.maven.plugins maven-jar-plugin 2.4 *.properties true xxxxxx.ConsoleLauncher

## pom.xml 配置文件

4.0.0 asia.banseon banseon-maven2 jar 1.0-SNAPSHOT banseon-maven http://www.baidu.com/banseon A maven project to study maven. jira http://jira.baidu.com/banseon
Demo banseon@126.com banseon@126.com banseon@126.com http:/hi.baidu.com/banseon/demo/dev/ HELLO WORLD banseon banseon@126.com Project Manager Architect demo http://hi.baidu.com/banseon No -5 Apache 2 http://www.baidu.com/banseon/LICENSE-2.0.txt repo A business-friendly OSS license scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk) scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk http://svn.baidu.com/banseon demo http://www.baidu.com/banseon ...... ...... Windows XP Windows x86 5.1.2600 mavenVersion 2.0.3 /usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/ /usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/ ...... ...... ...... ...... ...... ...... banseon-repository-proxy banseon-repository-proxy http://192.168.1.169:9999/repository/ default ...... org.apache.maven maven-artifact 3.8.1 jar test spring-core org.springframework true ...... banseon-maven2 banseon maven2 file://${basedir}/target/deploy banseon-maven2 Banseon-maven2 Snapshot Repository scp://svn.baidu.com/banseon:/usr/local/maven-snapshot banseon-site business api website scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web

## setting.xml 配置文件

maven 的配置文件 settings.xml 存在于两个地方:

1.安装的地方:```${M2_HOME}/conf/settings.xml```

2.用户的目录:```${user.home}/.m2/settings.xml```

前者又被叫做全局配置,对操作系统的所有使用者生效;后者被称为用户配置,只对当前操作系统的使用者生效。如果两者都存在,它们的内容将被合并,并且用户范围的 settings.xml 会覆盖全局的settings.xml。
Maven安装后,用户目录下不会自动生成 settings.xml,只有全局配置文件。如果需要创建用户范围的 settings.xml,可以将安装路径下的 settings 复制到目录```${user.home}/.m2/```。Maven 默认的 settings.xml 是一个包含了注释和例子的模板,可以快速的修改它来达到你的要求。

全局配置一旦更改,所有的用户都会受到影响,而且如果 maven 进行升级,所有的配置都会被清除,所以要提前复制和备份```${M2_HOME}/conf/settings.xml```文件,一般情况下不推荐配置全局的 settings.xml。

usr/local/maven true false false org.codehaus.mojo myproxy true http://… proxy.somewhere.com 8080 proxyuser somepassword *.google.com|ibiblio.org server001 my_login my_password ${usr.home}/.ssh/id_dsa some_passphrase 664 775 planetmirror.com PlanetMirror Australia http://downloads.planetmirror.com/pub/maven2 central test false 1.7 Windows XP Windows x86 5.1.2600 mavenVersion 2.0.3 /usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/ /usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/ usr/local/winner/jobs/maven-guide codehausSnapshots Codehaus Snapshots false always warn http://snapshots.maven.codehaus.org/maven2 default env-test

```

Maven默认生命周期阶段

生命周期阶段 描述
validate 验证项目是否正确,以及所有为了完整构建必要的信息是否可用
generate-sources 生成所有需要包含在编译过程中的源代码
process-sources 处理源代码,比如过滤一些值
generate-resources 生成所有需要包含在打包过程中的资源文件
process-resources 复制并处理资源文件至目标目录,准备打包
compile 编译项目的源代码
process-classes 后处理编译生成的文件,例如对Java类进行字节码增强(bytecode enhancement)
generate-test-sources 生成所有包含在测试编译过程中的测试源码
process-test-sources 处理测试源码,比如过滤一些值
generate-test-resources 生成测试需要的资源文件
process-test-resources 复制并处理测试资源文件至测试目标目录
test-compile 编译测试源码至测试目标目录
test 使用合适的单元测试框架运行测试。这些测试应该不需要代码被打包或发布
prepare-package 在真正的打包之前,执行一些准备打包必要的操 作。这通常会产生一个包的展开的处理过的版本
package 将编译好的代码打包成可分发的格式,如 JAR,WAR,或者EAR
pre-integration-test 执行一些在集成测试运行之前需要的动作。如建立集成测试需要的环境
integration-test 如果有必要的话,处理包并发布至集成测试可以运行的环境
post-integration-test 执行一些在集成测试运行之后需要的动作。如清
理集成测试环境  
verify 执行所有检查,验证包是有效的,符合质量规范
install 安装包至本地仓库,以备本地的其它项目作为依赖使用
deploy 复制最终的包至远程仓库,共享给其它开发人员和项目(通常和一次正式的发布相关)