01.maven

Maven

第一阶段:注重基础,编程思想的锻炼。单机版,socket

第二阶段:注重web编程的原理,web工作模式,网络版。

第三阶段:注重框架的使用。框架就是半成品, 提高开发的效率,提高项目可重用性、可扩展性、安全性、可靠性。兼顾原理

第四阶段:分布式集群框架。提高项目的高可用、高负载、高性能。

第一节 Maven简介

1.1 简介

Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM,Project Object Model)概念,Maven利用一个中央仓库能管理一个项目的构建、报告和文档等步骤。
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。。
官网地址:http://maven.apache.org/

1.2 Maven核心功能
传统项目的问题:
1 需要把jar复制到项目中,繁琐
2 项目体积更大,不利于维护
3 不利于团队开发

Maven主要有两大核心功能:
      1. 依赖管理。(jar包的管理)
      2. 项目构建。(清理、编译、单元测试、打包、安装、部署、运行)在idea中利用他的功能

第二节 Maven环境配置

Maven 是一个基于 Java 的工具,所以要做的第一件事情就是安装 JDK。(略)

2.1 下载Maven库
下载地址:http://maven.apache.org/download.cgi
推荐版本:apache-maven-3.5.0
2.2 解压下载库认识Maven库目录
备注: 解压文件尽量不要放在含有中文或者特殊字符的目录下。
       bin:含有mvn运行的脚本
       boot:含有plexus-classworlds类加载器框架
       conf:含有settings.xml配置文件
       lib:含有Maven运行时所需要的java类库
       LICENSE.txt, NOTICE.txt, README.txt针对Maven版本,第三方软件等简要介绍
2.3 配置Maven环境变量
    1.右键我的电脑(或者计算机)-属性-高级系统设置-高级-环境变量-系统变量-新建MAVEN_HOME,值为maven的安装目录
    2.%MAVEN_HOME%\bin;追加到Path变量的值后面
    3.检验是否成功:cmd-> mvn -v  或 mvn -version
    4.修改配置文件:maven安装目录下conf目录中settings.xml

在这里插入图片描述

2.4 配置Maven仓库

Maven使用仓库管理各种jar包和插件。

Maven仓库分为:本地仓库(local)、远程仓库(remote)两大类

本地仓库: 本地电脑中的仓库。默认位置为: ${user:home}/.m2/repository

远程仓库: 远程仓库又包括:中央仓库+私服+其它公共远程仓库 (比如阿里、163等)

中央仓库:是maven自带的远程仓库,默认地址:https://repo.maven.apache.org/maven2,由于默认中央仓库的服务器在国外,下载会比较慢,一般需要配置使用国内的公共远程仓库作为中央仓库镜像。注意配置了中央仓库镜像就不再走默认中央仓库。

私服:是架设在本机或者局域网中的一种特殊的远程仓库,通过私服可以方便的管理其它所有的外部远程仓库

在maven的conf目录中找到

<!--第一个位置在根节点下添加本地仓库位置-->
<localRepository>D:\Repositories\Maven</localRepository>

<!--第二个位置,在mirrors节点下添加 中央仓库镜像-->
 <mirror>
	      <id>alimaven</id>
	      <name>aliyun maven</name>
	      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
	      <mirrorOf>central</mirrorOf>       
 </mirror> 
<!--第三个位置,在profiles节点下添加 jdk版本全局配置,因为默认为1.5-->
<profile>  
        <id>jdk18</id>  
        <activation>  
            <activeByDefault>true</activeByDefault>  
            <jdk>1.8</jdk>  
        </activation>  
        <properties>  
            <maven.compiler.source>1.8</maven.compiler.source>  
            <maven.compiler.target>1.8</maven.compiler.target>  
            <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>  
        </properties>   
 </profile>

检索顺序:先检索本地仓库--再检索远程仓库--最后检索中央仓库
具体可看下图示例

在这里插入图片描述

第三节 Maven入门

3.1 Maven程序目录结构

约定大于配置:能使用约定好的方式,就不要配置。

手动创建:

maven_hello	
 ----src
 -------main
 ----------java
 -------------per
 -----------------damon
 --------------------Hello.java
    	   resources
    	   webapp (web项目)
 -------test
 ----------java
 -------------per
 -----------------damon
 -------------------test
 ----------------------HelloTest.java
 ----------resources
 -----pom.xml	

 src/main/java:存放项目的.java文件
 src/main/resources:存放项目资源文件。如配置文件
 src/test/java:存放所有测试的.java文件.如Junit测试类
 src/test/resources:测试资源文件
 【target:项目输出位置(可以自动生成)】
 pom.xml(maven项目核心配置文件)

pom.xml文件如下

