Java代码安全02_1--MAVEN的使用

一、概念

	
	本文所讲在前期仅作为扩展了解即可,其两大核心
	

1.1、依赖管理


对 jar 的统一管理(Maven 提供了一个 Maven 的中央仓库, 

https://mvnrepository.com/,当我们在项目中添加完依赖之后,

Maven 会自动去中央仓库下载相关的依赖,并且解决依赖的依赖问题)

1.2、项目构建


对项目进行编译、测试、打包、部署、上传到私服等 


常见的项目管理工具:

	Maven、ant(tomcat用的)、gradle等

二、MAVEN的安装

Maven 使用Java开发的,所以必须要安装一个JDK并配置好。



但是如果你使用IDEA 开发的化 IDEA 中已经集成好 Maven,就不需要我们手工装。(推荐)



手工安装 Maven 直接百度即可,这里不做扩展

	下载地址:http://maven.apache.org/download.cgi 

在这里插入图片描述

三、MAVEN的配置


没有特殊需求的话,安装好之后直接就可以用了。不过一般来说,还是需要稍微配置一下,

比如中央仓库的问题。默认使用 Maven 自己的中央仓库(境外),使用起来网速比较慢,

这个时候,可以通过修改配置文件,将仓库改成国内的镜像仓库,国内仓库使用较多的是阿里巴巴的仓库。 

和py的pip类似。

3.1、仓库类型

本地仓库 
    
    自己电脑上的仓库,每个人电脑上都有一个仓库,默认位置在 当前用户名\.m2\repository


私服仓库 
    
    公司内部搭建的 Maven 私服,处于局域网中,访问速度较快,
	
	这个仓库中存放的 jar一般就是公司内部自己开发的jar 

中央仓库 
	由 Apache 团队来维护,包含了大部分的 jar,早期不包含 Oracle 数据库驱动,
	
	从2019 年 8 月开始,包含了 Oracle 驱动


Maven 查找 Jar 包的顺序
在这里插入图片描述


由于默认的中央仓库下载较慢,因此,

也可以将远程仓库地址改为阿里巴巴的仓库地址,具体过程可以百度。

3.2、MAVEN常用命令

在这里插入图片描述

	
	运行mvn命令一定要在项目所在文件夹下运行,
	

在这里插入图片描述


当然假设使用的是IDEA,不需要一个个手敲,直接点点点即可。

点击右侧,直接呼出对应菜单,在对应功能处直接点点点。

在这里插入图片描述

四、创建MAVEN项目

可以直接通过命令来构建一个 Maven 项目,

不过在实际开发中,一般使用 Eclipse 或者 IDEA 就可以直接创建 Maven 项目了。 
我们开发 Java 项目,一般情况下用 maven-archetype-quickstart 模板即可 

默认的 Archetype,基本内容包括 :
	
	一个包含 junit 依赖声明的 pom.xml
	
	src/main/java主代码目录及一个名为App的类
	
	src/test/java测试代码目录及一个名为AppTest的测试用例
IDEA 创建一个 Maven 项目很简单,菜单栏 – File – New - Project 

在这里插入图片描述

接着选择,这个Java版本可以后期切换,且仅仅对当前项目产生生效。

在这里插入图片描述

在本文中我们创建 maven-archetype-quickstart 模板的项目。选择并点击 Next。 

在这里插入图片描述


其中 name 填写创建项目的名字,Location 填写项目保存的位置。

GroupID 一般填写 公司名称,也就是全限定名。设置完成后点击下一步。 

在这里插入图片描述

该页面用来设置项目的 Maven 属性。一般情况下不需要设置。

注意,通过这个页面设置的 Maven 属性不会影响其他项目。

点击下一步即可成功创建项目。 项目创建成功后,生成三个文件: 

在这里插入图片描述

第一个是idea自带的文件,一般不用管,

第二src是放代码的一些东西,

第三个Pom就是一些说明/配置

五、MAVEN依赖管理

Maven 项目,如果需要使用第三方的控件,都是通过依赖管理来完成的。

这里用到的 一个东西就是 pom.xml 文件。类似Python的安装依赖包文件。


如果我们想添加依赖,首先去 Maven 官网搜索。 

	https://mvnrepository.com/artifact/commons-collections 

在这里插入图片描述

找到我们需要的版本,一般选新不选旧,除非特殊情况。

(比如你在研究/复现某个特定版本的漏洞),

在这里插入图片描述


例如我们选择 3.2.2 版本,点击图中的 3.2.2 将 Maven 内容复制即可。 

在这里插入图片描述

粘贴到项目中 pom.xml 文件的 dependencies 标签中。

在这里插入图片描述


这时候 IDEA 会检测到我们已经修改 pom 文件,

在右上角会出现图中的图标,m 中间有一个圈,提示我们更新 pom 文件来自动下载我们改动的依赖。 

在这里插入图片描述

