maven学习和maven聚合工程搭建

news/2025/2/16 5:52:22/

1.学习maven

maven的概念

项目管理工具 ,对jar进行依赖管理,编译,打包,单元测试,安装,部署,贯穿整个项目

为什么要学maven

要解决的问题:

  • 不同的开发工具开发出来的项目目录结构不一样,导致不能相互导。
  • 每次从svn服务器检出项目因为 jar包太多了导致速度很慢
  • 项目使用的jar包版本每次下载和升级好麻烦,得自己寻找jar包的下载地址,找到了不一定能下,下载下来版本不一定对。

maven使命:

  • ide解耦
  • 统一jar包资源路径
  • 版本管理
  • 统一项目结构
  • 第三方良好的集成

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

maven仓库

  • 1、本地仓库 : 相当于缓存。本地仓库存储在本地的磁盘当中,里面存放的是经常使用的jar包。
  • 2、 远程仓库 : 也叫做私服。基本每个公司都会有自己的私服,当本地的磁盘中不存在需要的jar包资源,则会请求私服进行资源下载。
  • 3、 中央仓库 : 远程仓库,由jar专业团队统一维护。

maven的使用

使用maven前需要先配置好jdk

  • 配置环境变量

image.png
image.png
image.png

  • 修改maven的配置文件settings.xml

1.配置本地库的位置
image.png
2.配置阿里云镜像

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

3.配置jdk版本

<profile><id>jdk-1.8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source>    <maven.compiler.target>1.8</maven.compiler.target>    <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>   </properties></profile>

idea创建maven项目

建议不用选骨架,可以直接选maven创建项目后自己手动修改pom文件

idea集成maven

一定要全局设计IDEA的Maven配置
image.png
image.png
image.png

什么是gav坐标

image.png
根据gav坐标找对应的jar包。

比如:mysql驱动包
g:mysql
a:mysql-connector-java
v:8.0.22

改pom文件

POM(project object model)是Maven对一个单一项目的描述

  • packaging不写的话,默认是打jar包,对于开发web项目的话,要写成war
 <packaging>war</packaging>
  • 对于web项目的话,要在src下的main下建webapp,然后刷新下maven。

image.png
image.png

  • 写各种jar包依赖

可以去maven中央仓库去搜需要用的jar。网址:https://mvnrepository.com/

  • 对于sql映射文件是跟dao接口在一起的情况,部署项目的时候默认是不会把sql映射文件打进去的,解决如下:

image.png

 <build><resources><resource><directory>src/main/resources</directory></resource><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource></resources>

当然我习惯把sql映射文件单独放到resources下的mapper文件夹的,就不用操心这个问题

将之前的ssm项目改成maven项目
<?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>com.jf3q</groupId><artifactId>maven_demo</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.2.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.2.RELEASE</version></dependency><!--数据库--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency><dependency><groupId>commons-pool</groupId><artifactId>commons-pool</artifactId><version>1.6</version></dependency><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency><!--mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.1</version></dependency><!--mybatis-spring--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.3</version></dependency><!--分页--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.3.1</version></dependency><!--jackson--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.11.1</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.11.1</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.11.1</version></dependency><!--junit--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.2</version></dependency><!--文件上传--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.2</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!--日志--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.25</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!--aop联盟--><dependency><groupId>aopalliance</groupId><artifactId>aopalliance</artifactId><version>1.0</version></dependency><!-- 这个是spring事务控制的jsr包 --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.6.9</version></dependency><!-- servlet-api --><!--打war包必须用的--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.0</version><scope>provided</scope></dependency></dependencies></project>

maven的常用命令

  • mvn compile --只编译main目录中的java文件
  • mvn test  测试,运行的是test/java中的代码
  • mvn package 打成 jar/war包,放在项目的target文件夹中
  • mvn install 将开发的模块放入本地仓库,供其他模块使用(放入的位置,是通过gav决定)
  • mvn clean 删除target目录(删除编译文件目录)
  • mvn deploy 将项目部署到Tomcat中,然后即可运行。

执行mvn命令:必须在pom.xml所在目录执行

2.maven聚合工程搭建

概念

多模块开发。多团队协同开发,分布式开发

案例

app项目为例,
image.png
image.png
10个人负责开发管理员端 A队 Tomcat是81端口,10个人负责开发 开发者端 B队 Tomcat是82端口
image.png
其中app-common是公共的,打jar包,dev和admin都要依赖他,要理解maven依赖的传递性。app-dev和app-admin都是打war包,用不同端口的Tomcat跑起来。
admin模块截图
image.png
dev模块截图
image.png

各模块的pom

父级:

 <!--父级,根模块必须配置这个-->
