大数据技术之Maven
1 为什么要使用Maven
不s使用Maven也可以进行B/S结构项目开发,那为啥还用Maven呢?这个问题嘛,通过企业的开发需求,发现我们现有技术的不足
1.1 添加第三方jar包
● 使用jar包最简单方法是把它复制到lib目录下。但有新工程用时还得再复制,就很麻烦哟!
● 这时使用Maven,每个jar包在本地仓库存一份,需要jar包的工程使用其“坐标”就行了,方便!快乐!巴适!
1.2 jar包之间的依赖关系
● jar包A依赖jar包B,jar包B依赖jar包C,倘若缺失C包,A,B包就不能用了。太多依赖关系,导入好累的。
● 这时通过Maven导入包包们,既不用处理依赖关系,直接用就了,真棒!
1.3 处理jar之间的冲突
● jar包不足项目无法工作,jar包太多也可能不能工作。
例子:下面时包包们的依赖关系,“ ?”处导入1.2.14还是1.2.17呢?这不,冲突就来了
上面的冲突少,可人工处理。倘若给100W个冲突,就会傻眼咯。
● 这时使用Maven就可自动处理包包们之间的冲突,真棒!
Maven内置两条依赖原则:最短路径者优先、先声明者优先。
1.4 获取第三方jar包
● jar包的种类很多,自己找的话,得满世界的跑,好累!
● 这时使用Maven,以“坐标”方式依赖一个jar包,Maven会自动从中央仓库下载,同时还有jar包的依赖包包们。(享有一个完全同意规范的jar包管理体系)
1.5 将项目拆分成多个工程模块
上层模块依赖下层,所以下层模块中定义的API都可以为上层所调用和访问。
【小例子】一台PC处理100T数据,太难了,也装不下。那我们用1000台PC,1000只程序媛来处理,不久很巴适了吗。
1.6 实现项目的分布式部署
● 项目规模长太胖,模块需要独立在服务器上跑,我们称为服务器。要用Maven
2 Manven是什么?
2.1 自动化构建工具
● Maven:专家、内行
● Maven一款自动化构建工具,服务于Java平台项目构建和依赖管理。
2.2 构建的概念
● 是构建不是创建哟!
从一下三层来看:
① 纯代码:.java源文件经过编译得到 .class文件
② Web工程:为编译Web工程=鸡,编译好的Web工程=煮熟的鸡,编译部署的过程=炖鸡中
③ 实际项目:将java程序、JSP页面、图片等(原材料),还有jar包等,按照目录结构部署到服务器。
总结:构建就是拿各种“原材料”,去“生产”出一个可以运行的项目的过程。
2.3 构建环节
1)清理:删除以前的编译结构
2)编译:java源程序 —> 字节码文件
3)测试:测试关键点
4)报告:记录和展示测试结果
5)打包:多个文件打包
6)安装:在Maven环境下特指将打包的结果——jar包或war包安装到本地仓库中。
7)部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行。
2.4 自动化构建
上班来公司,小明同学一杯咖啡,打开电脑收邮件,开始编译—打包—部署—测试,太慢太累太耗时了。
使用Maven实现自动化构建,中间步骤就不用小明同学处理了。
使用Maven可以自动的总构建过程的起点执行到终点:
2.5 Maven核心概念
对Maven的学习就围绕它的九个核心概念展开:
● POM
● 约定的目录结构
● 坐标
● 依赖管理
● 仓库管理
● 生命周期
● 插件和目标
● 继承
● 聚合
3 Maven如何使用
让我们来看看Maven核心程序的安装和本地仓库的必要设置。然后我们就可以编写第一个Maven程序了。
3.1 安装Maven核心程序
待定。。。。。。
3.2 第一个Maven工程
1)第一步:创建约定的目录结构
Hello src ——main ————java ————resources ——test ————java ————resources pom.xml |
● main目录:存放主程序
● test目录:存放测试程序
● java目录:存放源代码
● resources目录:存放配置文件和资源文件
2)第二步:创建Maven的核心配置文件
3)第三步:编写主代码
4)第四步:编写测试代码
5)第五步:运行几个基本的Maven命令
打开cmd命令行,进入Hello项目根目录(pom.xml文件所在目录)执行mvn compile命令,查看根目录变化 cmd 中继续录入mvn clean命令,然后再次查看根目录变化 cmd 中录入 mvn compile命令, 查看根目录变化 cmd 中录入 mvn test-compile命令, 查看target目录的变化 cmd 中录入 mvn test命令,查看target目录变化 cmd 中录入 mvn package命令,查看target目录变化 cmd 中录入 mvn install命令, 查看本地仓库的目录变化 |
注意:运行Maven命令时一定要进入pom.xml文件所在的目录!
3.3 Maven 联网问题
待定。。。。。。
配置阿里云镜像
<mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> |
3.4 IDEA中配置Maven
待定。。。。。。
3.5 IDEA中配置创建Maven Module
待定。。。。。。
3.6 Maven打包插件
Maven本身的打包插件不负责将依赖的jar包一并打入到jar包中。如果项目所依赖的jar包在服务器环境中提供了还好,如果服务器环境中没有提供,则比较悲惨,运行各种ClassNotFound….你们懂的!
因此需要一款能够将项目所依赖的jar包 一并打入到jar中的插件来解决这些问题.
点击查看代码
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<!-- 指定主类 -->
<mainClass>xxx.xxx.XXX</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
四、Maven的核心概念
● POM
● 约定的目录结构
● 坐标
● 依赖管理
● 仓库管理
● 生命周期
● 插件和目标
● 继承
● 聚合
4.1 POM
● Project Object Model:项目对象模型。
● 将Java工程的相关信息封装成对象作为便于操作和管理的模型。
● Maven工程的核心配置,学习Maven就是学习pom.xml文件中的配置。
4.2 约定的目录结构
行业观点:约定 > 配置 > 编码
● 能用配置解决的问题就不编码
● 能基于约定的就不进行配置
● Maven指定了特定文件的保存目录,使得java工程能自动化构建。
4.3 坐标
1)几何中的坐标:x、y、z。 使用它们可以确定平面或空间中的一点。
2)Maven的坐标 —— 在Maven仓库中确定Maven工程
● group:公司或组织的 域名倒序+项目名
● artifactId:模块名称
● version:模块版本
<groupId>com.atguigu.maven</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
3)如何通过坐标到仓库中查找jar包?
● 将gav三个向量连起来
com.atguigu.maven + Hello + 0.0.1-SNAPSHOT |
● 用连起来的字符串作为目录结构到仓库中查找
com/atguigu/maven/Hello/0.0.1-SNAPSHOT/Hello-0.0.1-SNAPSHOT.jar |
注意:自己的Maven工程必须执行安装操作才会进入仓库。安装的命令是:mvn install
4.4 第二个Maven工程
1)创建HelloFriend Module
2)在xml配置文件中配置当前工程依赖Hello
查看代码
<?xml version="1.0" encoding="UTF-8"?>
<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.atguigu.maven</groupId>
<artifactId>HelloFriend</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.atguigu.maven</groupId>
<artifactId>Hello</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
3)主程序
在src/main/java目录下新建文件HelloFriend.java
查看代码
package com.atguigu.maven;
public class HelloFriend {
public String sayHelloToFriend(String name){
Hello hello = new Hello();
String str = hello.sayHello(name)+" I am "+this.getMyName();
return str;
}
public String getMyName(){
return "Idea";
}
}
4)测试程序
在/src/test/java目录下新建测试文件HelloFriendTest.java
package com.atguigu.maven;
import org.junit.Test;
public class HelloFriendTest {
@Test
public void testHelloFriend(){
HelloFriend helloFriend = new HelloFriend();
String results = helloFriend.sayHelloToFriend("Maven");
System.out.println(results);
}
}
5)关键:对Hello的依赖
问题:HelloFriend工程会到哪里去找Hello呢?
● 本地仓库。任何一个Maven工程会根据坐标到本地仓库中去查找它所依赖的jar包。
4.5 依赖管理
1)基本概念