Maven-进阶

1.依赖管理Dependency Management

1.1.依赖管理的主要配置
在这里插入图片描述
坐标:groupId、artifactId、version
type:依赖的类型,默认值就jar。
bundle:打包不是maven标准的打包,也能凑合用,但不推荐在这里插入图片描述
exclusions:排除某依赖
目标:要将log4j中不需要的jar排除掉。
在这里插入图片描述操作右键:
在这里插入图片描述
操作右键:
在这里插入图片描述
保存后:
在这里插入图片描述在这里插入图片描述
scope:依赖范围
在这里插入图片描述

在这里插入图片描述
compile:编译,打包、测试都需要。绝大多数jar都是如此,也是默认值。
provided:编译需要,打包不需要。例如servlet、jsp的jar。

在这里插入图片描述

1.2.传递性依赖的问题

在这里插入图片描述
引发传递性依赖的问题,即:同时引用了的依赖jar包冲突。如:通过引入struts2和spring整合jar:
在这里插入图片描述在这里插入图片描述 jar的版本冲突出现了!

Maven的依赖调节策略:
在这里插入图片描述
举例:X是A的传递性依赖
1)
A->B->C-D-X(1.6)
A->D-X(2.0)
根据第一原则:2.0会引入进来!
2)
A->D-X(2.0)
A->D-X(3.0)
当第一原则失效,则遵循第二原则。
解决版本冲突:
1)优先遵循第二原则,先声明先进来。
这里优先将spring放到前面
2)第一原则:直接依赖,路径最短

3)我们一般优先使用依赖调节策略,当依赖调节策略也不能解决的情况下,可以锁定版本。但会打破依赖调节策略。
例如:spring core的版本就是要用3.05
在这里插入图片描述在这里插入图片描述
4)如果某个jar不需要(按道理说,maven自动识别同样类型的jar,引入一个版本。但有时候,两个jar差距太大,识别不出来。)可以排除一个版本。(上节知识)
在这里插入图片描述
1.3.自定义属性-统一版本维护
在maven中,可以自定义属性,为了在maven的环境中使用(引用)。
自定义属性应用中,可以做统一版本维护。
问题:当引入过多的依赖的时候,相同类型的依赖版本一般要统一,但单独维护很麻烦。

在这里插入图片描述

maven默认是1.5的编译。
在这里插入图片描述
解决方案:
修改编译版本为1.7:

<build>
  	<plugins>
  		<plugin>
  			<groupId>org.apache.maven.plugins</groupId>
  			<artifactId>maven-compiler-plugin</artifactId>
  			<version>3.1</version>
  			<configuration>
  				<source>1.7</source>
  				<target>1.7</target>
  			</configuration>
  		</plugin>
  	</plugins>
  </build>

需要按照pom配置去更新项目:
在这里插入图片描述

2.生命周期

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
不管哪套生命周期,都是独立的。但同一套生命周期执行的顺序是从上到下的,例如:
执行mvn package,那么会自动执行package之前的所有的过程。

扩展:可以同时执行两套生命周期(组合命令)
mvn clean package

在这里插入图片描述
3.插件(Plugin)

插件是maven的功能的组成!
主要用来控制生命周期、tomcat运行等等。
仓库中存放是构件,构件有两种:jar相关和插件。
如果插件本地仓库没有,则会自动到远程仓库下载。

3.1.编译maven-compiler-plugin

maven-compiler-plugin:3.1
负责编译。
改变编译版本,默认是maven的编译版本是1.5.
maven的插件要改变默认值,的方法:通过自定义pom的配置来覆盖默认配置。
在这里插入图片描述

<build>
	<plugins>
		<!-- 编译插件 -->
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>3.1</version>
			<configuration>
				<!-- 开发时源代码编译版本 -->
				<source>1.7</source>
				<!-- 打包编译到target目录时的版本  -->
				<target>1.7</target>
				<!-- 编译时的编码,默认是iso8859-1 -->
				<encoding>utf-8</encoding>
			</configuration>
		</plugin>
	</plugins>
</build>

要让配置生效,需要更新项目(让项目根据配置来重新构建):
在这里插入图片描述

3.2.测试
编写测试用例:
在这里插入图片描述
让所有的用例都跑一下:mvn test
在这里插入图片描述

1)中文乱码问题

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<!-- 控制台中文编码问题 -->
<argLine>-Dfile.encoding=UTF-8</argLine>
</configuration>
</plugin>