六、依赖冲突

		
	这里的内容作为扩展,

依赖冲突产生的原因,下图很好的解释了原因,

其根本原因是我们选择的依赖,版本变更过大,导致其不兼容低版本所造成的现象。

在这里插入图片描述

几乎所有的 Jar 包冲突都和依赖传递原则有关,所以我们先说 Maven 中的依赖传递原则: 

6.1、最短路径优先原则

假如引入了2个Jar包A和B,都传递依赖了Z这个Jar包: 
	
	A -> X -> Y -> Z(2.5) 
	
	B -> X -> Z(2.0)
	
那其实最终生效的是 Z(2.0)这个版本。因为他的路径更加短。 

6.2、最先声明优先原则

如果路径长短一样,优先选最先声明的那个。
	
	A -> Z(3.0) 
	
	B -> Z(2.5)

这里 A 最先声明,所以传递过来的 Z 选择用 3.0 版本的。 

这个声明就是在上边pom.xml中的顺序,

6.3、定位冲突

IDEA 提供分析 Maven 依赖的插件 Maven Helper 供我们分析是否存在冲突。

用这个插件能很好的显示出项目中所有的依赖树和冲突,

在这里插入图片描述

在这里插入图片描述

这里面红色高亮的部分,就表明这个 Jar 包有了冲突。

选中这个 jar 包,可以看到这 2 个版本的冲突的来源。 
上图的例子,表明 cruator-client 这个 Jar 包,有 2 个传递依赖,

分别为 2.5.0 版本和 4.0.1 版本。冲突的描述为: 

	omitted for conflict with 2.5.0.

	由于与 2.5.0 版本冲突而被省略 ,具体的层级在右边也一目了然了,
	
	所以 maven 最终根据最短路径优先原则选择了 2.5.0 版本,4.0.1 版本被忽略。 

6.3、解决冲突

6.3.1 排除法
还是上面的那个例子,现在生效的是 2.5.0,如果想生效 4.0.1。

只需要在 2.5.0 上面点 exclude 就行了。

在这里插入图片描述

6.3.2 版本锁定法
略微麻烦,不在展开解释,非开发人员一般接触不到,

七、打包应用

7.1 Maven打包

现在我们已经写好代码。需要将代码编译并打包为一个 Jar 包给客户。

默认 Maven 的 ArchTypemaven-archetype-quickstart 是无法打包成一个Jar包的

(这一点比较坑)。需要我们修改pom文件, 修改如下,

在这里插入图片描述

在 build-plugins 标签中插入如下的代码。 
<plugin> 
<artifactId>maven-assembly-plugin</artifactId> 
<configuration> 
<finalName>${project.artifactId}-${project.version}-all</finalName> 
<appendAssemblyId>false</appendAssemblyId> 
<archive> 
<manifest> 
<mainClass>ysoserial.GeneratePayload</mainClass> 
</manifest> 
</archive> 
<descriptor>assembly.xml</descriptor> 
</configuration> 
<executions> 
<execution> 
<id>make-assembly</id> 
<phase>package</phase> 
<goals> 
<goal>single</goal> 
</goals> 
</execution> 
</executions> 
</plugin> 
其中 mainClass 修改为你自己的 main 函数所在类的全限定名。

注意,通过 maven 打 包我们的项目,默认是不会包含通过 add as library 所添加的依赖。

因为 add as library 所添 加的依赖是由 IDEA 管理。 
最后直接一点,即可。打包后的文件在 target 目录中 。

在这里插入图片描述

7.2 IDEA打包

上边说maven打包存在一个缺点就是,他不会打包add as library 所添加的依赖,

但是我们通过IDEA大包就可以,而且不用在配置修改pom文件。
具体,直接点击  菜单栏 – project structure    点进去 

在这里插入图片描述

在对话框中点击 Artifacts,选择左上角的加号,选择 Jar – From Modules with depencies 

在这里插入图片描述

在这里插入图片描述

在 Main Class 选择你的 main 函数所在的 Class。点击 ok 即可配置成功。 

在这里插入图片描述


打包应用的时候,点击 IDEA 的菜单栏-Build-Build Artifaces 即可使用 IDEA 打包应用。 

在这里插入图片描述

在这里插入图片描述

打包完成过后的 Jar 包在 out 文件夹下 

小结:

1,	依赖管理  如何搜索jar包,如何添加到pom文件中
2,	怎么创建一个maven项目
3,	打包应用
	
		i.	Maven打包

	类似C语言静态链接,把你项目中需要的jar依赖存在自己的jar中,
	只将maven管理的依赖打包到jar包中,不管idea管理的依赖。
	优点方便,一次性配置好后,就是整一个标准,团队协助内都只能按照这个标准打包。

	   ii.	IDEA打包

	将Maven管理的依赖和idea管理的依赖,都打包到最终的jar中。
	

猜你喜欢

转载自blog.csdn.net/weixin_43970718/article/details/120730964