Maven的一些知识点

约定目录结构

Maven项目有约定好的目录结构

  • 一般认定项目主代码位于src/main/java 目录
  • 资源, 配置文件放在src/main/resources下
  • 测试代码在src/test/java
  • 这里没有webapp, Web项目会有webapp目录, webapp下存放Web应用相关代码

pom.xml

一般pom的结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hyhcoder</groupId>
<artifactId>chapter18</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
<name>bbs论坛</name>
<scope>test</scope>

</project>

  1. 第一行一般是XML头, 指定版本和编码方式;
  2. 紧接着是project元素, project是所有的pom.xml的根元素; (还可以声明一些xsd属性, 非必须, 可以让ide识别罢了)
  3. modelVersion指定了POM模型版本, 目前只能是4.0.0
  4. groupId, artifactId, version, 三个元素生成了一个Maven项目的基本坐标;
  5. name只是一个辅助记录字段;
  6. packing; 项目打包类型, 可以使用jar, war, rar, pom, 默认为jar
  7. scope; 依赖范围;(compile, test, providde, runtime, system)
  8. optional; 标记依赖是否可选;
  9. exclusions; 用来排除传递性依赖的;(这个用于排除里面的依赖性project, 然后自己可以显性的引入, 避免不可控性)
    • dependency:list
    • dependency:tree
    • dependency:analyze

其他属性

dependencies和dependency

  1. 前者包含后者, 依赖的jar包, 在maven中, 被称为dependency
  2. 例如这样配置(若使用MyBatis)
    1
    2
    3
    4
    5
    6
    7
    8
    <dependencies>
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.2.5</version>
    </dependency>
    </dependencies>
    </pre>

properties
properties是用来定义一些配置属性的, 例如project.build.sourceEncoding(项目构建源码编码方式),可以设置为UTF-8,防止中文乱码,也可定义相关构建版本号,便于日后统一升级, 统一管理版本;

build
build表示与构建相关的配置,比如build下有finalName,表示的就是最终构建之后的名称。

生命周期

  1. clean生命周期
    • pre-clean;
    • clean;
    • post-clean;
  2. default生命周期;
    • validate;
    • initialize;
    • generate-sources;
    • process-sources 处理项目主资源文件;
    • generate-resources;
    • process-resources;
    • compile 编译项目的主源码;
    • process-classes;
    • generate-test-sources;
    • process-test-sources 处理项目测试资源文件;
    • generate-test-resources;
    • process-test-resources;
    • test-compile 编译项目的测试代码;
    • process-test-classes;
    • test 使用单元测试框架进行测试;
    • prepare-package
    • package 接受编译好的代码, 打包可发布的格式;
    • pre-integration-test;
    • integration-test;
    • post-integration-test;
    • verify;
    • install; 将包安装到本地仓库, 供本地其他项目使用;
    • deploy; 将最后的包复制到远程仓库;
  3. site生命周期
    • pre-site
    • site
    • post-site
    • site-deploy 将生成的项目站点发布到服务器
  4. 插件可以和生命周期绑定;

聚合和继承POM(父子)

  1. 使用如下来保存聚合的pom;
1
2
3
4
5
6
## 下面对于父项目的来说都是相对路径的名字
<packaging>pom</packaging> #这里一定要是pom
<modules>
<module>account-email</module>
<module>account-persist</module>
</modules>
  1. 使用如下来继承pom
1
2
3
4
5
6
<parent>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<relativePath>../xx.pom</relativePath>
</parent>
  1. 建议父Pom使用dependencyManagement来管理dependency这样的好处在于不会导致子pom一定引入父pom的东西;(子pom不声明即可)

  2. 父Pom使用pluginManagement来管理插件;

hyhcoder wechat
扫码关注我的个人订阅号