前言
虽然 Gradle 势头很猛,但是 Maven 依然是 Java 项目构建的优先选择,本文简要介绍一些 Maven 工程实践
多模块(multiple module)
如果工程比较复杂,或者预期后续会变的比较复杂,可以将工程分成多个模块,常用的分模块的方法:
core,核心代码)
util/common,工具
service,服务
web/front,web 前端
在 root(顶层)pom 文件中声明工程包含的各个模块
... pom core service util web
在子模块 pom 文件中声明 parent pom
... com.aachuxing.gov.report ... 1.0
插件
使用 Maven 离不开各种各样的插件,简单介绍一下常用的插件,详细使用说明可以参考官方文档,或者直接 google/baidu,在声明插件的时候推荐:
将 属性值(jdk.version)定义在 properties 标签中
将 build 标签声明在 root pom 中
maven-compiler-plugin
maven-compiler-plugin 可以指定 jdk 版本,推荐设置 jdk8 以上版本
... 1.8 org.apache.maven.plugins maven-compiler-plugin ${jdk.version} ${jdk.version} ${jdk.version}
maven-surefire-plugin
maven-surefire-plugin 用来排除一些你不想在持续集成中运行 test case,它们可能仅仅是你用来测试你的代码,比如测试 dao 中 SQL 书写是否有问题
... org.apache.maven.plugins maven-surefire-plugin 2.19.1 **/XXXTest.java
maven-assembly-plugin
通常一个 Java 工程除了 jar 包之外还有各种各样的文件:shell 脚本,properties(属性)文件,数据文件(json, xml),使用 maven-assembly-plugin 可以对工程打包部署做深度定制
... org.apache.maven.plugins maven-assembly-plugin 2.6 make-assembly package single src/main/assembly/assembly1.xml src/main/assembly/assembly2.xml src/main/assembly/assembly3.xml
assembly.xml 配置文件用于配置具体的打包过程,在 descriptors 标签中可以指定多个配置文件,实现一套代码打出多个 "渠道包"
下面是一个 assembly.xml 文件示例:
${id} tar.gz false src/main/assembly/bin bin startup.sh shutdown.sh 0755 ${project.build.directory}/classes / config.properties log4j2.xml 0644 lib
formats,通过后缀名指定打包文件格式,tar.gz, zip, war .etc
fileSets,指定哪些文件被打到包里头
maven-dependency-plugin
maven-dependency-plugin 用于管理依赖,一个应用场景是将依赖的 jar 包解开合并到工程中
maven-dependency-plugin prepare-package unpack com.compony.xxx yyy ${project.build.outputDirectory}