发表于: 2019-10-16 08:20:34
4 969
今天是加入修真院的第三天,啥也不说就是干!!!
前两天学习了 Mysql 的相关知识,接下来的任务是要学习 Maven
1、JDK、Maven 下载与环境配置
JDK 是指 Java Development Kit 是 Java 程序开发包(可供开发者调用 API)
JRE 是 Java Runtime Environment 是 Java 运行时环境 (可供开发者编译运行 Java 程序)
下载 Maven (http://maven.apache.org/download.cgi) 解压至相关目录
开始配置 Maven 环境变量
export M2_HOME=/Users/Zerry/Develop/tools/apache-maven-3.5.3
export PATH=$PATH:$M2_HOME/bin
验证安装结果
Maven 常用命令
1、mvn clean 删除 target 目录
2、mvn install 安装 war 包至本地仓库中
3、mvn compile 编译程序源码
4、mvn package 打包生成 war 文件
5、mvn test 测试
6、mvn deploy 将 jar 包发布至仓库中
完整的项目构建过程包括:清理 -> 编译 -> 测试 -> 打包 -> 集成测试 -> 验证 -> 部署
2、 Maven 核心概念
Maven 能够实现自动化构建和它的内部原理是分不开的,下面将从 Maven 的九个核心概念看看 Maven 是如何实现自动化构建的
1) POM:Project Object Model 项目对象模型。将 Java 工程的相关信息封装成对象作为便于操作和管理的模型。Maven 工程的核心配置
2) 约定的目录结构:只有按照约定了的目录结构来创建功臣高才能使 Maven 对我们的工程进行自动化构建
3)坐标: Maven 使用三个向量在 Maven 仓库中唯一的确定一个 Maven 工程。
a. GroupId:公司或组织的域名倒序+项目名称
b. ArtifactId:当前项目的模块名称
c. Version:当前模块的版本
例如:
<groupId>com.gary.maventutorial</groupId>
<artifactId>MavenTutotial</artifactId>
<version>0.0.1-SNAPSHOT</version>
4)依赖管理:Maven 中最关键的部分,我们使用 Maven 最主要的是使用它的依赖管理功能。要理解和掌握 Maven 的依赖管理,只需解决以下几个问题:
a. 依赖的目的是什么?当 A jar 包用到了 B jar 包中的某些类时,A 就对 B 产生了依 赖。在项目中我们需要使用 dependency 标签指定被依赖的 jar 包坐标即可
<dependency>
<groupId>com.gary.maventutorial</groupId>
<artifactId>MavenTutorial</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
b. 依赖的范围 使用 scope 标签定义范围:compile、test、provided 三个
关于 compile 与 test 很容易区别
compile 与 provided 区别
c. 依赖的传递:A 依赖 B,B 依赖 C,A 能否使用 C 呢?那要看 B 依赖 C 的范围是不 是 compile,如果是则可用,否则不可用
d. 依赖的排除:可以看到 spring-core 中包含了 commons-logging,如果想排除这个 依赖,可以通过 exclude 进行配置
可以看到 spring-core 下已经排除了对 commons-logging 的依赖
e. 统一管理所依赖 jar 包版本
统一声明版本号:其中 gary.spring.version 部分是自定义标签。
<properties>
<gary.spring.version>4.1.1.RELEASE</gary.spring.version>
</properties>
对 规定的版本进行引用
<dependency>
<groupId>org.springframework</groupId> <artifactId>spring-core</artifactId>
<version>${gary.spring.version}</version>
<dependency>
f. 依赖的原则:解决 jar 包冲突
路径最短者优先
路径相同者先声明者优先
5)仓库管理
a. 本地仓库
b. 远程仓库:私服(架设在局域网范围内)、中央仓库(架设在 Internet)、中央仓库的镜像(架设在各大洲,分担中央仓库的流量)
6)生命周期
三套独立的生命周期
Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
Default Lifecycle 构建的核心部分,编译,测试,打包,安装,部署等等。
Site Lifecycle 生成项目报告,站点,发布站点。
7)插件和目标
compile 就是插件 maven-compiler-plugin 的一个目标;pre-clean 是插件 maven-clean-plugin 的一个目标
8)继承与聚合
为什么需要继承?非 compile 范围的依赖是不能传递的。
如果项目中各个模块都引用了的 junit 那么将 Junit 版本统一为 4.9时候,到各个工程中手动修改无疑是非常不可取的。 使用继承机制就可以将这样的依赖信息统一提取到父工程模块中进行统一管理。
使用聚合: 将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效。修改源码后也需要逐个手动进 行 clean 操作。而使用了聚合后就可以批量进行 Maven 工程的安装、清理工作。
<modelVersion>4.0.0</modelVersion>
<groupId>com.gary.mavenTutorial</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
需要注意的是:打包方式处要设置为 pom
配置聚合:将多个模块声明出来,指定各个子工程的相对路径
<modules>
<module>../HelloFriend</module>
<module>../MakeFriends</module>
</modules>
配置依赖的管理
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
子项目中的 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<artifactId>MakeFriends</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--子工程中声明父工程-->
<parent>
<groupId>com.atguigu.maven</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 以当前文件为基准的父工程pom.xml文件的相对路径 -->
<relativePath>../Parent/pom.xml</relativePath>
</parent>
<dependencies>
<!-- 在子项目中重新指定需要的依赖,删除范围和版本号-->
<dependency>
<groupId>com.gary.maven</groupId>
<artifactId>HelloFriend</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
3、 Idea 创建 Maven web 项目
1. 新建 Project 选择 Maven -> Create form archetype -> org.apache.maven.archetypes:maven-archetype-webapp
2. 填写 GroupId ArtifactId Version
3、配置默认的 Maven settions.xml及repository(可以选择自定义路径)
4、填写项目名称 -> Finish
至此一个完整的 Maven web 工程创建完毕,项目目录结构如下:
执行 mvn clean
然后再执行 mvn install,可以看到该项目 war 包已经安装至本地仓库
4、 深度思考与总结
1、maven deploy 将 第三方依赖库(如 Jar 包)或者一个独立的 Jar 包直接发布到中央代理仓库中供大家共享使用
可以参考博客:https://blog.csdn.net/gztly/article/details/6019586
2、maven Test 常用命令及如何跳过单元测试
Maven Test 常用命令
指定运行某个包下面的所有用例 mvn test -Dtest=包完整路径.*
mvn test -Dtest=com.gary.mavenmybatis.*
指定运行某个包下面的测试用例类 mvn test -Dtest=包完整路径.测试用例类名, 注意 测试用例类名不要包含.java
mvn test -Dtest=com.gary.mavenmybatis.StudentServiceTest
指定运行测试用例中的某个测试方法
mvn test -Dtest=com.gary.mavenmybatis.StudentServiceTest#queryInfoByNum
指定运行多个测试用例类
mvn test -Dtest=XXTestA,XXTestB
在 mvn package 进行编译、打包时,Maven 会执行 ***src/test/java*** 中的 JUnit 测 试用例,有时为了跳过测试,
会使用参数 -DskipTests
Dmaven.test.skip=true(还可以在 pom.xml 文件中进行配置)
1. -DskipTests:不执行从测试用例,但编译测试用例类生成相应的 class 文件至 target/test-classes 中
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.5</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
2. -Dmaven.test.skip=true:不执行测试用例,也不编译测试用例
<plugin>
<groupId>org.apache.maven.plugin</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.1</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.5</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
这两天主要学习了 Maven 的知识及创建 Maven 工程。
接下来按照任务步骤来学习 JDBCTemplate,MyBatis 编写 DAO 操作。
评论