Maven 了解及使用

一、Maven安装及使用

1. Maven下载及安装

  下载地址:https://maven.apache.org/download.cgi。下载的版本要落后与你的集成工具版本。
在这里插入图片描述
   下载后,解压。注意:解压的目录中最好不要含有空格、中文或者其他特殊符号
在这里插入图片描述
   配置环境变量
在这里插入图片描述

2. 指定本地及远程仓库

  修改配置文件,文件位置:Maven安装目录/conf/settings.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 为了方便观看,去掉了注释 需要做出的修改就是下面三部分,注意标签的位置-->
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <!-- 配置本地仓库 -->
  <localRepository>D:\java\Maven\LocalRepository</localRepository>

<!-- 配置远程仓库,即在本地仓库找不到包,从阿里MAVEN(中央仓库镜像)下载 -->
  <mirrors>
	<mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
  </mirrors>

<!-- 配置jdk信息,默认的jre运行是1.5 -->
  <profiles>
	<profile>
	  <id>jdk-1.8</id>

	  <activation>
		<activeByDefault>true</activeByDefault>
		<jdk>1.8</jdk>
	  </activation>

	  <properties>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
	  </properties>
	</profile>
  </profiles>

</settings>

3. Eclipse上使用 Maven

3.1 配置Maven 插件及settings

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 创建Maven JavaWeb项目

  现在大多使用SpringBoot进行web项目开发,但只想用maven开发项目,请看下面步骤。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

   以上就完成了带maven的javaweb项目创建了,接下来在pom.xml 文件中增加相关web依赖即可。相关依赖,请查看:https://blog.csdn.net/y_Engineer/article/details/102400977

3.3 报错:Perhaps you are running on a JRE rather than a JDK?

  为了防止以后报上述错误,修改下面配置。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. IDEA 上使用 Maven

4.1 配置Maven版本及settings

   在选择Maven版本时,要注意Maven与IDEA版本上的兼容性。
Maven的版本要落后于IDEA的版本。(鄙人为了贪新版本,在创建SpringBoot时出现pom依赖找不到,下不了等问题)。下附 Maven版本(注意版本发布时间)。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4.2 创建 Maven项目

  创建教程:二、3. 新建Maven Moudle

4.3 报错:No archetype found in remote catalog. Defaulting to internal catalog…

[WARNING] Archetype not found in any catalog. Falling back to central repository.
[WARNING] Add a repository with id 'archetype' in your settings.xml if archetype's repository is elsewhere.

在这里插入图片描述
  我找了半天,解决办法是:将 archetype-catalog.xml 和 settings.xml 放置在本地仓库,然后VM Options 填入-DarchetypeCatalog=local。具体步骤:见链接

  但上面办法,我没试成功,失败!!! 后终于在一位大佬那里找到了一个解决办法。配置项:archetypeCatalog \ internal。
在这里插入图片描述

二、Maven 知识点介绍

1. Maven初认识

  Maven是一款服务于Java平台的自动化构建工具。Maven项目有固定的目录结构:

Project
|------src
|------|------main
|------|------|------java
|------|------|------resources
|------|------test
|------|------|------java
|------|------|------resources
|------pom.xml
  • 根目录:工程名
  • src目录:源码
  • pom.xml文件:Maven工程的核心配置文件
  • main目录:存放主程序
  • test目录:存放测试程序
  • java目录:存放java源文件
  • resources目录:存放框架或其他工具的配置文件

  Maven构建过程:

  1. 清理:将以前编译得到的旧class字节码文件删除,为下一次编译做准备
  2. 编译:将Java源程序编译成class字节码文件
  3. 测试:自动测试,自动调用Junit程序
  4. 报告:测试程序执行的结果
  5. 打包:动态Web工程打war包,Java工程打jar包
  6. 安装:Maven特点的概念——将打包得到的文件复制到“仓库”中的指定位置
  7. 部署:将动态Web工程生成的war包复制到Servlet容器的指定目录下,使其可以运行

2. Maven 概念 - 坐标

  Maven中使用三个向量在仓库中唯一定位一个工程

