【Maven快速上手系列】第二期——命令行环境中使用Maven

一、Maven坐标

🐟 如何定位一个 Maven 工程的 jar 包呢?【一个Maven项目可能有很多个工程】

可以利用三位空间的(x, y, z)坐标来理解,Maven可以通过一下三个属性定位一个 jar

groupId:公司或组织的 id【通常为倒序形式】
artifactId:一个项目或者是项目中的一个模块的 id
version:版本号 【SNAPSHOT 表示快照版本,RELEASE 表示正式版本】

🐟 坐标与 jar 存储路径的对应关系:
在这里插入图片描述

二、创建一个Java的Maven项目

(1)通过mvn archetype:generate指令生成工程【先要进入自己保存工程的目录中】

在这里插入图片描述
(2)选择创建Maven工程的类型【7为快速开始】
在这里插入图片描述
此处以快速开始为例,所以直接回车;然后依次输入 groupIdartifactId,版本号默认回车了,最后检查无误输入 Y
在这里插入图片描述
构建成功后显示如下:
在这里插入图片描述
(3)因为后续会用到测试,所以这里修改一下D:\maven-test\maven-test01\pom.xml中的 junit 依赖的版本(默认版本比较低)
在这里插入图片描述
🐟(4)pom.xml 文件解读

最上边的这部分就是固定的配置信息:
在这里插入图片描述
工程的定位:
在这里插入图片描述
打包方式:jar 代表这是一个 java 工程、war 代表这是一个 web 工程、pom 代表这个工程是用来管理其它工程的
在这里插入图片描述

工程构建过程中读取源码使用的字符集
在这里插入图片描述
dependencies 标签里导入我们需要的 jar 包, scope 代表的是作用范围
在这里插入图片描述
(5)maven项目的目录结构
在这里插入图片描述
test 目录就是用来测试的,实际打包的时候并不会把这部分加进去
(6)编写测试类
在main的maven目录下创建 Calculator

package com.zwh.maven;
public class Calculator {
public int sum(int i, int j){
	return i + j;
	}
}

在 test 的 maven 目录下创建文件 CalculatorTest

package com.zwh.maven;
import org.junit.Test;
import com.zwh.maven.Calculator;
// 静态导入的效果是将Assert类中的静态资源导入当前类
// 这样一来,在当前类中就可以直接使用Assert类中的静态资源,不需要写类名
import static org.junit.Assert.*;
public class CalculatorTest{
@Test
public void testSum(){
	// 1.创建Calculator对象
	Calculator calculator = new Calculator();
	// 2.调用Calculator对象的方法,获取到程序运行实际的结果
	int actualResult = calculator.sum(5, 3);
	// 3.声明一个变量,表示程序运行期待的结果
	int expectedResult = 8;
	// 4.使用断言来判断实际结果和期待结果是否一致
	// 如果一致:测试通过,不会抛出异常
	// 如果不一致:抛出异常,测试失败
	assertEquals(expectedResult, actualResult);
	}
}

三、执行 Maven 的构建命令

  • 在命令行中运行 Maven 的构建相关命令时,要在 pom.xml 所在的目录中运行
  • 以上边创建的Java项目为例

(1)清理
通过mvn clean命令清理之前本地的编译结果,删除 target 目录

(2)编译【此处分为两部分】
主程序的编译:mvn compile
测试程序的编译:mvn test-compile
编译结果分别存储到 target 目录下的 classestest-classes
(3)测试
通过mvn test指令完成测试,并将报告放在 target 目录下的 surefire-reports 目录中

(4)打包
通过mvn package指令完成工程打包,打包类型与pom.xml中的一致

(5)安装【就是将当前打包的 jar 包保存到本地仓库中,可以供其他工程使用】
通过mvn install指令完成安装,产生的坐标信息和当初创建工程时候的坐标相同

<groudId>com.zwh.maven</groudId>
<artifactId>maven-test01</artifactId>
<version>1.0-SNAPSHOT</version>

根据坐标就可以知道对应的 jar 包的安装地址本地仓库目录\com\zwh\maven\maven-test01\1.0SNAPSHOT\maven-test01-1.0-SNAPSHOT.jar

