Maven
构建的过程是需要我们自己来的,而且idea和eclipse,甚至一些其他的开发工具构建的时候是不一样的。
那么有没有一种统一的方式,甚至无需手动点击,通过配置就可以了。
当然我们看到了我们呢的idea其实也是通过文件来记录构建信息的,那么既然构建如此重要,形成一套规范化的,统一的边界的构建工具势在必行。于是出现了maven,还有gradle,他们的功能异常强大。
好处:
统一管理jar包,自动导入jar及其依赖。
项目移植之后甚至不需要安装开发工作,只需要maven加命令就能跑起来,降低学习成本。
使我们的项目流水线成为可能,因为使用简单的命令我们就能完成项目的编译、打包、发布等工作,就让程序操作程序成为了可能,大名鼎鼎的jekins技能做能这一点。
maven下载
apache网站的所有项目 都是 项目名.apache.org
配置环境变量
1.解压
2.配置MAVEN_HOME
3.配置path,%MAVEN_HOME%\bin
4.cmd执行 mvn -v
maven核心全局配置文件
(1)配置路径
在自己认为合适的地方新建一个文件夹
E:\repository
打开settings.xml 把路径添加进去
(2)配置阿里云镜像(一定要先配,不然下啥都下不动)
找到mirrors
<mirrors>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
(3)配置全局编译jdk版本(以后配也行)
maven体验
maven标准目录
src
|--main
|--java 源代码目录
|--resources 资源目录
|--test
|--java 测试代码目录
|--resources 测试资源目录
|--target
|--classes 编译后的class文件目录
|--test-classes 编译后的测试class文件目录
pom.xml maven工程配置文件
这是大部分Maven工程的目录结构,在这个基础上可以合理地增删目录
只要按照这个目录建,那它就是一个maven工程,没必要非要在IDE里面这么建,在任何地方建一个文件夹,只要按照他的约定办事,就是一个maven工程。
5分钟尝鲜
Maven生命周期
描述了一个项目从源代码到部署的整个周期
Maven有三个内置的生命周期:默认(default),清洁(clean)和站点(site)
- 清洁(clean) :为执行以下的工作做必要的清理。就是我们经常做的,删除out文件夹
- 默认(default): 真正进行项目编译打包等工作的阶段
- 站点(site):生成项目报告,站点,发布站点
默认(default)的生命周期包括以下阶段(该阶段经过简化,实际上更加复杂)
- 验证(validate)-验证项目是否正确,所有必要的信息可用。
- 编译(compile)-编译项目的源代码。
- 测试(test) -使用合适的单元测试框架测试编译的源代码。这些测试不应该要求代码被打包或部署。
- 打包(package)-采用编译的代码,并以其课分配格式(如JAR)进行打包。 jar包和war包都可以通过maven的形式进行打包,不一定要用idea了
- 验证(verify)-对集成测试的结果执行任何检查,以确保满足质量标准。
- 安装(install)-将软件包安装到本地存储库中,用作本地其他项目的依赖项。
- 部署(deploy) -在构建环境中完成,将最终的包复制到远程存储库以与其他开发人员和项目共享(私服)。
在构建环境中,使用以下调用将工作请理地构建并部署到共享存储库中
mvn clean deploy
相同的命令可以在多模块场景(即具有一个或多个子项目的项目)中使用。Maven遍历每个子项目并执行清洁(clean),然后执行部署(deploy)(包括所有之前的构建阶段的步骤)
注意:在我们开发阶段,有一些生命周期的阶段,比如验证(validate)这些,基本很少用到。只要使用关键的几个基本能满足需求。
Maven常用命令
| 命令 | 说明 |
|---|---|
| mvn -version | 显示版本信息 |
| mvn clean | 请理项目产生的临时文件,一般是模块下的target目录 |
| mvn compile | 编译源代码,一般编译米快下的src/main/java目录 |
| mvn package | 项目打包工具,会在模块下的target目录生成jar或war等文件 |
| mvn test | 测试命令,或执行src/test/java/下的junit的测试用例 |
| mvn install | 将打包的jar/war文件复制到你的本地仓库中,供其他模块使用 |
| mvn deploy | 将打包的文件发布到远程参考,提供其他人员进行下载依赖 |
| mvn site | 生成项目相关信息的网站 |
| mvn dependency:tree | 打印出项目的整个依赖树 |
| mvn archetype:generate | 创建Maven的普通java项目 |
| mvn tomcat:run | 在tomcat容器中运行web应用 |
Maven的版本规范(我们的项目)
所有的软件都用版本
Maven使用如下几个要素来定位一个项目,因此它们又称为项目的坐标。
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
groupId 团体、组织的标识符。团体标识的约定是,它以创建这个项目的组织名称的逆向域名开头,一般对应着JAVA的包的结构,例如org.apache
artifactId 单独项目的唯一标识符,比如我们的tomcat、commons等,不要在artifacts中包含点号.
version 项目的版本
packaging 项目的类型,默认是jar,描述了项目打包后的输出,类型为jar的项目产生一个JAR文件,类型为war的项目产生一个web应用。
Maven在版本管理的时候可以使用几个特殊字符串SNAPSHOT, LATEST, RELEASE, 比如“1.0-SNAPSHOT’,各个部分的含义和处理逻辑如下说明:
SNAPSHOT 这个版本一般用于开发过程中,表示不稳定的版本
LATEST 指某个特定构建的最新发布,这个发布可能是一个发布版,也可能是一个snapshot版,具体看哪个实践最后
RELEASE 指最后一个发布版
在IDEA里配置maven
修改三处
Maven依赖(重点)
maven管理依赖也就是jar包的牛逼之处是不用我们自己下载,会从一些地方自动下载
以后我们的jar包由maven管理,不用自己管理
maven远程仓库:mvnrepository.com/
maven远程仓库:maven.aliyun.com/mvn/search
maven工程中我们依靠在pom.xml中引入jar包的坐标,比如引用log4j的依赖
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
此时maven就会自动生成目录结构
maven工程会在我们需要某个jar包的时候自动帮我们下载。
只要在pom文件里写明依赖,点击刷新,就会自动帮我们下载。
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
这三条可以唯一标识某个jar包