常见配置配置
<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.kkb.maven
</groupId>
<artifactId>HelloWorld
</artifactId>
<version>0.0.1
</version>
<name>Hello
</name>
<dependencies>
<dependency>
<groupId>junit
</groupId>
<artifactId>junit
</artifactId>
<version>4.12
</version>
<scope>test
</scope>
</dependency>
</dependencies>
</project>
当前项目的信息
<groupId>:企业网址反写+项目名
<artifactId>:项目名-模块名
<version>:版本号+类型(snapshot快照版本(简化版本)、alpha内测版、beta公测版、release稳定版、GA正式发布版)
<packaging>:打包类型,默认是jar,可以配置成war、zip、pom类型。1234
<name>:当前项目名
<url>:项目地址
<description>:项目描述信息
<developers>:开发者信息
<licenses>:项目许可证信息,用来发布时授予别人使用此项目的权利
<organization>:组织信息,企业信息
<properties>:属性值标签,也叫变量标签。
依赖标签
<dependencies>
<dependency>
<groupId> </groupId>
<artifactId> </artifactId>
<version> </version>
<scope>一个范围
</scope>
<exclusions>
<exclusion>
<groupId> </groupId>
<artifactId> </artifactId>
<version> </version>
</exclusion>
</exclusions>
</dependency>
</dependencies>
依赖管理标签:
主要用于制定父pom.xml,其他项目可以继承这个pom.xml,从而避免重复定义某些depency。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-dependencies
</artifactId>
<version>${springboot.version}
</version>
<type>pom
</type>
<scope>import
</scope>
</dependency>
</dependencies>
</dependencyManagement>
build:项目支持标签,一般用来引入插件
<build>
<plugins>
<plugin>
<groupId> </groupId>
<artifactId> </artifactId>
<version> </version>
其他设置...
</plugin>
</plugins>
</build>
构建插件
<build>
<finalName>myProject
</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins
</groupId>
<artifactId>maven-source-plugin
</artifactId>
<version>2.4
</version>
<executions>
<execution>
<phase>package
</phase>
<goals>
<goal>jar-no-fork
</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin
</artifactId>
<configuration>
<source>1.7
</source>
<target>1.7
</target>
<encoding>${project.build.sourceEncoding}
</encoding>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
parent:继承标签,用于继承父项目。
<parent>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-starter-parent
</artifactId>
<version>1.5.6.RELEASE
</version>
<relativePath/>
</parent>
moudules:聚合标签
用于聚合多个maven项目,这样用某指令执行这个pom就会把聚合的各项目全部执行,同时处理多个项目。
<modules>
<module>a-demo
</module>
<module>b-client
</module>
<module>c-interface
</module>
</modules>
依赖冲突与解决
依赖冲突:一个项目A,通过不同依赖传递路径依赖于X,若在不同路径下传递过来的X版本不同,那么A应该导入哪个版本的X包呢?
冲突解决方案:
1:如果依赖路径的长度不同,则“短路优先”:
A—>B—>C—>D—>E—>X(version 0.0.1)
A—>F—>X(version 0.0.2)
则A依赖于X(version 0.0.2)。
2:依赖路径长度相同情况下,则“先声明优先”:
A—>E—>X(version 0.0.1)
A—>F—>X(version 0.0.2)
则在项目A的<depencies></depencies>中,E、F那个在先则A依赖哪条路径的X。
maven的继承与聚合(相关标签上面已列),更多用于模块化开发
继承:1:创建父maven项目,在pom.xml中定义被共用的依赖:通过标签。2:在需要使用到共用依赖包的项目中继承父项目:通过标签聚合:创建项目E,在E的pom.xml中,首先修改E的为pom,表示项目E只是一个maven脚本文件,用于执行。然后通过标签进行聚合:
依赖范围
compile:默认范围,编译、测试、运行都有效 provided:编译和测试有效,最后运行不会被加入,如tomcat依赖 runtime:在测试和运行的时候有效,编译不会被加入,比如jdbc驱动jar test:测试阶段有效,比如junit system:与provided一致,编译和测试阶段有效,但与系统关联,可移植性差 import:导入的范围,它只是用在dependencyManagement中,表示从其它的pom中导入dependency的配置
依赖排除
通过<exclusions>标签实现。
A项目引用B项目依赖时,主动排除传递的C项目依赖,修改A项目pom.xml
<dependency>
<groupId>com.jsun.test
</groupId>
<artifactId>B
</artifactId>
<version>0.0.1-SNAPSHOT
</version>
<exclusions>
<exclusion>
<groupId>com.jsun.test
</groupId>
<artifactId>C
</artifactId>
</exclusion>
</exclusions>
</dependency>
通过true实现
改B项目的pom.xml:
<dependency>
<groupId>com.mavan.demo
</groupId>
<artifactId>C
</artifactId>
<version>0.0.1-SNAPSHOT
</version>
<optional>true
</optional>
</dependency>