<?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>

  	<!--组织id per.damon.maven   GAV坐标 -->
    <groupId>per.damon.maven</groupId>
	<!--项目名 模块名-->
    <artifactId>maven_hello</artifactId>
	<!--项目版本  SNAPSHOT 快照 不稳定版本  RELEASE 发布版 稳定-->
    <version>1.0-SNAPSHOT</version>
	<!--打包形式  jar包-->
    <packaging>jar</packaging>
	<!--依赖-->
	<dependencies>
		<dependency>
		  <groupId>junit</groupId>
		  <artifactId>junit</artifactId>
		  <version>4.12</version>
		  <scope>test</scope>
		</dependency>
	</dependencies>
</project>

使用命令创建(了解)

mvn archetype:generate -DgroupId=com.qf.maven -DartifactId=maven02  -DinteractiveMode=false -DarchetypeCatalog=internal

3.2 Maven常见命令

Maven的另一个核心功能是项目构建。

构建包括:清理、编译、测试、打包、安装、部署、运行等。这些过程都可以使用Maven命令来完成。

每个maven命令都有相对于的插件来完成。

3.2.1 clean
3.2.2 compile
3.2.3 test
3.2.4 package
3.2.5 install
3.2.6 其他命令

mvn deploy:部署,部署到私服

mvn tomcat:run:运行

3.3 Maven构建生命周期
1. Clean:项目构建前的清理操作
2. Default(Build): 核心生命周期核心过程:编译,测试,运行,打包等等
3. Site:项目站点文档创建。

3.4 Maven POM文件
POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。
执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。
POM 中可以指定以下配置:
    项目依赖
    插件
    执行目标
    项目构建 profile
    项目版本
    项目开发者列表
    相关邮件列表信息

基本的pom.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>
    <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
    <groupId>com.companyname.project-group</groupId>
 
    <!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
    <artifactId>project</artifactId>
 
    <!-- 版本号 SNAPSHOP快照版  RELEASE发布版-->
    <version>1.0-SNAPSHOT</version>
  	
  	<!--打包形式 例如jar、war、ear、pom-->
  	<packaging>jar</packaging>
</project>

所有 POM 文件都需要 project 元素和三个必需元素:groupId,artifactId,version。这个必须元素叫做坐标(GAV)

3.5 Maven引入外部依赖

pom.xml 的 dependencies 列表列出了我们的项目需要构建的所有外部依赖项。

<dependencies>
  		<!--坐标GAV-->
		<dependency>
		  <groupId>junit</groupId>
		  <artifactId>junit</artifactId>
		  <version>4.12</version>
		  <scope>test</scope>
		</dependency>
</dependencies>

第四节 使用开发工具创建Maven项目

4.1 Idea配置Maven
第一步 :安装插件

Idea自带maven插件,目前Idea不需要安装。

第二步:配置Maven
在Idea的启动初始界面,打开:Configure-->Settings-->Build,Execution,Deployment-->Maven
如下图:

在这里插入图片描述

在Importing中,选择自动导入依赖

在这里插入图片描述

第三步:Idea创建Maven工程

pom.xml文件如下

<?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>per.damon.maven</groupId>
    <artifactId>hellomaven</artifactId>
    <version>1.0-SNAPSHOT</version>


</project>

添加依赖

上网搜索依赖进行添加: 推荐网站:http://mvnrepository.com/
示例:
<dependencies>
	<dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.41</version>
    </dependency>
</dependencies>
        Scope:声明jar包的存活时间
       		 取值说明:
              1、provided:编译和测试时需要,打包和运行不需要  例如servlet-api  jsp-api(tomcat中有这两个api)
              2、compile(默认值):编译、测试、运行、打包需要  druid  dbutils  fileupload  jstl
              3、runtime:测试、运行、打包需要   mysql驱动(编译阶段sql语句只是字符串)
              4、test:测试 例如junit
              5、system:编译和测试时需要,显示引用,Maven不会检索

安装jar包到本地仓库命令
mvn install:install-file -DgroupId=per.damon -DartifactId=validatecode -Dversion=1.0.0 -Dpackaging=jar -Dfile=ValidateCode.jar

依赖范围:

A 依赖B,需要再A的pom.xml文件中添加B的坐标,添加坐标时需要指定依赖范围,依赖范围包括:

(1)compile:编译范围, 编译范围的依赖会在编译,测试,运行,打包(war)都会使用依赖jar包

(2)provided:提供依赖,provided依赖在编译,测试时需要,运行,打包都不会包含。

(3)runtime:运行依赖,runtime依赖在运行、测试、打包的需要,但在编译的时候不需要,比如:jdbc的驱动包