<packaging>pom</packaging>
<!--包含的子模块-->
<modules><module>app-admin</module><module>app-dev</module><module>app-common</module>
</modules>
<!--所有模块都用到的依赖,具有传递性-->
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.2.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.2.RELEASE</version></dependency><!--数据库--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency><dependency><groupId>commons-pool</groupId><artifactId>commons-pool</artifactId><version>1.6</version></dependency><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency><!--mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.1</version></dependency><!--mybatis-spring--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.3</version></dependency><!--分页--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.3.1</version></dependency><!--jackson--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.11.1</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.11.1</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.11.1</version></dependency><!--文件上传--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.2</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!--日志--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.25</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!--aop联盟--><dependency><groupId>aopalliance</groupId><artifactId>aopalliance</artifactId><version>1.0</version></dependency><!-- 这个是spring事务控制的jsr包 --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.6.9</version></dependency><!-- servlet-api --><!--打war包必须用的--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.0</version><scope>provided</scope></dependency></dependencies>

common:公共模块,一般是工具类,实体类,dao层

 <packaging>jar</packaging>
<!--本模块独有的依赖-->
<dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.26</version></dependency></dependencies><build><!--防止运行项目的时候dao下的sql映射文件丢失--><resources><resource><directory>src/main/resources</directory></resource><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource></resources></build>

dev:开发者模块

<packaging>war</packaging><!--本模块独有的依赖--><dependencies><!--公共模块引入进来--><dependency><groupId>com.jf3q</groupId><artifactId>app-common</artifactId><version>1.0-SNAPSHOT</version></dependency><!--剩下独有的依赖省略 ,如果有的话可以自行添加--></dependencies>

admin:管理员模块

<packaging>war</packaging><!--本模块独有的依赖--><dependencies><!--公共模块引入进来--><dependency><groupId>com.jf3q</groupId><artifactId>app-common</artifactId><version>1.0-SNAPSHOT</version></dependency><!--剩下独有的依赖省略 ,如果有的话可以自行添加--></dependencies>

作业:

1.把app项目改成单模块的maven项目

2.把app项目改成多模块的maven项目


http://www.ppmy.cn/news/1277873.html

相关文章

龙芯loongarch64服务器编译安装paddlepaddle

前言 PaddlePaddle (Parallel Distributed Deep Learning,中文名飞桨)是百度公司推出的开源,易学习,易使用的分布式深度学习平台,现阶段各行各业均追求国产化,软件行业也一样,所有需要在龙芯服务器上编译安装paddlepaddle。 官方教程 官方教程里面很多没有讲解到,安…

解释Keil-MDK中Code、RO-data、RW-data、ZI-data

一、概念 Code&#xff1a;即代码域&#xff0c;它通常是指编译器生成的机器指令&#xff0c;这些内容会被存储到ROM区。 RO-data&#xff1a;Read Only data&#xff0c;即只读数据域&#xff0c;它指程序中用到的只读数据&#xff0c;这些数据被存储在ROM区&#xff0c;因而…

C语言数据结构-排序

文章目录 1 排序的概念及运用1.1 排序的概念1.2 排序的应用 2 插入排序2.1 直接插入排序2.2 希尔排序2.3 直接排序和希尔排序对比 3 选择排序3.1 堆排序3.2 直接选择排序 4 交换排序4.1 冒泡排序4.2 快速排序4.2.1 挖坑法14.2.2 挖坑法24.2.3 挖坑法3 5 并归排序6 十万级别数据…

css学习笔记5

css学习笔记5 5.CSS列表属性6.CSS表格属性1.边框相关属性&#xff08;其他元素也能用&#xff09;&#xff1a;2.表格独有属性&#xff08;只有table标签才能使用&#xff09;&#xff1a; 7.CSS背景属性8.CSS鼠标属性 5.CSS列表属性 列表相关的属性&#xff0c;可以作用在ul、…

Ai绘图简介

1、Ai能干什么&#xff1f; 其是一款矢量图形设计软件&#xff0c;可以与PS结合制作GIF动画&#xff0c;与AE结合制作特效动画。对提升自己审美具有重要意义。 2、学习Ai的思路 Ai的原理和操作有限&#xff0c;因此每个人都可以学会&#xff0c;但学习速度和灵活程度由自己把…

回调地狱Axios

## 解决回调地狱&#xff1a;Promise 和 Axios 在现代的前端开发中&#xff0c;处理异步操作和网络请求是非常常见的任务。使用 Promise 和 Axios 可以更轻松地管理异步代码和发送网络请求。 ### Promise Promise 是一种用于处理异步操作的对象&#xff0c;它有三种状态&…

v-if与v-show的区别

v-if指令可以控制一个元素的显示和隐藏&#xff0c;那么它是如何实现的&#xff1f;它和看起来很像的v-show指令有什么区别呢&#xff1f; 如果v-if指令的值为假&#xff0c;那么这个元素不会被插入DOM。 下面的代码 <div v-if"true">one</div><div…

目标检测入门体验,技术选型,加载数据集、构建机器学习模型、训练并评估

Hi, I’m Shendi 1、目标检测入门体验&#xff0c;技术选型&#xff0c;加载数据集、构建机器学习模型、训练并评估 在最近有了个物体识别的需求&#xff0c;于是开始学习 在一番比较与询问后&#xff0c;最终选择 TensorFlow。 对于编程语言&#xff0c;我比较偏向Java或nod…