全方面熟悉Maven项目管理工具(三)认识mvn的各类构建命令并创建、打包Web工程
1. POM(核心概念)
1.1 含义
POM: Project Object Model,项目对象模型。
DOM: Document Object Model,文档对象模型,和 POM 类似
它们都是模型化思想的具体体现
1.2 模型化思想
POM 表示将工程抽象为一个模型,再用程序中的对象来描述这个模型。这样我们就可以用程序来管理项目了。
在开发过程中,最基本的做法就是将显示生活中的事物抽象成模型,如何封装模型相关的数据作为一个对象,这样就可以在程序中计算与显示事物相关的数据
1.3 对应的配置文件
POM 理念集中体现在 Maven 工程根目录下 pom.xml 配置文件中。
所以 pom.xml 配置文件就是 Maven 工程的核心配置文件。
其实学习 Maven 就是学习这个文件怎么配置,各个配置有什么用
2. 约定的目录结构(核心概念)
2.1 各个目录的作用
另外还有一个 target 目录专门存放构建操作输出的结果
2.2 约定目录结构的意义
Maven 为了让构建过程能够尽可能的自动化完成,所以必须约定目录结构的作用。
例如:Maven 执行编译操作,必须先去 Java 源程序目录读取 Java 源代码,然后执行编译,最后把编译结果存放在 target 目录
2.3 约定大于配置
Maven 对于目录结构这个问题,没有采用配置的方式,而是基于约定。这样会让我们在开发过程中非常方便。如果每次创建 Maven 工程后,还需要针对各个目录的位置进行详细的配置,那肯定非常麻烦
目前开发领域的技术发展趋势就是:约定大于配置,配置大于编码
手敲代码 (码农) --> 配置事务 (管理层) --> 指定规则 (指导者)
3. 在 Maven 工程中编写代码
3.1主题程序
主体程序指的是被测试的程序,同时也是将来在项目中真正要使用的程序
package com.renexdemo.mavendemo;public class Calculator {public static int sumOut(int num1,int num2){return num1 + num2;}}
3.2 测试程序
package com.renexdemo.mavendemo;import org.junit.Test;
/* import static 引入静态方法 或者 类 */
import static com.renexdemo.mavendemo.Calculator.sumOut;
import static org.junit.Assert.*;public class CalculatorTest {@Testpublic void testOutSum(){int i = sumOut(10, 20);/*使用 junit 的断言来判断实际结果和期待结果是否一致如果一致:测试通过,不会抛出异常如果不一致:抛出异常,测试失败*/assertEquals(30,i);}
}
4. 执行 Maven 的构建命令
4.1 要求
运行 Maven 中和构建操作相关的命令时,必须进入到 pom.xml 所在的目录。如果没有在 pom.xml 所在的目录运行 Maven 的构建命令,那么会看到下面的错误信息:
The goal you specified requires a project to execute but there is no POM in this directory
mvn -v 命令与构建操作无关,只要正确配置了 PATH,在任何目录下执行都可以。而构建相关的命令要在 pom.xml 所在目录下运行 —— 操作哪个工程,就进入这个工程的 pom.xml 目录
4.2 清理操作
命令: mvn clean
效果: 删除 target 目录
4.3 编译操作
主程序编译: mvn compile
测试程序编译: mvn test-compile
主体程序编译结果存放的目录: target/classes
测试程序编译结果存放的目录: target/test-classes
4.4 测试操作
命令: mvn test
测试的报告存放的目录: target/surefire-reports
4.5 打包操作
命令: mvn package
打包的结果:jar/war 包
存放的目录: target
4.6 安装操作
命令: mvn install
[INFO] Installing F:\Java\学习案例\MavenCommand\pro01-maven-java\target\pro01-maven-java-1.0-SNAPSHOT.jar to D:\JavaStorage\maven-repo\com\renexdemo\mavendemo\pro01-maven-java\1.0-SNAPSHOT\pro01-maven-java-1.0-SNAPSHOT.jar[INFO] Installing F:\Java\学习案例\MavenCommand\pro01-maven-java\pom.xml to D:\JavaStorage\maven-repo\com\renexdemo\mavendemo\pro01-maven-java\1.0-SNAPSHOT\pro01-maven-java-1.0-SNAPSHOT.pom
安装的效果是将本地构建过程中生成的 jar 包存入 Maven 本地仓库。这个 jar 包在 Maven 仓库中的路径是根据它的坐标生成的。
坐标信息如下:
<groupId>com.renexdemo.mavendemo</groupId>
<artifactId>pro01-maven-java</artifactId>
<version>1.0-SNAPSHOT</version>
在 Maven 仓库中生成的路径如下:
D:\JavaStorage\maven-repo\com\renexdemo\mavendemo\pro01-maven-java\1.0-SNAPSHOT
另外,安装操作还会将 pom.xml 文件转换成 XXX.pom 文件一起存入本地仓库。
所以我们在 Maven 的本地仓库中想看一个 jar 包原始的 pom.xml 文件时,查看对应的 XXX.pom 文件即可(名字发送改变,本质上是同一个文件)。
5. 创建 Maven 版的 Web 工程
5.1 说明
使用 mvn archetype:generate
命令生成 Web 工程时,需要使用一个专门的 archetype。这个专门生成 Web 工程骨架的 archetype 可以参照官网看到它的用法:
5.1.1 Usage
参考 archetypeGroupId、archetypeArifacId、archetypeVersion 用来指定现在使用的 maven-archetype-webapp 的坐标
5.2 操作
注意:如果在上一个工程的目录下执行 mvn archetype:generate 命令,那么 Maven 会报错:不能在一个非 pom 的工程下再创建其他工程。所以不要再创建好的工程中再创建新的工程,请回到工作空间根目录来操作。
mvn archetype:generate
<!--再选择模板时,选择Webapp-->
5.3 生成的 Web 工程的目录结构
webapp 目录下有index.jsp
WEB-INF 目录下有 web.xml
5.4 创建 Servlet
正常创建即可,但没有 jar 包(Servlet-api)。
我们创建好 Web 工程后,需要导入 jar 包。
5.5 配置对 servlet-api.jar 包的依赖
对于不知道详情的依赖可以到https://mvnrepository.com/网站查询。使用关键词搜索,然后在搜索结果列表中选择合适的jar包使用。
6. 将 Web 工程打包为 war 包
运行 mvn package
命令,生成 war 包的位置如下:
6.1 生成 Web 工程
在 tomcat 目录中,放入编译好的 war包/解压的war包文件夹,在命令行中调用 tomcat 的startup.bat,让 tomcat 将编译网站跑起来。
tomcat 跑起来后,就可以访问 http://localhost:8080/项目名/
了
7. 😊前篇快递
- 认识Maven、Maven如何安装?
- 坐标、pom.xml文件的解读!
8. 👉好文相推
- 2-3树思想与红黑树的实现与基本原理
- ElasticSearch8.7 搭配 SpringDataElasticSearch5.1 的使用
- B树和B+树的实现原理阐述