(4)test:测试依赖,在编译和运行时不需要,他们只有在测试编译和测试运行时使用, 比如junit,也不会被打包

(5)system:系统依赖,system依赖与provided类似,但是你必须显示的提供一个对于本地系统中jar文件的路径,需要指定systemPath磁盘路径,system依赖不推荐使用。

依赖范围编译测试运行打包(war)例子
compileyesyesyesyesbeanutils、fileupload
testnoyesnonojunit
providedyesyesnonoserlvet-api、jsp-api
runtimenoyesyesyesjdbc驱动
systemyesyesnono本地jar包。maven仓库之外的jar包
注意:打包jar包时,不会包含任何依赖包的。
默认依赖范围:compile
依赖范围由强到弱的顺序是:compile-->provided-->runtime-->test

第五节 Maven传递依赖

5.1 什么是传递依赖?
当项目依赖一个jar包时,与这个jar包关联的其他jar包也会关联到当前项目,这种现象就是传递依赖。
比如A项目依赖B项目,B又依赖C项目, 此时A中也包含了C的依赖。
5.2 依赖传递出现的问题
依赖传递出现的问题: 经常出现jar包冲突,
 解决方案:1 直接排除指定的jar包 2版本号限定原则
5.3 解决jar包冲突的方式(4种)
5.3.1 排除原则(常用)
	<exclusions>
               <exclusion>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
               </exclusion>
    </exclusions>
5.3.2 版本号限定原则(常用)
 <!-- 标记版本号 -->
 <!--添加属性-->
    <properties>
        <mysql.version>5.1.42</mysql.version>
    </properties>

    <!--02版本锁定-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
      <!-- 依赖管理 -->
      <dependencies>
          <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
      </dependencies>
5.3.3 路径就近原则(基本不用)
5.3.4 第一声明优先原则(基本不用)

第六节 分模块构建项目

将商城项目拆分为多个模块开发:

父模块(工程)

dao

service

web
在这里插入图片描述

6.1理解继承和聚合
继承
    开发中多个项目有共同的jar包依赖,可以采用继承方式简化各个项目的pom文件,在父类的pom文件中依赖共同拥有的jar。
    继承是为了消除重复,如果将dao、service、web分开创建独立的工程则每个工程的pom.xml文件中的内容存在重复,比如:设置编译版本、
    锁定mysql的版本的等,可以将这些重复的配置提取出来在父工程的pom.xml中定义。 
   注意:
       1.父级项目只能是pom打包方式。
       2.子项目是一个Maven Module

聚合
   项目开发通常是分组分模块开发,每个模块开发完成要运行整个工程需要将每个模块聚合在一起运行,比如:dao、service、web三个工程最终
   会打一个独立的war运行。
   能够把项目的各个模块聚合在一起构建。一般用于分模块开发,最后整体打包发布。
   
   注意:
       1.根项目(模块)是一个pom项目。
       2.子模块:Maven Module
       3.每个模块写完后需要上传到私服
       4.打包,需要整体打包找到最后的war项目使用Tomcat加载
       
        实际中,我们会将一些庞大的项目拆分为若干模块进行开发
        三层+MVC 如下:
        dao (包含实体类、utils)----------jar
        service------jar
        web----------war

6.2 案例演示继承和聚合

​ 第一步:创建父工程,修改pom.xml文件

​ 第二步:创建dao,并继承父工程

​ 第三步:创建service,并继承父工程

​ 第四步:创建web,并继承父工程

​ 第五步:运行

注意:分模块开发项目编译、打包、安装需要使用使用父工程来整体操作。如果要操作单个子模块,最后先整体安装一次,因为单个子模块需要依赖信息。

方法1:在maven-web工程的pom.xml中配置tomcat插件运行
运行maven-web工程它会从本地仓库下载依赖的jar包,所以当maven-web依赖的jar包内容修改了必须及时发布到本地仓库,比如:maven-web依赖的maven-service修改了,需要及时将maven-service发布到本地仓库。
方法2:在父工程的pom.xml中配置tomcat插件运行,自动聚合并执行
推荐方法2,如果子工程都在本地,采用方法2则不需要子工程修改就立即发布到本地仓库,父工程会自动聚合并使用最新代码执行。

注意:如果子工程和父工程中都配置了tomcat插件,运行的端口和路径以子工程为准。

6.3 聚合与继承的关系
  • 聚合是为了方便快速构件项目。对于聚合模块来说,它知道有哪些被聚合的模块,但那些模块不知道这个聚合模块的存在;
  • 继承是为了消除重复配置。对于继承关系的父POM来说,它不知道有哪些子模块继承于它,但是子模块必须知道自己的父POM是什么。

第七节 私服

