Maven POM 文件简要解析
参考
- Apache POM Reference
- Maven Available Plugins
- Difference between Maven source plugin jar and jar-no-fork goal?
依赖管理
通过调整依赖中 scope 的范围和 optional 可以避免开发、测试及运行环境中不同组件包的冲突,循环依赖问题。
常见插件
maven-deploy-plugin:发布组件/工程到远程仓库,需要在 distriutionManagement 中配置仓库信息,并在 maven.settings.xml 中配置仓库所在服务器的账户信息;或者以文件部署方式只指定文件路径。
maven-compiler-plugin: 在编译阶段指定待编译资源的 Javac 版本或运行环境的 Java 版本。通过指定 Java 版本,此插件可以解决编译环境或持续集成环境 Java 版本高于实际部署环境版本的问题
maven-jar-plugin:将已编译的类文件和资源文件打包为 Jar,带签名的可以使用 Maven Jarsigner Plugin
maven-surefire-plugin:执行指定的测试代码,可以将结合 TsetNG,JUnit 以及自定义的测试代码。
maven-source-plugin:源码打包到 Jar,使用 jar-no-fork 时,和打 jar 包生命周期中后续的相关操作不会再次执行。
jetty-maven-plugin:开发过程中提供 jetty 容器作为应用运行环境。
maven-javadoc-plugin:使用 javadoc 工具为项目生成 javadoc
maven-gpg-plugin:使用 GnuPG(GNU Privacy Guard、GPG 开源加密软件) 对项目所以 artifact 进行签名。或者签名后再发布到远程仓库
maven-enforcer-plugin:约束条件检查,用户可自定义约束条件
针对自定义Jar包的处理
建议伴随工程,设置仓库(仅包含自定Jar),每次更新都使用此仓库,不会受其他影响,也不会影响构建过程。
主要思路:将隶属与本工程的仓库目录设置在 parent 工程下,然后使用 maven install 命令上传到本地仓库,然后将相关文件复制到parent工程下的仓库文件中。
上传到本地仓库
1
2
3
4
5
6mvn install:install-file \
-DgroupId=com.customized \
-DartifactId=customized \
-Dversion=1.1.1 \
-Dpackaging=jar \
-Dfile=/jar-place/customized-1.1.1.jar组织结构如下:
1
2
3
4
5
6
7xxx-parent
|-----xxx-conf
|-----xxx-app
|-----xxx-web
|-----xxx-common
|-----local_repo
|-----compom 文件中配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<repositories>
<repository>
<id>local_repo</id>
<name>local_repos</name>
<url>file://${project.basedir}/local_repo</url>
<layout>default</layout>
<releases>
<enable>true</enable>
<updatePolicy>always</updatePolicy>
<checksumPolicy>ignore</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
不同的切换环境
profiles 定义了各个环境的变量
构建时使用命令行: mvm build clean package -P dev 或者使用 eclipse run configure 配置:Goals: clean package, Profiles: dev
注意:properties 中 module-config-home 与 common-config-home 的不同
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<maven.app-name>${app-name}</maven.app-name>
<maven.common-config-home>${project.build.directory}/../../../spring-seed-conf/dev</maven.common-config-home>
<maven.module-config-home>${project.build.directory}/../../spring-seed-conf/dev</maven.module-config-home>
<maven.log-home>${project.build.directory}/../../../../seed-log</maven.log-home>
<maven.log-level>DEBUG</maven.log-level>
<maven.log-queue-size>256</maven.log-queue-size>
</properties>
</profile>
<profile>
<id>release</id>
<properties>
<maven.app-name>${app-name}</maven.app-name>
<maven.common-config-home>d:/spring-seed-conf/release</maven.common-config-home>
<maven.log-home>d:/spring-seed-log/seed-log</maven.log-home>
<maven.log-level>DEBUG</maven.log-level>
<maven.log-queue-size>256</maven.log-queue-size>
</properties>
</profile>
</profiles>build 部分对配置文件的运行环境变量进行替换
resouces 指明了存在待替换变量的文件所在的目录,此处待替换的变量即 profiles 中定义的环境相关变量。或者使用 filter 指定 src/main/resources 中特定文件,将文件用到的环境变量在打包时根据配置替换成固定值
1
2
3
4
5
6<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>