提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
我们为什么要使用Mven呢?在随着项目模块的不断扩充Maven可以更好的让我们大大提高开发效率和更好的统一管理我们的模块和项目,让我们来聊聊一些关于Maven的基本操做
一、Maven安装
maven的安装没什么好说的
二、关于maven配置
在maven得配置文件中地conf目录下的setting.xml文件中可以进行配置
1.这里的配置的路径在pom文件引入依赖就会首先到这个路径下去查找,没有的化才会到中央仓库下载
2.在mirrors的标签内可以配置你的中央仓库这里的是阿里云仓库,如果你的本地仓库没有找到就会到你配置的这里去查找
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
在idea中设置项目得依赖路径(注意这里得配置只相对于当前项目)
2.Maven命令
生命周期
Maven对项目进行构建过程中分为三套互相独立的生命周期,每个生命周期中,都包含了不同的命令!
Clean Lifecycle(清理 生命周期): 在真正进行的构建之前会进行一些清理工作!
Default Lifecycle(默认 生命周期):它是整个项目构建的核心! 包含了 编译、测试、打包、安装、部署!
compile test package install deploy ===>>> 执行后面的命令,前面的命令会自动执行!
Site Lifecycle(站点 生命周期):生成项目报告,站点,发布站点!site命令
clean
执行mvn clean命令,将target目录删除,简单说,就是清理掉删上一次项目构建产生的文件!
compile
执行mvn compile命令,进行编译! 将src/main/java下面的文件(正式java文件)编译为class文件,输出到target目录!
test
执行mvn test命令,测试! 执行src/test/java 下的测试类,并编译为class文件输出到target目录下
package
执行mvn package命令,可以将正式代码对应(src/main)的java工程打成jar包!对于web工程打成war包!
install
执行mvn install命令,可以将打好jar包或者war包安装到本地Maven仓库!
分模块开发
在开发中我们为了减少代码复用和后期的可维护性,所以我们可以按照代码的功能或者模块来进行分离,当使用到的时候就像使用第三方依赖一样在pom文件中引入就可以了。这样就不同模块的方便维护降低耦合 ,容易进行团队开发。
当我们分模块的时候需要引用其他模块的时候需要执行 install,命令,把模块打成jar包保存在本地仓库中这样引入依赖后加载程序时才能找到。
步骤
(1) 创建Maven模块
(2) 书写模块代码
分模块开发需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分。拆分方式可以按照功能拆也可以按照模块拆。
(3)通过maven指令安装模块到本地仓库(install 指令)
团队内部开发需要发布模块功能到团队内部可共享的仓库中(私服)。
依赖传递和冲突
当进行分模块管理后呢随之而来的问题就是由于每个模块都有他们自己的依赖产生过多冗余的依赖,我们该怎么管理呢
要解决这些问题就要先谈谈依赖传递与冲突!
依赖的传递就像数学中的传递关系一样A=B,B=C,那么A=C换句话说呢就是如果A模块引入了B的依赖但是B模块又引入了C依赖那么A模块也就间接的引入了C依赖
对于依赖冲突由于有依赖的传递所以在多个依赖中可能会出现同一个依赖有不同的版本,对此maven中有三种策略(可以把这些依赖当作树形图一样)
1.特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的。
2.路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
3.声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
如果路径优先和声明优先的情况同时出现声明优先会覆盖路径有限
解决依赖冲突
方式一:
**排除依赖<exclusions>标签**
<dependency>
<groupId>com.system</groupId>
<artifactId>maven_04_dao</artifactId>
<version>1.0-SNAPSHOT</version>
<!--排除依赖是隐藏当前资源对应的依赖关系-->
<exclusions>
<exclusion>
<groupId>com.system</groupId>
<artifactId>maven_03_pojo</artifactId>
</exclusion>
</exclusions>
</dependency>
方式二:
也可以使用<option>true<option>隐藏掉当前依赖这样会使以来传递失效
依赖版本管理
<properties>
//自定义标签但是标签中的要与{值}相对应
<spring.version>5.2.10.RELEASE</spring.version>
</properties>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
统一管理模块与模块之间的依赖
maven的聚合
使用一个父类pom文件把专门管理依赖的文件(此工程没有代码实现只有pom文件)属于设计中的一个模块,由于依赖的增多那么每个模块之间的编译顺序变得复杂聚合用于快速构建项目。
//注意这个配置
<packaging>pom</packaging>
<!--设置管理的模块名称-->
//这样在执行此项目的时候配置的模块编译顺序maven就会自动管理了
//聚合工程管理的项目在进行运行的时候,会按照项目与项目之间的依赖关系来自动决定执行的顺序和配置的顺序无关
<modules>
<module>../maven_02_core</module>
<module>../maven_03_pojo</module>
<module>../maven_04_dao</module>
</modules>
maven继承
这里的配置可以和聚合写在一个module中因为他们都需要 pom的配置
可以把所有的依赖都放到父类依赖中但是最好不要把dependcies标签中的依赖直接放在pom文件中这样所有配置了父类模块的子类模块都会继承这些依赖,更好的是放在dependencyManagement标签中这样子模块使用时可以选择性的引入响应的依赖,子模块也不需要写版本号这样这个父模块的版本变化子模块自动跟着变
<!--配置当前子工程继承自parent工程-->
<parent>
<groupId>com.system</groupId>
<artifactId>maven_01_parent</artifactId>
<version>1.0-RELEASE</version>
<!--设置父项目pom.xml位置路径-->
<relativePath>../maven_01_parent/pom.xml</relativePath>
</parent>
```java
//在子模块中就可以这样引入父模块中的依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
多环境开发
- 我们平常都是在自己的开发环境进行开发,
- 当开发完成后,需要把开发的功能部署到测试环境供测试人员进行测试使用,
- 等测试人员测试通过后,我们会讲项目部署到生成环境上线使用。
- 这个时候就有一个问题是,不同环境的配置是不相同的,如不可能让三个环境都用一个数据库,所以就会有三个数据库的url配置,
- 我们在项目中如何配置?
- 要想实现不同环境之间的配置切换又该如何来实现呢?
//在父中的pom文件中可以配置这样的代码来控制不同环境下的数据配置比如数据库的ur
<profiles>
<!--开发环境-->
<profile>
<id>env_dep</id>
<properties>
<jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_db</jdbc.url>
</properties>
</profile>
<!--生产环境-->
<profile>
<id>env_pro</id>
<properties>
<jdbc.url>jdbc:mysql://127.2.2.2:3306/ssm_db</jdbc.url>
</properties>
<!--设定是否为默认启动环境-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!--测试环境-->
<profile>
<id>env_test</id>
<properties>
<jdbc.url>jdbc:mysql://127.3.3.3:3306/ssm_db</jdbc.url>
</properties>
</profile>
...
</profiles>
配置完环境后就可以使用左边的出现profile的按钮进行maven的环境切换,在生成的target文件中就可以看出不同环境中配置的数据不一样。
也可以使用命令进行环境切换
总结
今天就聊到这里吧,这里只是自己的一些学习心得来和大家一起分享,希望能给需要的人一些小小的帮助也希望有朋友指出不足或者发现其中的错误我会即使修改和改进。一起进步吧!!!