Maven常用一些标签和知识
当前项目的信息
<groupId>:企业网址反写+项目名
<artifactId>:项目名-模块名
<version>:版本号+类型(snapshot快照版本(简化版本)、alpha内测版、beta公测版、release稳定版、GA正式发布版)
<packaging>:打包类型,默认是jar,可以配置成war、zip、pom类型。
<name>:当前项目名
<url>:项目地址
<description>:项目描述信息
<developers>:开发者信息
<licenses>:项目许可证信息,用来发布时授予别人使用此项目的权利
<organization>:组织信息,企业信息
<properties>:属性值标签,也叫变量标签。
依赖标签
<dependencies>
<!--一个依赖包-->
<dependency>
<!--通过坐标指定依赖包-->
<groupId> </groupId>
<artifactId> </artifactId>
<version> </version>
<!--可选项:依赖范围。有六个可选值:常用compile/provided/test/runtime等-->
<scope>一个范围</scope>
<!--可选项:排除依赖传递:即:当前项目依赖当前配置的依赖包A时,如果这个依赖包又依赖其他包B,这里可以选择排除依赖的传递性,不下载导入B-->
<exclusions>
<exclusion>
<!--被排除的依赖包坐标-->
<groupId> </groupId>
<artifactId> </artifactId>
<version> </version>
</exclusion>
</exclusions>
</dependency>
</dependencies>
依赖管理标签:
主要用于制定父pom.xml,其他项目可以继承这个pom.xml,从而避免重复定义某些depency。
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<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>
<!--
Maven定制化打包后的包名
Maven默认的包名为:<finalName>${project.artifactId}-${project.version}</finalName>
定制化想要的包名,如加上时间戳:<finalName>${project.artifactId}-${maven.build.timestamp}</finalName>
-->
<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>
<!-- 插件管理列表,与dependencyManagement标签作用相似,管理插件版本号,让子项目继承使用 -->
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<!-- 插件扩展配置 -->
<!-- 更详细的例子:http://my.oschina.net/zh119893/blog/276090 -->
<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>
部分参考http://www.cnblogs.com/ygj0930/p/6628201.html
https://blog.csdn.net/javaloveiphone/article/details/52081464