Bootstrap

Maven------打包

1.软件工程

软件工程的核心思路:写代码也是一件工程,也是一件非常复杂的事情,正因为复杂,所以容易出现问题,想一些办法来进行预防和解决问题,我们就要使用一些第三方库;

如何使用库和框架来进行解决问题?

软件开发中也会有很多的常见问题和常见的场景,针对这些场景和问题也会产生出这些场景的对应办法,这些对应办法很可能被别人实现出来了,并且封装成了库,来供程序员进行使用;

我们通常是使用Java标准库的,但是除了标准库之外,还有大量的第三方库,这些库共同构建出了整个Java的生态;

Java之所以这么流行,主要是Java的生态太好了,当我们想解决一个实际问题的时候,很多时候我们都可以找到一个实际的库,来帮助我们来进行解决这个问题,提高了开发效率,减少出现BUG;

但是生态不仅仅是包含库而且也是包含着框架的;存在的意义都是帮助程序员的开发效率;框架就是更复杂的库,程序员要使用库,自己要做的工作就要越多,如果使用框架,自己要做的事情就会越少;

库是被动的,库被提供出来之后,程序员需要自己来手动写一些逻辑,来调用库

但是框架是主动的,使用框架的时候,框架已经提供好了,程序员需要做的事就是写一些简单的逻辑,供框架来进行调用;

库和框架应该在哪里去找呢?

如果是Java自带的标准库,那么就直接会存放在JDK里面,是自带的,直接就可以进行使用,但是如果是第三方库主要有下面几个途径:

1)官方网站(比较知名的第三方库,之前写的MYSQL,Connector直接在MYSQL的官网上面就可以找到

2)github(开源)

3)中央仓库(无论是官方主页,还是Github都意味着每一个第三方库都有着自己的主页,但是有官网主页啥的,就特别不好找,有时还要注册)

一些大佬们已经把这些第三方库给归档到一起了,只要在这个第三方库里面集中搜索,想要啥就有啥,同时又可以有统一的下载和安装手段了;

我们此时就需要用到Maven这个工具了

1)规划好项目的目录结构,目录结构是特别重要的,那个目录是干什么工作的;

2)负责构建打包程序,编译打jar包,如果是更复杂的程序,包含着很多模块,况且他们存在着一定的依赖关系,先编译哪个,后编译哪个,这是有一定顺序的

3)能够管理依赖,自动下载第三方库,自动安装,自动引入到目录里面,我们把Maven成为构建工具

在正式的公司中还经常会进行持续集成,程序员每进行改一次代码,一旦提交,就会有专门主动的主机自动修改代码,编译,打包,自动化验证,自动化部署,也不是光靠idea来进行搞定的;

2.Maven的安装

Maven是一个单独的应用程序,也是用Java写的,在idea里面,已经内置了Maven,我们就需要用Idea创建一个Maven项目;

1)我们直接进行点击File中的new Project,选择Maven,在窗口里面会有很多选项,直接默认,啥也不管,直接Next即可;

2)要填写项目名称和选择项目所在的位置(还是一直Next即可),最后点击Finish即可

在构建的时候我们会发现三个字段,这三个字段的作用是确定唯一的jar包

1))GroupId这个是表示公司的组织名,一般使用公司的域名的倒装形式来写的,例如阿里巴巴的组织名就是用com.alibaba

2))Artifactid是描述一个产品名(QQ,微信,王者荣耀)

3))Version描述版本,不同时机会发布不同的版本

当前我们用不到这三个字段,可以随便写,是因为咱们写的代码不需要发布到中央仓库里面

Maven中的目录结构

1)首先最上面的部分就是创建项目时后所指定的名字

2)第二行是idea的配置和项目文件,方便与idea来进行识别这个项目

3)src这是存放源代码的目录

4)main放置业务代码:是实际需要解决问题的代码

5)test放的是测试代码:用来验证业务代码是否是正确的代码,所以说很多时候,需要用代码来验证代码(自动化测试)

我们来进行举个例子:

业务代码:写一个功能,布置作业(写了很多代码,并把功能实现出来了)

测试代码:写一段代码,这个代码自动能够调用业务代码中的布置作业功能,取几个随机作业,把作业随机的布置给若干个同学,然后再进行自动检查这些同学是否能够收到作业,看到作业详情,看到作业内容是否和布置的内容是一致的

