【详细步骤】Maven从无到有,直接上手——maven使用第一弹

296 阅读6分钟

Maven

构建的过程是需要我们自己来的,而且idea和eclipse,甚至一些其他的开发工具构建的时候是不一样的。

那么有没有一种统一的方式,甚至无需手动点击,通过配置就可以了。

当然我们看到了我们呢的idea其实也是通过文件来记录构建信息的,那么既然构建如此重要,形成一套规范化的,统一的边界的构建工具势在必行。于是出现了maven,还有gradle,他们的功能异常强大。

好处:

统一管理jar包,自动导入jar及其依赖。

项目移植之后甚至不需要安装开发工作,只需要maven加命令就能跑起来,降低学习成本。

使我们的项目流水线成为可能,因为使用简单的命令我们就能完成项目的编译、打包、发布等工作,就让程序操作程序成为了可能,大名鼎鼎的jekins技能做能这一点。

maven下载

maven.apache.org/

apache网站的所有项目 都是 项目名.apache.org

配置环境变量

1.解压

2.配置MAVEN_HOME

3.配置path,%MAVEN_HOME%\bin

4.cmd执行 mvn -v

image-20201123193417047

maven核心全局配置文件

image-20201123193644800

(1)配置路径

在自己认为合适的地方新建一个文件夹

E:\repository

打开settings.xml 把路径添加进去

image-20201123201646918

(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>
image-20201123202114844

(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.apache.org/guides/gett…

Maven生命周期

描述了一个项目从源代码到部署的整个周期

Maven有三个内置的生命周期:默认(default),清洁(clean)和站点(site)

  • 清洁(clean) :为执行以下的工作做必要的清理。就是我们经常做的,删除out文件夹
  • 默认(default): 真正进行项目编译打包等工作的阶段
  • 站点(site):生成项目报告,站点,发布站点

默认(default)的生命周期包括以下阶段(该阶段经过简化,实际上更加复杂)

  1. 验证(validate)-验证项目是否正确,所有必要的信息可用。
  2. 编译(compile)-编译项目的源代码。
  3. 测试(test) -使用合适的单元测试框架测试编译的源代码。这些测试不应该要求代码被打包或部署。
  4. 打包(package)-采用编译的代码,并以其课分配格式(如JAR)进行打包。 jar包和war包都可以通过maven的形式进行打包,不一定要用idea了
  5. 验证(verify)-对集成测试的结果执行任何检查,以确保满足质量标准。
  6. 安装(install)-将软件包安装到本地存储库中,用作本地其他项目的依赖项。
  7. 部署(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

image-20201124204452078

修改三处

image-20201124204624467

image-20201124204959138

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>

image-20201124210918956

image-20201124211011620

此时maven就会自动生成目录结构

image-20201124211111422

maven工程会在我们需要某个jar包的时候自动帮我们下载。

只要在pom文件里写明依赖,点击刷新,就会自动帮我们下载。

 <groupId>junit</groupId>
     <artifactId>junit</artifactId>
      <version>4.11</version>

这三条可以唯一标识某个jar包