目录
POM是项目对象模型(Project Obiect Model )的简称。
pom.xml主要描述了项目的maven坐标,该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。是项目级别的配置文件。
1.声明规范
<?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">
<!-- pom版本标签(必须要的),表示是一个固定的版本,指定了当前pom的版本 -->
<modelVersion>4.0.0</modelVersion>
2.modelVersion
<!-- modelVersion 描述这个POM文件是遵从哪个版本的项目描述符-->
<!-- modelVersion:指定了当前POM模型的版本,对于Maven2及Maven 3来说,它只能是4.0.0;-->
<modelVersion>4.0.0</modelVersion>
3.packaging
标签体解析:
<!-- 打包的机制,如pom,jar, maven-plugin, ejb, war, ear, rar, par,默认为jar -->
<packaging>jar</packaging>
<!--表示这个工程仅仅是用来管理依赖的,可以被继承(参考下面的parent标签)-->
<packaging>pom</packaging>
4.name
<!-- 项目的名称,maven生成文档与展示的时候用 -->
<name>blogserver</name>
5.description
<!-- 本项目的详细描述 -->
<description>贝贝无敌帅!!!</description>
6.parent
<!--父项目的坐标。如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。坐标包括groupID,artifactID和version等。-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<!--父项目的pom.xml文件的相对路径。相对路径允许你选择一个不同的路径。默认值是../pom.xml。Maven首先在构建当前项目的地方寻找父项目的pom,其次在文件系统的这个位置(relativePath(相对路径)位置),然后在本地仓库,最后在远程仓库寻找父项目的pom。-->
<relativePath/> <!-- lookup parent from repository -->
</parent>
7.properties(配置全局属性)
<properties>
<!-- 项目编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!--在标签内可以把版本号作为变量/属性进行定义(版本锁定),后面dependency中用到版本号时可以用${变量名}的形式代替,这样做的好处是—当版本号发生改变时,只要更新properties标签中的变量值就行了,不用更新所有依赖的版本号-->
<!-- java版本(但要是做整合的话,那么就不能使用版本绑定了,得要老老实实手动加版本,eg:mybatis整合到spring
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>-->
<java.version>1.8</java.version>
<spring.version>5.0.2.RELEASE</spring.version> <!--RELEASE表示最新的发布版本-->
</properties>
eg:
<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<!--直接对版本进行引用-->
<version>${spring.version}</version>
</dependency>
8.dependencies
<!--本项目的所有依赖关系 -->
<dependencies>
<!-- 每个dependency都对应这一个jar包 -->
<dependency>
<!--依赖的坐标-->
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.29</version>
</dependency>
<!--junit(单元测试)-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
标签解析:
-
groupld
<!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如org.sang,maven会将该项目打成的jar包放本地路径:/org/sang --> <groupId>org.sang</groupId>
-
artifactId
<!-- 本项目唯一的id,一个groupId下面可以有很多个项目,就是靠artifactId来区分的 --> <artifactId>blogserver</artifactId>
-
version
<!-- 本项目目前所处的版本号 --> <version>0.0.1-SNAPSHOT</version>
-
scope
scope主要是为了管理依赖的部署,确定依赖的使用范围。使用scope标签,可以很方便、直观的进行依赖的总体管理。
scope的标签体解析:
我们把
.class
文件叫做字节码文件,而.java
文件叫做源码。什么是编译:就是对源码进行翻译,翻译之后就变成了
.class
文件了。
什么是运行:编译好了之后,将.class
文件装载到JVM
上进行执行。-
compile(默认值)
缺省值,可省略不写。此值表示该依赖需要参与到项目的编译、测试以及运行周期中,打包时也要包含进去。eg:commons-fileupload -
provided
该依赖在打包的时候可以不用包含进去,别的设施会提供。事实上该依赖理论上可以参与编译、测试、运行等周期。相当于compile,但是打包阶段做了exclude(排除)操作,eg:servlet-api、jsp-api -
runtime
该依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过了编译而已。例如JDBC驱动,适用运行和测试阶段。 -
test
该依赖仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,eg:上面的Junit。 -
system
从参与度来说,和provided相同,但是它不会去maven仓库寻找依赖,而是在本地找,需要配合systemPath标签使用。
eg:<dependency> <groupid>org.hamcrest</groupid> <artifactid>hamcrest-core</artifactid> <version>1.5</version> <scope>system</scope> <systempath>${basedir}/WebContent/WEB-INF/lib/hamcrest-core-1.3.jar</systempath> </dependency>
- import
由maven 2.0.9新加入,只能在dependencyManagement中使用,相当于从其它pom文件中导入依赖设置。
-
9.build
打开父pom.xml修改打包方式jar为pom,注意:build内容也需要做替换,因为默认的spring-boot-maven-plugin这种方式,等到后期打包的时候它会一直提示你—你引入的依赖不存在!
<!-- 构建配置 -->
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- 资源文件拷贝插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>