闭关修炼(十八)maven

回家了,好鵺~
在这里插入图片描述

之前写了一篇关于maven的介绍和安装
https://blog.csdn.net/qq_19841133/article/details/109479902



Maven概述

Maven 即项目对象模型(POM,Project Object Model),它可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。

它包含了一个项目对象模型,一组标准集合,一个项目生命周(Project Lifecycle),一个依赖管理系统(Dependency Management System)。

java互联网级项目基本使用maven进行项目管理。

RPC远程调用:dubbo接口项目直接发布私服仓库,别人要使用直接去私服拉取即可

作用

依赖管理

Maven 的核心特性就是依赖管理。在传统项目开发中,必须将工程所依赖的 jar 包导入到工程中,随着工程规模变大,jar 包的管理变得非常困难,而且工程也变得越来越大。

Maven 项目管理工具可以自如地应对这些问题。

它不直接将 jar 包导入到工程中,而是通过在 pom.xml 文件中添加所需 jar 包的坐标,引入对该 jar 包的依赖。

这样就很好的避免了将 jar 直接复制到项目中,而是在需要用到 jar 包的时候,去查找pom.xml 文件中的坐标,到一个专门用于存放 jar 包的仓库(maven 仓库)中,根据坐标找到并使用这些 jar 包。

项目构建功能

一步构建。

实际应用中的项目,往往都要经历编译、测试、运行、打包、安装、部署等一系列项目构建过程。Maven 具有项目构建功能,可以对项目从编译、测试、运行、打包、安装、部署整个过程进行管理,非常方便。

传统项目

传统方式加入jar包放入web-inf lib文件夹,各个项目都要添加相同的jar包,占用硬盘资源。

需要去官网下载jar包

项目整合需要解决jar包冲突,自己找对应的版本的jar。

仓库类型

本地仓库:本机上的仓库,用来存储从远程仓库或中央仓库下载的插件和 jar 包,当项目使用一些插件或 jar 包时,优先从本地仓库查找

远程仓库:如果项目需要插件或者 jar 包,本地仓库中没有,默认去远程仓库下载。远程仓库可以在互联网内,也可以在局域网内。

中央仓库: 在 Maven 中内置一个远程仓库地址
http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,由Maven 团队自己维护,包含了世界上大部分流行的开源项目构件。

私服:企业自行搭建的仓库,供企业内部使用;

其他公共库:如阿里云仓库。如果下载官方仓库的库太慢可以修改setting.xml镜像到阿里云仓库

maven的配置

在这里插入图片描述
bin中存放可执行的二进制文件
conf存放setting.xml
lib运行maven所依赖的jar包

pom文件

管理依赖信息,管理jar包信息

maven约定(项目结构)

即maven项目结构
src/main
src/main/java: 存放核心编写hava文件
src/main/resources: 存放配置文件

src/test
src/test/java:测试java编写代码文件,不会提交
src/test/resources:测试配置文件

安装和配置maven

idea自带有,可以省略。

以前的博客有写,看之前的吧

https://blog.csdn.net/qq_19841133/article/details/109479902

添加镜像

(如果要添加私服地址也是在这里加)

阿里云镜像:

<mirror>
    <id>alimaven</id>
    <mirrorOf>central</mirrorOf>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>

打开settings.xml 复制进去
在这里插入图片描述

java工程转换为maven工程

先创建一个传统的java工程
在这里插入图片描述

创建好了一个传统的java项目,把src文件夹删掉
在这里插入图片描述

改成maven结构
在这里插入图片描述

右键项目目录,添加项目支持
在这里插入图片描述
把maven加上,确定

编辑pom文件
在这里插入图片描述
然后修改项目版本,一般都是4.0.0不用改,写上自己的团队id和jar包id,团队id是com.xxx或者xxx.xxx随意起,jar包id为自己的项目名,版本写当前版本比如1.0

<?xml version="1.0" encoding="UTF-8"?>
<?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">
    <!--    项目版本    -->
    <modelVersion>4.0.0</modelVersion>
    <!--    团队id-->
    <groupId>com.yyz</groupId>
    <!--    jar包唯一id-->
    <artifactId>traditional-project-change-to-maven</artifactId>
    <!--    版本-->
    <version>1.0</version>
</project>

良好习惯

写main/java代码去test下进行单元和集成测试

maven常用命令

打开cmd
在这里插入图片描述
进入项目根目录
在这里插入图片描述

输入 mvn compile
在这里插入图片描述
根目录下会生成target目录
在这里插入图片描述
target目录是目标输出目录,classes目录存放编译的class文件
在这里插入图片描述

其实不用开cmd这么麻烦,用idea直接可以操作了,点m图标选命令直接操作
在这里插入图片描述

mvn complie

编译项目,刚刚演示过了

mvn clean

清除操作

输入mvn clean指令
在这里插入图片描述

target目录就被清除掉了
在这里插入图片描述

mvn package

项目编译并打包
在这里插入图片描述
打开target文件夹,最下面就能发现项目的jar包了
在这里插入图片描述


写在后面,war包属于web项目的打包,打war包就可以发布到tomcat中去了,tomcat自动解压war包,而springboot打包又是jar包,这是因为spring boot中自带了tomcat,直接可以把它看成一个应用程序作所以为jar包打包了。

