zoukankan      html  css  js  c++  java
  • Maven 学习

    视频学习:https://www.bilibili.com/video/BV1Fz4y167p5?p=3&spm_id_from=pageDriver

    1. 主要内容

    2. Maven 的简介

    2.1 简介

    ​ Maven 作为 Apache 组织中的一个颇为成功的开源项目,Maven 主要服务于基本 java 平台的项目创建,依赖管理和项目信息管理

    2.2 项目创建

    ​ 用软件的方法将繁琐重复的工作进行自动化,使得软件的构建可以像全自动流水线一样,只需要一条简单的命令,就能够自动完成,很快就能得到最终结果

    2.3 项目构建工具

    Ant 构建

    ​ 最早的构建工具,基于 IDE,但 XML 脚本编写格式让 XML 文件特别大,对工程构建过程中的过程控制特别好

    Maven

    ​ 项目对象模型,通过其描述信息来管理项目的构建,报告和文档的软件管理工具,它填补了 Ant 缺点,Maven 第一次支持了从网络上下载的功能,仍然采用 xml 作为配置文件格式。Maven 专注的是依赖管理,使用 java 编写

    Gradle

    ​ 结合以上两个的优点,继承了 Ant 的灵活和 Maven 的生命周期管理,最后被 google 作为了 Android 御用管理工具,它最大的区别是不用 XML 作为配置文件格式,采用了 DSL 格式,使得脚本更加简洁

    2.4 Maven 的四大特性

    2.4.1 依赖管理系统

    ​ 依赖管理系统 jar 包管理,jar 包升级时修改配置文件即可,可用 groupId、artifactId、version 组成的 Coordination(坐标)唯一标识一个依赖。

    ​ 任何基于 Maven 构建的项目自身也必须定义这三项属性,生成的包可以是 jar 包,也可以是 war 包,如下依赖引用:

    <dependency>
        <groupId>javax.servlet</groupId>	
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>
    

    坐标属性的理解

    ​ Maven 坐标为各种组件引入了秩序,任何一个组件都必须明确定义自己的坐标

    groupId

    ​ 定义当前 Maven 项目隶属的实际项目-公司名称。

    artifactId

    ​ 该元素定义实际项目中的一个 Maven 模块-项目名。推荐使用实际项目名称作为 artifactId 的前缀

    version

    ​ 该元素定义 Maven 项目当前所处的版本

    2.4.2 多模块构建

    ​ 在 Maven 中需要定义一个 parent POM 作为一组 module 的聚合 POM,在该 POM 中可以使用 标签来定义一组子模块,parent POM 不会有什么实际构建产出,而 parent POM 中的 build 配置以及依赖配置都会自动继承给子 module

    2.4.3 一致的项目结构

    ​ 制定了一套项目目录结构作为标准的 java 项目结构,解决不同的 IDE 带来的文件目录不一致问题

    2.4.4 一致的构建模型和插件机制

    3. Maven 的安装配置和目录结构

    3.1 Maven 的安装配置

    3.1.1 JDK 的版本

    ​ JDK 版本 1.7 及以上版本

    3.1.2 下载 Maven

    ​ 下载地址:https://maven.apache.org/download.cgi

    3.1.3 配置 Maven 环境变量

    • 将解压后的 Maven 的根目录配置到系统环境变量中 MAVEN_HOME
    • 把 bin 目录配置到系统变量 path 中

    注意:maven 解压后存放的目录不要包含中文和空格

    3.1.4 检查 Maven 是否安装成功

    ​ 打开 cmd,执行 mvn -v

    3.2 Maven 目录结构

    3.2.1 创建一个文件夹作为项目的根目录

    ​ 创建 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>
        <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
        <groupId>com.xxxx</groupId>
     
        <!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
        <artifactId>maven</artifactId>
     
        <!-- 版本号 -->
        <version>0.0.1-SNAPSHOT</version>
    	<packaging>jar</packaging>
    	
    	<name>maven</name>
    	<url>http://maven.apache.org</url>
    	
    	
    	<properties>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    		<!-- 这里只能写大的版本号12,不能具体到 12.0.1-->
    		<maven.compiler.source>12</maven.compiler.source>
    		<maven.compiler.target>12</maven.compiler.target>
    		<maven.compiler.compilerVersion>12</maven.compiler.compilerVersion>
    	</properties>
    	
    	<dependencies>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>3.8.1</version>
    			<scope>test</scope>
    		</dependency>
    	</dependencies>
    	
    </project>
    

    3.2.2 编写主函数

    package com.xxxx.demo01
    
    
    public class Hello {
    	public static void main(String[] args) {
    		System.out.println("Hello Maven");	
    	}
    	
    }
    

    3.2.3 cmd 下编译并运行

    ​ 进入项目目录,使用 cmd

    1. 编译 java 文件

      mvn complie

    2. 执行 main 方法

      mvn exec:java -Dexec.mainClass="com.xxxx.demo01.Hello"

    3. 为了更好的下载依赖,可将镜像更改为 阿里镜像,另可修改默认仓库位置

      1.1 修改默认仓库位置
      maven-->conf-->settings.xml
      <localRepository>F:/Java/m2/repository</localRepository>
      注意:仓库位置为本机的指定的目录,记得改成 "/"
      1.2 更换镜像
      <mirror>
            <id>nexus-aliyun</id>
            <mirrorOf>central</mirrorOf>
            <name>Nexus aliyun</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
      </mirror>
      

      编译不成功,可能出现的问题:

      • JDK 环境配置有问题

      • 代码编写时,类里面没有设置包名(如果编译时类没加包名,执行时也不需要加包名)

      • 报 Fatal error compiling: 错误: 无效的目标发行版:12.0.1 错误

        解决:将 版本号改成 12 即可

    4. Maven 命令

    Maven 的命令格式如下:

    mvn [plugin-name]:[goal-name]
    

    执行 plugin-name 插件的 goal-name 目标

    4.1 常用命令


    注意:运行 maven 命令,首先需要定位到 maven 项目的目录,也就是 pox.xml 文件所在的目录,否则,需要通过参数来指定项目的目录

    5. IDEA 编辑器集成 Maven 环境

    5.1 设置 Maven 版本

    选择 File --> Other Settings(全局配置) -- > Settings for New Projects --> 搜索 Maven

    • 修改 Maven home directory
    • 修改 user settings file

    6. Maven 项目的创建

    6.1 创建 Java 项目

    6.1.1 新建项目

    ​ 选择 File --> New --> Project --> maven --> quickstart

    6.1.2 编译项目

    ​ 选择 edit configurations --> + --> maven

    6.2 启动 web 项目

    1. 创建 web 项目与创建 java 项目步骤基本一致,区别在于选择 Maven 模板 (web 项目选择 webapp)

    2. 修改 JDK 为当前版本

    3. 添加 web 部署的插件

      ​ 在 build 标签中添加 plugins 标签

      ​ Jetty 插件 和 tomcat 插件

    7. Maven 仓库的基本概念

    ​ 对于 Maven 来说,仓库只分为两类:本地仓库和远程仓库

    ​ 当 Maven 根据坐标寻找构件时,会首先查看本地仓库,如果本地仓库存在,则直接使用;如果本地没有,Maven 则会去远程仓库查找,发现需要的构件时之后,下载到本地仓库再使用,如果都没有,则会报错。

    ​ 远程仓库分为三种:中央仓库、私服、其他公共库

    ​ 中央仓库是默认配置下,Maven 下载 jar 包的地方

    ​ 私服是另一种特殊的远程仓库,为了节省带宽和时间,应该在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。内部的项目还能部署到私服上供其他项目使用。

    ​ 在 Maven 项目目录下,没有诸如 libs/ 这样用来存放依赖文件的目录。当 Maven 在执行编译或测试时,如果需要使用依赖文件,它总是基于坐标使用本地仓库的依赖文件。

    ​ 默认情况下,每个用户在自己的用户目录下都有一个路径名 .m2/repository/ 的仓库目录,此仓库默认在 c 盘,可通过 maven 配置文件 conf 目录下 settings.xml 来指定仓库路径

    7.1 中央仓库

    ​ 默认的远程仓库

    7.2 私服

    ​ 私服是一个特殊的远程仓库,假设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的 maven 用户使用,当 maven 需要下载构件时,它去私服当中找,如果私服没有,则从外部远程仓库下载,并缓存在私服上,再为 maven 提供。

    7.3 其他公共库

    ​ 常用的阿里云仓库配置

    <mirror>
        <id>nexus-aliyun</id>
        <mirrorof>Nexus aliyun</mirrorof>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
    

    8. Maven 环境下构建多模块项目

    ​ 使用 maven 提供的多模块构建的特性完成 maven 环境下多个模块的项目的管理与构建

    • 模块 maven_parent -- 基模块(pom)
    • 模块 maven_dao -- 数据库的访问层,如 jdbc 操作 (jar)
    • 模块 maven_service -- 项目的业务逻辑层 (jar)
    • 模块 maven_controller -- 用来接收请求,相应数据 (war)

    9. Maven 的打包操作

    • 建立对应的目录结构
    • 添加 Profile 配置
    • 设置资源文件配置
    • 执行打包操作

    10. Maven 依赖的基本概念

    10.1 依赖的基本配置

    ​ 根元素 project 下的 dependencies 可以包含多个 dependence 元素,以声明多个依赖。

    ​ 每个依赖应该包含以下元素:

    1. groupId,artifactId,version:依赖的基本坐标
    2. Type:依赖的类型,大部分情况下不需要声明。默认值为 jar
    3. Scope:依赖范围
    4. Optional:标记依赖是否可选
    5. Exclusion:用来排除传递性依赖
    Now is better than never
  • 相关阅读:
    iOS 内存分配与分区
    iOS 静态库和动态库
    iOS 静态:动态 Pod
    iOS 架构
    基本控件文档-UIScrollView
    UIActivityIndicatorView
    UIControl事件
    UIDatePicker
    UIPageControl
    UIScrollView
  • 原文地址:https://www.cnblogs.com/alivinfer/p/14429414.html
Copyright © 2011-2022 走看看