​ 正式开发时,不同的项目组开发不同的工程。dao工程开发完毕,发布到私服。service从私服下载dao。

​ 公司在自己的局域网内搭建自己的远程仓库服务器,称为私服,私服服务器即是公司内部的maven远程仓库,每个员工的电脑上安装maven软件并且连接私服服务器,员工将自己开发的项目打成jar并发布到私服服务器,其它项目组从私服服务器下载所依赖的构件(jar)。
在这里插入图片描述

7.1搭建私服环境
7.1.1下载nexus

Nexus 是Maven仓库管理器,通过nexus可以搭建maven仓库,同时nexus还提供强大的仓库管理功能,构件搜索功能等。下载地址:http://www.sonatype.org/nexus/archived/

7.1.2 安装nexus
cmd进入bin目录,执行nexus.bat install
7.1.3 卸载nexus
cmd进入nexus的bin目录,执行:nexus.bat uninstall
7.1.4 启动nexus

方法1:
cmd进入bin目录,执行nexus.bat start
方法2:
windows服务中直接启动nexus服务

如何验证启动成功:查看nexus的配置文件conf/nexus.properties

# Jetty section
application-port=8081  	# nexus的访问端口配置
application-host=0.0.0.0 	# nexus主机监听配置(不用修改)
nexus-webapp=${bundleBasedir}/nexus 	# nexus工程目录
nexus-webapp-context-path=/nexus	 # nexus的web访问路径

# Nexus section
nexus-work=${bundleBasedir}/../sonatype-work/nexus   # nexus仓库目录
runtime=${bundleBasedir}/nexus/WEB-INF  # nexus运行程序目录

访问:
http://localhost:8081/nexus/

使用Nexus 内置账户admin/admin123登陆:
点击右上角的Log in,输入账号和密码 登陆
7.2 私服仓库类型

nexus的仓库:
在这里插入图片描述

nexus的仓库有4种类型:

  1. hosted,宿主仓库,部署自己的jar到这个类型的仓库,包括releases和snapshot两部分,Releases公司内部发布版本仓库、 Snapshots 公司内部测试版本仓库
  2. proxy,代理仓库,用于代理远程的公共仓库,如maven中央仓库,用户连接私服,私服自动去中央仓库下载jar包或者插件。
  3. group,仓库组,用来合并多个hosted/proxy仓库,通常我们配置自己的maven连接仓库组。
  4. virtual(虚拟):兼容Maven1 版本的jar或者插件
    nexus仓库默认在sonatype-work目录中:
7.3 将项目发布到私服
1. 把dao模块上传到私服(如果上述setting.xml文件中配置过再次检查是否配置完整正确):
    第一步:配置私服地址 
            1. 在settings.xml添加:
          <server>
                <id>releases</id>
                <username>admin</username>
                <password>admin123</password>
          </server>
          <server>
                <id>snapshots</id>
                <username>admin</username>
                <password>admin123</password>
          </server>
		2.在当前项目的pom.xml文件添加:
		  <!-- 配置远程发布到私服,mvn deploy -->
              <distributionManagement>
                    <repository>
                        <id>releases</id>
                        <url>http://localhost:8081/nexus/content/repositories/releases/</url>
                    </repository> 
                    <snapshotRepository>
                        <id>snapshots</id>
                        <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
                    </snapshotRepository> 
                </distributionManagement>
    第二步: 运行 deploy命令,不同开发工具会有差异。
    
    如果所有配置正确,发现上传私服失败,需要进入私服找到指定仓库 
         Repository--- Access Settings--Deployment Policy修改为允许发布
7.4 从私服下载jar包
3.service模块从私服下载dao包
        1.1、在settings.xml文件中
       <profile>
        <id>dev</id>
        <repositories>
            <repository>
                <id>nexus</id>
                <name>nexus</name>
                <url>http://localhost:8081/nexus/content/groups/public/</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>
        </repositories>
		<pluginRepositories>  
    	<!-- 插件仓库,maven的运行依赖插件,也需要从私服下载插件 -->
        <pluginRepository>  
        	<!-- 插件仓库的id不允许重复,如果重复后边配置会覆盖前边 -->
            <id>public</id>  
            <name>Public Repositories</name>  
            <url>http://localhost:8081/nexus/content/groups/public/</url>  
        </pluginRepository>  
    </pluginRepositories>  
    </profile>
    2.激活私服
		<!-- 激活 -->
<activeProfiles>
  <activeProfile>dev</activeProfile>
</activeProfiles>
          
注意:
    私服一般安装在内网的其他服务器上,而不是本机上。因此上面的配置中localhost的部分在实际情况中应该修改为公司中内网的私服服务器地址。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值