在pom.xml可以选择当前项目是什么类型的,标签为<packaging>,类型有jar、war、pom等等

<?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">
    <!--    项目版本    -->
    <modelVersion>4.0.0</modelVersion>
    <!--    团队id-->
    <groupId>com.yyz</groupId>
    <!--    jar包唯一id-->
    <artifactId>traditional-project-change-to-maven</artifactId>
    <!--    版本-->
    <version>1.0</version>
    <!--    选择当前项目类型-->
    <packaging>jar</packaging>

    <dependencies>
     
    </dependencies>

</project>

mvn install

将项目发布到本地仓库,这次用idea操作
在这里插入图片描述

在这里插入图片描述
打开自己的本地仓库
在这里插入图片描述
就能发现自己的包
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

maven依赖

引用本地仓库

再新建一个maven项目,试着引入自己的jar包

添加dependency标签,使用groupId、artifactId、version坐标引用自己jar包

<?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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>maven-test-reference-my-package</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.yyz</groupId>
            <artifactId>traditional-project-change-to-maven</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>
</project>

在test文件夹进行测试

在这里插入图片描述

没问题行了
在这里插入图片描述

引用中央仓库

在这网址里搜索所需的jar包,引入进pom文件即可
https://mvnrepository.com/

搜索jar包
在这里插入图片描述
选择版本
在这里插入图片描述

复制dependency
在这里插入图片描述
快速跳过,都会了都会了

maven建立模块功能

什么是多模块功能

工程在多数情况下是多模块化的

项目一般在java目录下有很多包,比如pojo、service、mapper、controller,很多分层的包都放在一个项目中,这样其实是不好的,如果项目多了,要重用一个接口或者函数,就在每个项目中重复拷贝,不便于修改,不能解决复用问题。

在大公司中会将一个项目分成多个子项目,如分成utils、service、web等子项目,子项目顶层是父工程parent。

子项目都继承parent工程,子项目之间循环依赖,controll依赖service,service依赖mapper。

这么做子项目都可以打包成一个jar提供给其他团队进行调用。dubbo服务化基本都是这样maven管理

例子

先创建一个maven项目作为父工程
在这里插入图片描述
编辑父工程的pom文件,修改项目类型为pom,pom是给子项目继承用的意思
在这里插入图片描述
然后随便引用一些jar包,模拟真实的环境
在这里插入图片描述
右键根目录,新建module,选择maven项目
在这里插入图片描述
idea自动帮我设置好了parent
在这里插入图片描述
pom文件也自动生成了parent标签
在这里插入图片描述
当然可以自己新建maven项目,然后自己在pom文件添加parent标签标识这个项目是子项目。

<parent>
	<artifactId>multi-module-parent-test</artifactId>
	<groupId>com.yyz</groupId>
	<version>1.0</version>
</parent>

此时父工程会多加modules标签标识自己被继承的子项目

在这里插入图片描述

改成web项目,之后添加web应用支持,packaging改成war
在这里插入图片描述
如果web文件夹没有小蓝点,对项目按F4,弹出project structure
在这里插入图片描述
在这里插入图片描述
点选Web
在这里插入图片描述
在右边把网页资源目录 web resource direction改一下
在这里插入图片描述
改成你的web文件夹
在这里插入图片描述

重启tomcat,显示主页正常即可
在这里插入图片描述

其他子项目controller、service、mapper同理,packaging方式默认为jar,可以不用加

jar包冲突问题解决

什么是jar包冲突

具体的说,在你的项目中,使用了两个Jar包,分别是A和B。现在A需要依赖另一个Jar包C,B也需要依赖C。但是A依赖的C的版本是1.0,B依赖的C的版本是2.0。这时候,Maven会将这1.0的C和2.0的C都下载到你的项目中,这样你的项目中就存在了不同版本的C,这时Maven会依据依赖路径最短优先原则,来决定使用哪个版本的Jar包,而另一个无用的Jar包则未被使用,这就是所谓的依赖冲突。

比如log4j,log4j-core本身是依赖了log4j-api的,但是因为一些其他的模块也依赖了log4j-api,并且两个log4j-api版本不同,所以我们使用<exclusion>标签排除掉log4j-core所依赖的log4j-api,这样Maven就不会下载log4j-core所依赖的log4j-api了,也就保证了我们的项目中只有一个版本的log4j-api。

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.10.0</version>
    <exclusions>
        <exclusion>
        <artifactId>log4j-api</artifactId>
        <groupId>org.apache.logging.log4j</groupId>
        </exclusion>
    </exclusions>
</dependency>

使用Maven Helper

它是idea的一个插件,可以自己去装一下
在这里插入图片描述
在插件安装好之后,我们打开pom.xml文件,在底部会多出一个Dependency Analyzer选项

在这里插入图片描述
在这里插入图片描述
右边如果有冲突的依赖会标红, 找到标红的依赖,点击右键,然后选择Exclude即可排除冲突版本的Jar包即可

私服搭建

neuxs搭建。

没用过,也不需要…

放篇博客有空再学习下…https://www.cnblogs.com/knowledgesea/p/11190579.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值