Maven高级(附带点初级)
maven的作用:
1.项目构建:提供标准的,跨平台的自动化项目构建方式
2.依赖管理:方便快捷的管理项目依赖的资源(jar),避免资源的版本冲突问题
3.统一开发构建:提供标准的,统一的项目结构
仓库:
1.仓库:用于存储资源,包含各自jar包
仓库分为:本地仓库,私服,中央仓库(本地仓库就在自己电脑上,私服一般是在公司的时候,通过局域网传输jar)
坐标
Maven项目构建命令
maven构建命令使用mvn开头,后面添加功能参数,可以一次性执行多个命名,使用空格分隔
mvn compile #编译
mvn clean #清理
mvn test #测试
mvn package #打包
mvn install #安装到本地仓库
pom.xml:
<!--指定pom的模型版本-->
<modelVersion>4.0.0</modelVersion>
<!--打包方式,web工程打包为war,java工程打包为jar-->
<packaging>war</packaging>
<!--组织id-->
<groupId>com.itheima</groupId>
<!--项目id-->
<artifactId>web01</artifactId>
<!--版本号:release,snapshot-->
<version>1,0-SNAPSHOT</version>
<!--设置当前工程的所有依赖-->
<dependency>
<!--具体的依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependcy>
</dependcy>
<!--构建-->
<build>
<!--设置插件-->
<plugins>
<!--具体的插件配置-->
<plugin>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!--设置端口号-->
<configuration>
<port>80</pory>
</configuration>
</plugin>
</plugins>
</build>
依赖传递
依赖具有传递性
直接依赖:在当前项目中通过依赖配置建立的依赖关系
间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源
依赖传递冲突问题
可选依赖
可选依赖指对外隐藏当前所依赖的资源—不透明
//这依赖配置下面写上这个
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<optional>true</optional>
</dependency>
排除依赖
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本–不需要
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<optional>true</optional>
<exclusons>//这里是排除依赖配置
<exclusions>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusions>
</exclusons>
</dependency>
依赖范围
项目构建生命周期
Maven对项目构建的生命周期划分为3套
clean:清理工作
default:核心工作,例如编译,测试,打包,部署等
site:产生报告,发布站点等
这里注意,只要执行那个阶段,它上面的阶段都会被执行,就比如一个人18岁了,看到18岁所经历的事情,但是18岁之前所有的事情都发生了,才会到18岁。所以要从一岁开始的事情到18岁的事情,都要走一遍。
插件就是在18岁之前没有经过的事情,我给它插入一个事情的片段,让它有了这个事情的经历。也即是指定执行的阶段,他上面的阶段里面,插入一个新的阶段。
Maven高级(重点来了,前面的大多数会操作就行,重点总结Maven高级)
1.分模块开发与设计(重点)
就是将原工程中的目录拆分成一个个单独的模块,来替代之前的目录。
ssm_pojo拆分
新建模块
拷贝原始项目中对应的相关内容到ssm_pojo模块中
实体类(User)
配置文件(无)
ssm_dao拆分
ssm_service拆分
ssm_control拆分
小节:
聚合(重点)
在web层war
在不是web层jar
在一次性构建多个项目层pom(也就是聚合的空模块里面是pom)
继承(重点)
模块依赖关系维护
继承是用来解决各个模块版本问题,让各个模块的版本相同
继承与聚合的作用与异同点
属性
1.自定义属性
2.内置属性
3.Setting属性
4.Java系统属性
5.环境变量属性
工程版本
资源配置
先在pom文件属性中配置url的信息
如果是测试类中配置文件需要加载pom文件中定义的属性,那么只需要把上面的换成
<testResources>
<testResource>
<directory></directory>
<filtering></filtering>
</testResource>
</testResources>
//preperties文件中这么写就可以得到pom文件中配置的url信息,前提是配置资源文件对应信息要写对:
url={jdbc.url}
多环境配置
加载指定环境
跳过测试(了解)
第一种
第二种
第三种
私服
私服资源获取
idea环境中资源上传于下载
需要在setting.xml中配置访问私服的权限,也就是指定访问那个仓库,以及配置私服密码。
settings.xml配置文件(补充)
当我们下载安装好Maven时,在其安装目录的conf下存在一个settings.xml的配置文件,这是一个全局的maven配置文件,为了不影响这台计算机上的其他用户,一般选择将该文件copy到 ~/.m2/下边,作为一个用户层面的配置文件。
settings.xml文件中主要包含以下的元素:
**localRepository:**本地仓库的目录。默认是用户目录下面的.m2/repository目录。
interactiveMode:表示是否使用交互模式,默认是true;如果设为false,那么当Maven需要用户进行输入的时候,它会使用一个默认值。
offline:表示是否离线,默认是false。这个属性表示在Maven进行项目编译和部署等操作时是否允许Maven进行联网来下载所需要的信息。
**mirrors:**定义一系列的远程仓库的镜像,用于缓解远程仓库的压力。
**profiles:**用于指定一系列的profile。
activeProfiles:指定当前正在活跃的profile。
**servers:**表示当需要连接到一个远程服务器的时候需要使用到的验证方式。
<?xml version="1.0" encoding="UTF-8"?>
<settings>
<mirrors>
<mirror>
<!--This sends everything else to /public -->
<id>nexus</id> // 镜像id
<mirrorOf>*</mirrorOf> // 表示代理所有仓库
<url>http://nexus.d.xxx.net/nexus/content/groups/public</url> // 该镜像的地址
</mirror>
</mirrors>
<profiles>
<profile>
<id>development</id>
<repositories> // 构件的仓库
<repository>
<id>central</id>
<url>http://nexus</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories> // 插件的仓库
<pluginRepository>
<id>central</id>
<url>http://nexus</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>development</activeProfile> // 对于所有的pom,上边定义的id=development的profile都是活跃状态的
</activeProfiles>
<servers>
<server>
<id>archiva.internal</id> // release版本的用户名和密码
<username>yangwenqiang</username>
<password>pwdpwd</password>
</server>
<server>
<id>archiva.snapshots</id> // snapshot版本的用户名和密码
<username>yangwenqiang</username>
<password>pwdpwd</password>
</server>
</servers>
</settings>
下边我们重点说两个比较有用的配置:
**:**镜像,如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。说白了,任何一个可以从仓库Y获得的构件,都能够从它的镜像中获取。在上边的示例中,我们使用中配置的http://nexus.d.xxx.net/nexus/content/groups/public来代理所有的远程仓库,其实这个代理一般情况下是你们公司的内网搭建的私服,在局域网内,加快访问速度等作用。
profiles: 可以配置构件和插件的远程仓库,并且可以通过来配置多个profile,最后通过<activeProfiles>来指定当前处于活跃状态(即有效的)的profile配置是哪一个。
idea访问私服与组件上传
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6l5KLwR0-1667628910858)(Maven简介.assets/image-20221104222032232.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y1lQBjPD-1667628910859)(Maven简介.assets/image-20221104222139954.png)]
像。说白了,任何一个可以从仓库Y获得的构件,都能够从它的镜像中获取。在上边的示例中,我们使用中配置的http://nexus.d.xxx.net/nexus/content/groups/public来代理所有的远程仓库,其实这个代理一般情况下是你们公司的内网搭建的私服,在局域网内,加快访问速度等作用。
profiles: 可以配置构件和插件的远程仓库,并且可以通过来配置多个profile,最后通过<activeProfiles>来指定当前处于活跃状态(即有效的)的profile配置是哪一个。
idea访问私服与组件上传