回家了,好鵺~

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


文章目录

  • Maven概述
    • 作用
      • 依赖管理
      • 项目构建功能
    • 传统项目
    • 仓库类型
    • maven的配置
    • pom文件
  • maven约定(项目结构)
  • 安装和配置maven
    • 添加镜像
  • java工程转换为maven工程
    • 良好习惯
  • maven常用命令
    • mvn complie
    • mvn clean
    • mvn package
    • mvn install
  • maven依赖
    • 引用本地仓库
    • 引用中央仓库
  • maven建立模块功能
    • 什么是多模块功能
    • 例子
  • jar包冲突问题解决
    • 什么是jar包冲突
    • 使用Maven Helper
  • 私服搭建

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

闭关修炼(十八)maven相关推荐

  1. python圣斗士修炼(十八):访问mysql数据库

    安装驱动 windows: 首先要确定自己已经安装pip 1. 查看是否安装: C:\Users\Administrator>pip -V pip 9.0.1 from d:\python27\ ...

  2. 闭关修炼(八)反射机制

    文章目录 反射 什么是反射机制? 反射机制的作用 通过java反射机制创建对象例子 使用默认无参构造函数创建对象 使用有参构造函数创建对象 怎么禁止反射机制? spring中的运用场景 jdbc中的运 ...

  3. Java闭关修炼64课 很适合新手学习的JAVA视频教程

    Java闭关修炼64课 很适合新手学习的JAVA视频教程 java闭关修炼第一课 什么是java(1).rar   java闭关修炼第一课 什么是java.rar   java闭关修炼第七课 基础语言 ...

  4. 十月一“闭关修炼”,读完这些Java技术栈,愿金九银十过五斩六

    十月一由于疫情还是有很多人为了安全不会去旅游,实际上,对于有跳槽打算的人来说,现在正是"闭关修炼"的好时机,但很多人不知道从何开始学习,也正为即将到来的金九银十发愁!今天,小编就要 ...

  5. kafka maven 依赖_SpringBoot入门建站全系列(二十八)整合Kafka做日志监控

    SpringBoot入门建站全系列(二十八)整合Kafka做日志监控 一.概述 Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端 ...

  6. 闭关修炼(二十五)基础web安全

    不是特别难,主要是积累经验 赶紧学springboot去了,好拖延啊.捂脸 文章目录 表单重复提交 前端解决方法 接口如何防止模拟http请求 使用Filter防止XSS攻击 SQL注入 常见的攻击有 ...

  7. 无穷级数求和7个公式_考研数学闭关修炼习题讲解(16)无穷级数 附(6)补充解释

    假期鸽了很久,今天我要分享的是无穷级数,数一的专场. 今天的内容一共有9题,一起加油吧! [1] 本题考查无穷级数的判敛.本题用到的是通过放缩(比较判别法)直接判断敛散性,属于简单题,把后面的sin放 ...

  8. 八十八、Python | 十大排序算法系列(下篇)

    @Author:Runsen @Date:2020/7/10 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  9. 五十八、深入了解 Java 中的注解和自定义注解

    @Author:Runsen @Date:2020/7/9 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  10. Android项目实战(三十八):2017最新 将AndroidLibrary提交到JCenter仓库(图文教程)...

    Android项目实战(三十八):2017最新 将AndroidLibrary提交到JCenter仓库(图文教程) 原文:Android项目实战(三十八):2017最新 将AndroidLibrary ...

最新文章

  1. 设置RabbitMQ远程ip登录
  2. 【ARM-Linux开发】【CUDA开发】【深度学习与神经网络】Jetson Tx2安装相关之二
  3. EM算法和GMM(下)
  4. 只需要30秒就可以做的30件事情:你会选择哪一件来改变世界?
  5. 2017. 网格游戏
  6. HDUOJ1043Eight 八数码问题可以构造解
  7. TaskScheduler一个.NET版任务调度器
  8. ThinkPHP实现登陆功能
  9. 电子工业出版社PPT图书优秀作者上海书城讲座
  10. Instagram: 用Django服务30亿用户
  11. beetl模板使用场景_BeetlSQL3性能
  12. 神器 git clean
  13. web网页设计期末课程大作业~超高仿英雄联盟LOL游戏官网设计与实现(HTML+CSS+JavaScript)
  14. 韩国5G产品定价及营销策略剖析
  15. C# EF框架(一)配置
  16. Jetson TX2 挂载SATA SSD 并设置为启动盘
  17. 百分比,千分比,万分比,百分比或百分吕,千分率等
  18. recap 360.html,Autodesk ReCap
  19. 【学习笔记】严格反馈和纯反馈系统
  20. postfix+dovecot+foxmail虚拟用户配置

热门文章

  1. 手机信号延迟测试软件,使用Fing在手机上诊断网络状况
  2. 试题 算法训练 唯一的啥子ALGO-973
  3. 机器人唱歌bgm_Soul app里面机器人匹配的那首bgm是什么呀?好好听!!!求玩过soul的大神告知!!...
  4. 富文本中添加字体选项功能_扑中的字体功能
  5. 二十一世纪大学英语读写基础教程学习笔记(原文)——8 - Young and in Love(超年轻恋人)
  6. 工程测量:坐标正反算公式
  7. SQL Server AlwaysOn读写分离配置
  8. v-on:click(简写@click)绑定事件加括号和不加括号
  9. android时钟需求分析,电子时钟设计(单片机)需求分析
  10. IT也疯狂:十一长假特别篇