大数据技术之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)基本概念

 

posted @ 2021-12-03 20:05  白森  阅读(103)  评论(0编辑  收藏  举报