Maven《专家》管理项目
1.理解Maven
在以前的项目编写中,jar包管理令人头疼,SSM框架(30+的jar包)所以在项目的发展中,产生一系列的新技术Maven,Gradle(高新)
Maven项目对象模型,可以通过一小段的描述信息来管理项目的构建,报告和文档的项目管理工具软件
突出亮点:项目的依赖(jar包的管理)
以前的的项目中:
①项目jar包数量多,查找起来麻烦
②jar包之间的有时候依赖管理,但是版本之间有兼容的问题。所以解决兼容很难处理
③以前的项目响应的开发过程:编译,测试,打包,部署/发布(Maven插件)
2002年开源第一版,它是Apache开源组织内的Jarkata项目,管理,后来开源了
2.掌握Maven环境的搭建
Maven环境搭建的步骤如下:
①下载网址::https://archive.apache.org/dist/maven/maven-3/
3.5.0版本使用它
②右键解压得到指定的安装目录
主要关注其中bin目录下的mvn命令
主要关注其中的conf目录下的settings.xml核心配置文件
重工的conf目录下的settings.xml核心配置文件
测试是否安装成功
mvn -v 查看当前Maven的系统信息
可能出现问题:Maven命令无法运行,提示缺少JAVA_HOME(确认配置是否正确)
Maven命令无法运行,提示不是系统命令,需要配置MAVE_HOME并且引入parh环境变量
Maven提示版本不兼容,因为Maven是由java开发的,运行时需要jre要对应好版本
配置MAVEN_HOME方便后续IDE等工具的识别和使用,让的配置类似于JAVA_HOME配置
在path中记得引用%MAVEN_HOME%\bin
3.掌握Maven中的相关概念(术语)
3.1Maven的仓库概念
有了Maven之后,我们以后的项目,如果需要jar包,不需要再去下载jar包,然后放到项目的lib目录。只需要配置一些你需要 的依赖 jar包内容及可,g a v
当你项目编译运行时,它需要这些jar包,自动前往本地仓库根据描述信息去查找,如果能找到,直接使用,否则就会默认的去中央仓库寻找对应的jar包
特殊情况:如果公司开发时。a开发了公司的一个项目,这个模块是B项目中的需要的依赖,以前的话,我们需要将A的项目包打开,然后发给B进行依赖,但是现在有了Maven我们可以通过搭建私服解决问题
私服使用的思路:A将面目打包发送到公司的私服,B在 项目中直接填写好A项目的信息,就可以使用了。如果本地的仓库中没有项目包时,会首先前往私服下载,私服如果没有就前往中央仓库进行下载
本地仓库:缓冲在本地的jar包,集中地,默认的会在settings.xml中配置的地方为${user.home}/.m2/repository
你可以在安装目录的conf中的settings.xml中更改本地仓库位置(不推荐使用),因为他直接影响全局
或者你可以前往用户的家目录在家目录中创建一个.m2目录。然后将settings.xml
赋值过来一份进行修改,(推荐使用)如果配置了它,则你的配置只会影响到指定的用户
<localRepository>你的本地仓库目录</localRepository>
示例:
<localRepository>D:\Develop\apache-maven-3.5.0\repo</localRepository>
如果你无法创建.m2目录,可以按住shift+右键,去在本位置打开DOS命令行,执行mkdir .m2进行创建
私服:第三方机构,/本地公司,搭建的Maven仓库,一般不对外进行开放(阿里私服对外开放)
中央仓库:由maven团队维护的一个jar包集中地,几乎涵盖了市面上的所有的jar包
中央仓库的位置:- https://repo.maven.apache.org/maven2
3.2Maven的坐标概念
g(groupId):公司/组织的域名倒序
a(artifactld):项目名
v(version):版本
3.3Maven的项目规约
为了方便Maven的项目管理,识别,以及规范化,Maven项目要求应该由下方结构组成
| 目录结构 | 作用 |
| ------------------ | ------------------------------------------------------------ |
| src/main/java | 存放项目的.java文件(开发源代码) |
| src/main/resources | 存放项目配置文件,如果没有配置文件该目录可省略,如spring, mybatis配置文件等 |
| src/main/webapp | 存放web项目资源文件(web项目才有) |
| src/test/java | 存放所有测试.java文件(测试源代码) |
| src/test/resources | 存放测试配置文件,如果没有配置文件该目录可省略 |
| target | 项目输出位置,字节码和项目打包的文件会存到这(可无) |
| **pom.xml** | Maven项目核心配置文件(配置Jar包坐标)(Project Object Model)项目对象模型 |
未来我们在自己的项目中,通过pom.xml来编写依赖信息,配置依赖信息主要内容如下
```xml
<dependency>
<groupId>cn.dm</groupId>
<artifactId>dm-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
3.4Maven的作用域
作用域是控制jar何时生效的,何时被使用
①compile:编译时,测试时。等情况下会自动寻找相关的jar,(默认的作用域)
②test:在项目测试的时候才会被使用
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
③provided:编译,测试等情况下使用,但是最终发布的时候不会使用
Servlet-API:HttpServletRequest HttpServletResponses…
这类的jar包,在最终发布之后不需要使用,因为有对应的容器会提供相应的jar
④runtime:只在运行的时候才会去寻找指定的jar
mysql-connector-java.jar数据库的驱动连接java的驱动
⑤system 它表示在本地系统中查找哦对应的指定的jar包(一般是不会使用的)
域是控制
jar包的,何时被使用
com
3.5Maven 的传递依赖
在Maven中,我们可以实现传递依赖,及当你的项目依赖于comms-fileupload内容,但是他又会依赖commons-io内容,这时候当你的项目只需要描述fileupload,他也会将对应的io加载过来
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
</dependencies>
①如果除了commons-fileupload项目之外,我们又导入了另外的依赖,另外的依赖它也有传递依赖io,那么最终在项目中io回事什么样的版本,由谁来进行决定
答案:Maven会根据依赖的就近原则,哪个依赖在最后面,哪个依赖传递的优先级高,哪个依赖的传递的内容最近,传递依赖的优先级高
②如果我不想用它默认使用的传递依赖,?
你可以自己在pom.xml中显示配置一个对应的依赖即可或者排除掉你不喜欢的传递依赖即可
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
<exclusions>
<exclusion>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</exclusion>
</exclusions>
</dependency>
3.6Maven的生命周期
常用命令 | 说明 |
---|---|
mvn clean | 清除所有的编译文件 |
mvn compile | 编译Java源代码 |
mvn test | 运行测试代码;mvn test -Dtest=类名 // 可以通过-Dtest单独运行测试类 |
mvn package | 打包项目;mvn package -Dmanven.test.skip=true // 打包时不执行测试 |
mvn install | 将项目打包并安装到本地仓库 |
mvn deploy | 发布到本地仓库(私服)或者服务器 |
4.掌握Maven在项目中的使用
4.1使用命令行
在Maven中提供了大量的命令(插件)用于项目的构建和管理
其中我们可以利用Maven的一个命令来进行Maven项目的创建
mvn archetype骨架:generate生成 -DarchetypeCatalog骨架目录=internal(采用Maven内置的) -DarchetypeArtifactId骨架项目名=maven-archetype-quickstart(普通Java工程骨架) -DgroupId=项目信息 -DartifactId=项目信息 -Dversion=项目信息
``
mvn archetype:generate -DarchetypeCatalog=internal -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=cn.kgc -DartifactId=HelloWorld -Dversion=1.0-SNAPSHOT
可以通过更改骨架项目名称去进行生成不同的项目,例如:maven-archetype-webapp 创建普通web工程
直接使用Maven插件创建Eclipse和IDEA项目
`mvn eclipse:eclipse` 把一个普通项目转换为一个Eclipse项目。
`mvn idea:idea` 把一个普通项目转换为一个IDEA项目。
`mvn eclipse:clean` 将eclipse相关配置清除
`mvn idea:clean` 将IDEA相关配置清除
的基本使用
4.2使用eclipse进行Maven项目创建
- 打开Eclipse的首选项配置,搜索Maven,然后在`installations`选项中变更Maven安装目录
- 继续在首选项中查找对应的Maven的`User Settings`选项,在其中确认好是否已经识别了默认的用户级的配置设置,确认本地仓库地址是否正确,如果有变更记得进行应用(确认)。
- new -> other project -> 搜索maven -> Maven Project
- 可以选择骨架,也可以跳过骨架,然后finish即可
- 可以在`pom.xml`中添加一段插件代码用来指定JRE版本等信息
```xml
<build>
<plugins>
<!-- 设置编译版本为1.8 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
更改了pom.xml
,在Eclipse中需要你右键项目 -> Maven -> update …
多模块工程
4.3使用IDEA的进行Maven项目创建
在maven中,为了能够让项目更加面向对象,所以提出了一套父工程和子模块的概念
在父工程和子模块之间可以进行依赖传递和版本的锁定,
模块概念也是项目规模庞大的必然产物,也是对应的分布式开发的功能