Maven一篇就够了

it2023-02-21  80

一、Maven基本概念


跨平台项目管理工具,主要服务基于Java平台的项目构建 依赖管理

1.1 项目构建

过程: 【清理】—>【 编译】—>【 测试】—>【 打包】—>【 部署】

1.2 依赖管理

使用Maven来管理项目中的jar包,自动下载项目中所需要的jar文件,统一管理jar包之间的依赖关系

那么使用maven可以带来哪些好处呢?

首先看我们传统的项目:

一个项目就是一个工程

项目非常大,就不适合继续用package来划分业务模块,最好一个模块对应一个工程

项目中的jar包需要手动导入,没有的需要到官网去下载,可能同样的jar包存储在同一工程下,会造成存储空间的浪费

二、Maven的安装


Maven下载

下载之后,解压即可,记住安装目录不要包含中文和空格!!!不然可能会出现问题

2.1 Maven目录结构

解压目录长成这样:

可以设置maven的全局环境变量,来检查maven的环境是否正确

新建MAVEN_HOME:E:\apache-maven-3.6.1-bin\apache-maven-3.6.1

编辑Path加入 %MAVEN_HOME%\bin

cmd输入mvn -v指令出现:配置正确!!!

2.2 Maven的基本命令:

mvn clean:清理

mvn compile :编译主程序

mvn test-compile :编译测试程序

mvn test:运行测试程序

2.3 Maven的构建过程

清理:将target 目录删除

编译:java源程序生成class字节码文件

测试:自动测试,调用junit程序

报告:测试程序执行的结果

打包:web工程大war包,Java工程打jar包

安装:Maven项目特有的概念,将jar包复制到仓库

部署:将web工程生成的war包复制到tomcat中

2.4 自动创建maven

mvn archetype:generate -DarchetypeCatalog=internal

三、Maven仓库


3.1 仓库分类

本地仓库

当前系统部署的本地仓库,为当前系统中的maven服务

远程仓库

中央仓库:架构在互联网上,全世界通用

中央仓库镜像,分担中央仓库的流量,提升访问速度

私服:搭建在局域网的环境中,为局域网的maven仓库提供服务

修改本地仓库的位置:打开maven下的conf文件夹中的setting.xml文件修改为

<localRepository>E:/MavenRespotion</localRepository>

这样下载的依赖会导入到这个目录下

提高下载速度,还可以使用阿里镜像:

<!-- 使用阿里镜像中的maven仓库 --> <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors>

3.2 Eclipse中配置maven仓库

如图:确定即可、

补充:如果使用IDEA开发工具,这样配置:

在maven中指定jdk的版本:

局部的配置在pom.xml中添加:

<build> <plugins> <plugin> <!-- 指定maven编译的jdk版本,如果不指定,maven3默认用jdk 1.5 maven2默认用jdk1.3 --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <!-- 一般而言,target与source是保持一致的,但是,有时候为了让程序能在其他版本的jdk中运行(对于低版本目标jdk,源代码中不能使用低版本jdk中不支持的语法),会存在target不同于source的情况 --> <source>1.8</source> <!-- 源代码使用的JDK版本 --> <target>1.8</target> <!-- 需要生成的目标class文件的编译版本 --> </configuration> </plugin> </plugins> </build>

如果想全局的配置maven中的JAVA JDK的版本(这里使用JDK1.),在maven中的settins.xml文件中配置版本即可

<profiles> <profile> <id>jdk-1.8</id> <activation> <jdk>1.8</jdk> <activeByDefault>true</activeByDefault> </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> </profiles>

四、Maven依赖


依赖范围

依赖范围scope用来控制依赖jar包和编译,测试,运行的classpath的关联,主要取值

compile: 默认编译依赖范围,对于编译,测试运行三种classpath都有效

test: 测试依赖范围,只对于测试classpath有效

<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency>

provided: 已提供依赖范围,对于编译,测试的classpath有效,对于运行无效,因为容器已经提供

<!-- 引入Servlet容器中相关依赖 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency>

runtime: 运行时提供

如:jdbc驱动

生命周期

Maven生命周期为了对所有的构建过程进行抽象和统一,包括项目清理,初始化,编译测试打包部署等构建工具

maven的三套相互独立的生命周期分别是:

Clean LifeCycle: 在构建之前清理

Default LifeCycle:构建核心部分编译测试部署

Site LifeCycle:生成项目报告,站点,发布站点

五、聚合与继承


聚合: 一次构建多个项目模块,需要对多个项目模块进行聚合

继承:为了消除重复,将相同的部分提取出来

聚合maven的项目结构如下:

jektong-parent

|===pom.xml: 聚合四个工程

|===jektong-entity

 ​ ​  ​ |===src

​ ​  ​  ​ |===pom.xml

|===jektong-dao

 ​  ​  ​ ​ |===src

 ​  ​  ​ ​ |===pom.xml:依赖entity层

|===jektong-service

 ​  ​  ​ ​ |===src

 ​  ​  ​ ​ |===pom.xml:依赖dao层

|===xms-web

 ​  ​  ​ ​ |===pom.xml: 依赖service层

​ 依赖谁就在pom.xml中导入谁的依赖即可:比如dao依赖entity,就在jektong-dao中导入

<dependencies> <dependency> <groupId>com.jektong</groupId> <artifactId>jektong-entity</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies>
最新回复(0)