3.3.Tomcat

tomcat-maven-plugin:1.1
默认端口是8080,编码是iso8859-1
目标;要修改端口和编码
在这里插入图片描述

<plugin>
			<groupId>org.codehaus.mojo</groupId>
			<artifactId>tomcat-maven-plugin</artifactId>
			<version>1.1</version>
			<configuration>
				<!-- 端口 -->
				<port>9090</port>
				<!-- 编码 -->
				<charset>utf-8</charset>
			</configuration>
		</plugin>

3.4.其他

maven的插件有内置的,和外置的插件。
内置插件:根据groupId来识别的,只能识别两个:org.codehaus.mojo、org.apache.maven.plugins
直接使用即可。比如编译,打包,内置tomcat。
外置插件(第三方):组id不是上面这两个
需要声明再用。
比如tocmat7插件
在这里插入图片描述在这里插入图片描述解决方案:声明引入插件:
在这里插入图片描述 注:【自己】

4.多模块和聚合

4.1.概念
多模块:将一个项目分解为几个小的项目,在父项目中统一管理子项目的功能,通过父项目module管理子项目
聚合(继承):子项目继承父项目,复用父项目中的内容(jar、配置等),通过子项目中parent标签继承。
两者是独立的,但通常一起使用。多模块是从上到下管理子项目的,继承从下到上继承复用父项目的。

4.2.多模块和继承的构建
第一步:先建立父项目
在这里插入图片描述
项目类型选择pom:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
第二步;:建立子项目(两个java项目)
在这里插入图片描述
在这里插入图片描述
提示:父项目必须是pom类型的,否则报错:

分析配置代码:
父项目:
在这里插入图片描述
子项目:

在这里插入图片描述
按照上面的步骤,再建立子项目:

分析父项目:
在这里插入图片描述
子项目:
在这里插入图片描述

4.3.多模块和继承的操作
目标:测试向下管理和向上继承。
向下管理
父项目统一管理操作子项目
需求:对子项目打包操作。
只需要在父项目上 mvn package即可,子项目自动打包。{注:使用Eclipse Maven插件[Run As]-[Maven build]时多输入了mvn命令
,因为Eclipse Maven插件已经帮你加上了mvn的命令前缀,此时只需package即可,否则报错误LifecyclePhaseNotFoundException,Unknown lifecycle phase “mvn”. You must specify a valid lifecycle}
在这里插入图片描述
向上继承
子项目可以复用父项目的东东
需求:所有子项目都需要junit包,
只需要在父项目中引入即可。
在这里插入图片描述
为什么要分解??
因为有时候项目本身要复用,因此可以将一个项目中模块,抽取出来一个单独的项目,多个项目复用该项目。
如何分解?
根据业务功能分解。业务功能模块是复用的。比如发短信的模块抽取出来单独项目。
根据开发层来分解。根据三层架构来分解。比如domain多个项目复用,则可以抽取出来。

5.全局Settings的配置

5.1.私服的客户端配置使用
比如阿里云的私服:

<mirror>
    <id>aliyun</id>
    <mirrorOf>*</mirrorOf>
    <name>aliyun de sifu</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

5.2.自定义属性覆盖
问题:之前maven默认编译版本是1.5,以后创建的项目都默认是1.5,虽然可以通过项目中的pom.xml去覆盖,但麻烦。
在全局覆盖!

<profile>
		<id>jdk-1.7</id>
		<activation>
			<activeByDefault>true</activeByDefault>
			<jdk>1.7</jdk>
		</activation>
		<properties>
			<!--prevent "[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!-->
			<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
			<!--Handle special characters in site-->
			<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
			<!--set up Maven so it will compile with a target and source JVM of my choice-->
			<maven.compiler.source>1.7</maven.compiler.source>
			<maven.compiler.target>1.7</maven.compiler.target>
			<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
		</properties>
	</profile>

6.第三方构件安装到本地仓库

问题:Oracle在中央仓库中没有构件,因此无法下载下来。
解决方案:手动安装
1.命令行安装(了解):
*在你下载后的 jar 的所在目录下打开命令窗口,然后输入如下命令:

mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=1.0 -Dpackaging=jar -Dfile=ojdbc6.jar*

2.图形界面:
在这里插入图片描述在这里插入图片描述
填写必要信息:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/tangiwang/article/details/83857845
今日推荐