<groupId>com.winner.trade</groupId>  <!--公司或组织域名倒序+项目名-->
<artifactId>trade-test</artifactId>  <!--模块名-->
<version>0.0.1-SNAPSHOT</version>  <!--版本-->

   以上三个向量可确定项目存放路径:

com/winner/trade/trade-test/1.0.0-SNAPSHOT/trade-test-1.0.0-SNAPSHOT.jar

3. Maven 概念 - 依赖

3.1 依赖范围

<!-- 在增加依赖时就指定其依赖范围 -->
<dependency>  
	<groupId>javax.servlet</groupId>  
	<artifactId>servlet-api</artifactId>  
	<version>2.5</version>  
	<scope>provided</scope>   <!-- 依赖范围:provided -->
</dependency>  

  依赖范围:

  • compile:对主程序有效,对测试程序有效,参与打包
    对开发、部署、运行皆有效,典型例子:自己Maven工程、spring-core
  • test:对主程序无效,对测试程序有效,不参与打包,不参与部署,典型例子:Junit
  • provided:对主程序有效,对测试程序有效,不参于打包,不参与部署。典型例子:servlet-api.jar。
  • import:只能在dependenceManager中使用

  常用依赖范围理解:
在这里插入图片描述

3.2 依赖冲突

  当依赖包指定错域,极有可能发生依赖包冲突。比如说:当一个包servlet-api定义为compile,但是tomcat已经有此包了。在程序运行过程中可能会报空指针异常。

3.3 依赖排除

  在dependency标签中加排除标签exclusions,通过groupId和artifactId确定要排除的依赖。

<dependency>  
	<groupId>javax.servlet</groupId>  
	<artifactId>servlet-api</artifactId>  
	<version>2.5</version>  
	<scope>provided</scope>   <!-- 依赖范围:provided -->
	<exclusions>    
		<exclusion>    
			<groupId>xxxx</groupId>    
			<artifactId>yyyyy</artifactId>    
		</exclusion>    
	</exclusions>   
</dependency>  

3.4 依赖原则

  路径短者优先,路径相同,先声明者(在pom.xml 的位置)优先。
在这里插入图片描述

3.5 统一依赖版本

<!-- 在properties进行变量设定,后续使用${..}进行引用 -->  
<properties>  
    <spring-version>4.0.0.RELEASE</spring-version>
</properties>

<dependencies>  
	<dependency>  
		<groupId>org.springframework</groupId>  
		<artifactId>spring-core</artifactId>  
    	<version>${spring-version}</version>  
    	<scope>compile</scope>  
	</dependency>  
</dependencies>  

3.5 依赖传递性

  1. pom.xml 配置一个依赖包A,假设A的运作需要依赖包B,则B会自动加入到运行时环境中
  2. 非compile范围的依赖无法传递

4. Maven概念 - 继承

   现在可以在每个Maven工程中编写自己的pom文件了,但有一一个问题是随着项目的增多,pom.xml上的依赖版本极有可能发生不一致的情况,而且不可传递依赖(test、provided等)在配置过程中,也可能发生版本不一致。

   利用继承,可将依赖统一提取到“父”工程中,在子工程中声明依赖时不指定版本,以父工程统一设定的为准。

   注意:配置继承后,执行install命令(命令使用见下)时,要先执行父工程,再执行子工程。

在这里插入图片描述
   2. 为了方便观看,将父、子整个pom.xml 全部展示。

<!-- 父工程 -->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.parent</groupId>
  <artifactId>pom</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  
 <!-- 版本管理 -->
  <dependencyManagement>  
	<dependencies>  
		<dependency>  
			<groupId>junit</groupId>  
			<artifactId>junit</artifactId>  
			<version>4.12</version>  
			<scope>test</scope>  
		</dependency>  
	</dependencies>  
  </dependencyManagement>  