四、创建一个Web的Maven项目

  • 使用 mvn archetype:generate 命令生成 Web 工程时,需要使用一个专门的 archetype。【同时指定工程的坐标】
  • 语法格式:mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4

(1) 可以选择默认的组名和工程名,打包方式为 war 包【此处我指定了】
在这里插入图片描述
(2)web 工程的目录结构
在这里插入图片描述
webapp 中有 index,jsp 也就是显示的网页
WEB-INF中有 web.xml

(3)需要自己手动去建包以及 Servlet
在 main 目录下创建 java >> com >> zwh >> maven >> HelloServlet.java【>> 左侧为右侧父目录】

package com.zwh.maven;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;
public class HelloServlet extends HttpServlet{
	protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
	response.getWriter().write("hello maven web");
	}
}

(4)手动去 web.xml 中注册 Servlet

<servlet>
	<servlet-name>helloServlet</servlet-name>
	<servlet-class>com.zwh.maven.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>helloServlet</servlet-name>
	<url-pattern>/helloServlet</url-pattern>
</servlet-mapping>

(5)在 index.jsp 中编写超链接,点击时会发挥 HelloServet 中的 hello maven web

<html>
	<body>
		<h2>Hello World!</h2>
		<a href="helloServlet">Access Servlet</a>
	</body>
</html>

(6)为这个 web 工程添加 servlet-api.jar 因为用到了 HttpServlet 类 【添加到这个工程的 pom.xml中】

<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>javax.servlet-api</artifactId>
	<version>3.1.0</version>
	<scope>provided</scope>
</dependency>

可以通过这个网址搜索 jar 包,直接复制依赖就行 点击跳转

(7)通过mvn compile构建工程,通过mvn package打包工程

在这里插入图片描述
成功后,可以在 target 目录下可以找到【那个文件夹就是 war 包解压后的目录】
在这里插入图片描述
(8)之后就要将 war 包部署到 Tomcat 上运行 【首先得有Tomcat并且成功配置了环境】

将这个 war 包或者解压后的目录复制到Tomcat的安装目录\webapps目录下,然后在DOS中切换到Tomcat安装目录\bin目录下
通过startup.bat指令就可以运行Tomcat【保证窗口处于开启状态就可以去访问】
在这里插入图片描述
在浏览器中输入:http://localhost:8080/maven-test02/index.jsp
在这里插入图片描述

五、依赖的范围

  • 标签的可选值为: compile/test/provided/system/runtime/import 【此处以前三个为例】

在这里插入图片描述
(1)compile:通常使用的第三方框架的 jar 包这样在项目实际运行时真正要用到的 jar 包都是以 compile
围进行依赖的。比如 SSM 框架所需jar包。

(2)test:测试过程中使用的 jar 包,以 test 范围依赖进来。比如 junit

(3)provided:在开发过程中需要用到的“服务器上的 jar 包”通常以 provided 范围依赖进来。比如 servletapi、jsp-api。而这个范围的 jar 包之所以不参与部署、不放进 war 包,就是避免和服务器上已有的同类
jar 包产生冲突,同时减轻服务器的负担

(4)为 compile 范围的依赖是可以传递的,后两者就不可以【例如 A 依赖 B 依赖 C】

(5)为了避免插身依赖冲突,那么如何避免依赖传递呢?【在最近处进行处理,这样影响最小】

通过<exclusions> </exclusions>配置依赖的排除,在其中设置<exclusion></exclusion>字标签配置具体的一个依赖【例如】


<!-- 使用excludes标签配置依赖的排除 -->
<exclusions>
	<!-- 在exclude标签中配置一个具体的排除 -->
	<exclusion>
		<!-- 指定要排除的依赖的坐标(不需要写version) -->
		<groupId>commons-logging</groupId>
		<artifactId>commons-logging</artifactId>
	</exclusion>
</exclusions>

六、继承与聚合

在这里插入图片描述
继承最直接的应用是利用父工程对子工程版本号的管理,父工程的打包方式为 pom【一般不去写逻辑功能代码,只是用于统一的管理】

聚合将各个工程合到一个项目中,一把在总工程的 pom.xml 中配置 modules 即可
在这里插入图片描述
好处就是有些构建命令在总工程可以一键执行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bow.贾斯汀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值