maven教程(2)+https://developer.aliyun.com/article/1556680
4.1.2 POM
POM:Project Object Model,项目对象模型。
和 POM 类似的是:DOM(Document Object Model),文档对象模型。它们都是模型化思想的具体体现。
💧 模型化思想
POM 表示将工程抽象为一个模型,再用程序中的对象来描述这个模型。这样我们就可以用程序来管理项目了。我们在开发过程中,最基本的做法就是将现实生活中的事物抽象为模型,然后封装模型相关的数据作为一个对象,这样就可以在程序中计算与现实事物相关的数据。
💧 对应的配置文件
POM 理念集中体现在 Maven 工程根目录下 pom.xml 这个配置文件中。所以这个 pom.xml 配置文件就是 Maven 工程的核心配置文件。其实学习 Maven 就是学这个文件怎么配置,各个配置有什么用。
4.1.3 约定的目录结构
💧 各个目录的作用
另外还有一个 target 目录专门存放构建操作输出的结果。
💧 约定目录结构的意义
Maven 为了让构建过程能够尽可能自动化完成,所以必须约定目录结构的作用。例如:Maven 执行编译操作,必须先去 Java 源程序目录读取 Java 源代码,然后执行编译,最后把编译结果存放在 target 目录。
💧 约定大于配置
Maven 对于目录结构这个问题,没有采用配置的方式,而是基于约定。这样会让我们在开发过程中非常方便。如果每次创建 Maven 工程后,还需要针对各个目录的位置进行详细的配置,那肯定非常麻烦。
目前开发领域的技术发展趋势就是:约定大于配置,配置大于编码。
4.2 在 Maven 工程中编写代码
4.2.1 主体程序
主体程序指的是被测试的程序,同时也是将来在项目中真正要使用的程序。
Calculator.java
package com.atguigu.maven; public class Calculator { public int sum(int i, int j){ return i + j; } }
4.2.2 测试程序
package com.atguigu.maven; import org.junit.Test; import com.atguigu.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); } }
4.3 Maven 的构建命令
运行 Maven 中和构建操作相关的命令时,必须进入到 pom.xml 所在的目录。如果没有在 pom.xml 所在的目录运行 Maven 的构建命令,那么会看到下面的错误信息:
The goal you specified requires a project to execute but there is no POM in this directory
4.3.1 清理操作:mvn clean
效果:删除 target 文件夹
4.3.2 编译操作
主程序编译:mvn compile
测试程序编译:mvn test-compile
主体程序编译结果存放的目录:target/classes
测试程序编译结果存放的目录:target/test-classes
4.3.3 测试操作:mvn test
测试的报告存放的目录:target/surefire-reports
进行测试操作,Maven会自动执行主程序和测试程序的编译操作
4.3.4 打包操作:mvn package
打包的结果——jar 包,存放的目录:target
进行打包操作,Maven会自动执行主程序和测试程序的编译操作,以及测试程序的允许
4.3.5 安装操作:mvn install
安装的效果是将本地构建过程中生成的 jar 包存入 Maven 本地仓库。这个 jar 包在 Maven 仓库中的路径是根据它的坐标生成的。
坐标信息如下:
<groupId>com.atguigu.maven</groupId> <artifactId>pro01-maven-java</artifactId> <version>1.0-SNAPSHOT</version>
在 Maven 仓库中生成的路径如下:
D:\maven-rep1026\com\atguigu\maven\pro01-maven-java\1.0-SNAPSHOT\pro01-maven-java-1.0-SNAPSHOT.jar
另外,安装操作还会将 pom.xml 文件转换为 XXX.pom 文件一起存入本地仓库。所以我们在 Maven 的本地仓库中想看一个 jar 包原始的 pom.xml 文件时,查看对应 XXX.pom 文件即可,它们是名字发生了改变,本质上是同一个文件。
命令可以组合执行,如 mvn clean install 相当于清理操作和安装操作同时执行
4.4 让 Web 工程依赖 Java 工程
明确一个意识:从来只有 Web 工程依赖 Java 工程,没有反过来 Java 工程依赖 Web 工程。
本质上来说,Web 工程依赖的 Java 工程其实就是 Web 工程里导入的 jar 包。最终 Java 工程会变成 jar 包,放在 Web 工程的 WEB-INF/lib 目录下。
maven教程(4)+https://developer.aliyun.com/article/1556682