</project>
<!-- 子工程 -->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>home</groupId>
  <artifactId>test</artifactId>
  <description>home test</description>
  <!-- 子工程与父工程一致的信息可删除,版本号一致删除 -->
  <!-- <version>0.0.1-SNAPSHOT</version>  -->
  
  <!-- 指定父工程 -->
	<parent>  
	    <groupId>com.parent</groupId>
		<artifactId>pom</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	    <!-- 以当前文件为基准父工程pom.xml的相对路径 -->  
	    <relativePath>../pom/pom.xml</relativePath>  
	</parent>
	
  <dependencies>  
		<dependency>  
			<groupId>junit</groupId>  
			<artifactId>junit</artifactId>
			<!-- 子工程依赖不指定版本 -->
			<scope>test</scope>  
		</dependency>  
  </dependencies>  
</project>

5. Maven概念 - 聚合

  当项目特别多的时候,不可能一个个去启动项目,故应在一个“总的聚合工程”中配置各个参与聚合的模块。例如:在聚合工程上,mvn install 会将所有配置的所有工程全安装上。

<!-- 新建工程或在继承的父工程中配置聚合 -->  
<modules>  
   <!-- 指定各个工程的相对路径,顺序无影响 -->  
   <module>../JavaWebMaven</module>  
   <!-- ...其他工程... --> 
</modules>  

6. Maven 概念 - 仓库

  仓库分为本地仓库,远程仓库。

  1. 本地仓库:在自己电脑上部署的仓库目录,为当前电脑上所有Maven工程服务
  2. 远程仓库:有私服,中央仓库,中央仓库镜像
    • 私服:架设在当前局域网环境下,为当前局域网内的所有Maven工程服务
    • 中央仓库:架设在Internet上,为全世界所有Maven服务
    • 中央仓库镜像:架设在各大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快地响应用户请求。举例,见setting.xml使用的阿里maven

在这里插入图片描述
  仓库中保存的内容:Maven工程

  1. Maven自身所需要的插件
  2. 第三方框架或工具的jar包(第一方:JDK;第二方:自己)
  3. 我们自己开发的Maven工程

7. Maven 概念 - 生命周期

  前面也介绍过:Maven的构建过程【1. Maven 初认识】,其构建过程顺序是固定,而且执行后面的过程,会将之前的过程也都执行。

 Maven有三套相互独立的生命周期

  1. Clean Lifecycle:在进行真正的构建之前进行一些清理工作
  2. Default Lifecycle:构建的核心部分,编译、测试、打包、安装、部署等
  3. Site Liftcycle:生成项目报告,站点,发布站点

  Clean 生命周期包含3个阶段:

  1. pre-clean 执行需要在clean之前完成的工作
  2. clean 移除所有上一次构建生成的文件
  3. post-clean 执行需要在clean之后立刻完成的工作

  Default 生命周期阶段(重要阶段)

  1. process-resources 复制并处理资源文件,至目标目录,准备打包
  2. compile 编译项目的源代码
  3. process-test-resources 复制并处理资源文件,至目标测试目录
  4. test-compile 编译测试源代码
  5. test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署
  6. package 接受编译好的代码,打包成可发布的格式,如JAR
  7. install 将包安装至本地仓库,以让其他项目依赖
  8. deploy 将最终的包复制到远程的仓库,以让其他开发人员与项目共享或部署到服务器上运行

  Site 生命周期阶段

  1. pre-site 执行需要在生成站点文档之前完成的工作
  2. site 生成项目的站点文档
  3. post-site 执行需要在生成站点文档之后完成的工作,并且为部署做准备
  4. site-deploy 将生成的站点文档部署到特定的服务器上

8. Maven常用命令

命令描述
mvn clean清理,target目录删除
mvn compile编译主程序
在src同级目录下生成target/classes目录,
存放主程序编译结果
mvn test-compile编译测试程序
在src同级目录下生成target/test-class目录,
存放测试程序编译结果
mvn test执行测试
mvn package打包
在src同级目录下生成target/maven-archiver目录,存放辅助文件;
生成target/surefire-archiver,存放测试报告;
生成xxx-版本- SNAPSHOT.jar ,包中只有主程序。
mvn install安装
mvn site生成站点

  说了这么多命令,在哪执行呢?
在这里插入图片描述
  会显式常用命令,其他命令请点击 Maven build,在Goals中填写。
在这里插入图片描述

三、辅助网站

  依赖包不可能手动输入,有一个网站,只需输入关键词,可以找到相关依赖包。官网:MvnRepository
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值