回家了,好鵺~
之前写了一篇关于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