6)java里面放的是程序员的代码

7)resources存放的是依赖的资源(例如代码中,用到的一个图片,文本文件)

8)pom.xml存放的是内容是maven项目最核心的配置文件,xml在我们说到自定义协议的时候就已经接触到了,应用层协议,就是需要程序员来自己约定一个协议,约定好内容和格式,xml就是常见使用的数据格式,里面是有着很多标签的(有一对<>组成一对标签),例如:<project></project>这两个是开始标签和结束标签,这两个标签之间,存放的就是内容,这个标签就相当于是键值对,Key就是标签名,Value就是相当于标签的内容,描述一个树形结构

标签是可以嵌套的,标签和标签之间可以循环嵌套,构成一个父子标签,相当于是一个N叉树,对于一个xml文件来说,里面有哪些标签,标签之间如何进行嵌套,这些事情完全是由程序员自己约定好的,但是对于html文件来说他也是类似于这种标签组成的树形结构,但是Html语序存在着那些标签,以及标签之间如何进行嵌套,这些都是有规定的,不同的标签之间由不同的语义,这些也是明确规定的;

                      project
modelVersion     groupld    artifactId   version
<?xml version="1.0" encoding="UTF-8"?>这个文件是描述了该文件是一个xml文件,它所使用的版本和字符集,同时也是为了开发工具来进行解析
<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>org.example</groupId>
    <artifactId>Java100</artifactId>
    <version>1.0-SNAPSHOT</version>这三个属性是我们最初创建项目的时候所写的参数

    <properties>接下来的项目会按照JDK1.8来理解源码,并按照这个版本来生成字节码,这组选项一般是不会改变的
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
</project>

像JDK,MYSQL,操作系统,这种东西的版本升级,风险是非常大的,很有可能代码中的同一个操作,在不同的JDK,MYSQL中,会有不同的行为,就会引入一些BUG;

3.Maven的使用

当前使用Maven主要是做两件事:

1)用来管理依赖自动下载安装并引入第三方库-------此时要修改我们的pom.xml,我们此时就要使用<dependencies></dependencies>,这个标签用来管理项目的依赖

2)用来进行自动打包构建

中央仓库的网址:https://mvnrepository.com/

1)搜索MYSQL,选中Maven标签,把这段XML进行复制,直接粘贴到pom.xml中的dependencies(先自己手动写一个dependencies标签)标签里面;

注意:我们在手动实现使用Maven来进行下载jar包的时候,默认的还是从maven的中央仓库来进行下载,有时会出现爆红操作,可以进行;

2))由于maven下载jar包,默认还是从国外的官方仓库来进行下载,这个时候是首次使用国外网站,会有一点点慢,等待下载好了之后,maven会把这些下载好的jar包自动的放到一个本地仓库里面,如果下次想要下载这个Jar包,就不用再重新进行下载了,点击圆圈;

3)进行配置完成之后,我们就可以手动的在代码中使用对应的库了  

咱们的pom.xml是maven项目的核心配置文件,就是maven项目的司令部,文件就是使用xml这种格式来去进行组织;

3.1)在我们的dependencies这个标签里面是带有这很多的dependency标签在我们的一个项目里面可以有多个依赖,初始情况下的pom.xml里面没有依赖,我们就需要手动配置一下;

3.2)在我们的dependencies标签里面是带有多个dependency标签的,也就说一个项目里面可以管控着很多依赖,初始情况下面的这个pom.xml里面可能没有这个标签,于是我们就需要进行手动创建一下;

4)进行打包操作 

直接进行点击package即可,直接进行双击,右键进行点击run,当看到BUILD-SUCESS出现这个就打包成功

5)此时点击左边的target目录里面有一个文件,里面就是jar包,进行打开之后,就有.class文件了,二进制字节码文件;

6)就可以把这个jar包进行发布了;

上面就是说网络不好; 

1)我们说如果我们看到了这个库,那就说明是我们已经引入成功了,如果说我们没有这个库,那么我们就尝试点击右上角的那一个刷新按钮,你同时也要注意右下角的进度条;

2)无论是maven还是其他的库,都是通过同样的方式来进行引入的,我们只需要把对应的XML片段也就是坐标拷贝到你的pom.xml里面就可以了;

;