zoukankan      html  css  js  c++  java
  • Maven_day01

    Maven_day01

    1. maven介绍

    1.1 什么是maven

    maven译为“专家”,“内行”,是apache下的一个纯java开发的开源项目,是一个项目管理工具,可以对java项目进行构建,依赖管理。

    1.2 传统项目构建

    构建过程:

    创建一个工程,在工程中编写源代码及配置文件,对源代码进行编译,将java文件编译成class文件,执行junit单元测试,最后将工程打包成war包部署到tomcat运行。

    1.3 maven项目构建

    maven将项目的构建过程标准化,每个阶段使用一个命令完成。

    • maven工程构建的优点
      1. 一个命令完成构建,运行,方便快捷
      2. maven对每个构建阶段进行规范,有利于大型团队协作开发

    1.4 传统项目依赖管理

    传统项目工程管理所依赖的jar包完全靠人工进行,手工导入jar包。

    • 缺点

      1. v从网上找jar包不方便,有些jar包找不到

      2. jar包加入到工程中导致工程过大

      3. 没有对jar包版本的统一管理,容易导致版本冲突

    1.5 maven项目依赖管理

    maven项目中所依赖的jar包不需要手工添加,只需要在maven工程的配置文件pom.xml中添加jar包的坐标,就能自动从maven仓库中下载添加所需jar包。

    • 优点
      1. 对jar包版本统一管理,避免版本冲突
      2. maven中的jar包非常全,使用起来很方便

    1.6 使用maven的好处

    2. maven安装及配置

    • 下载

      http://maven.apache.org/download.cgi

    • 解压

      将maven解压到一个不含中文及空格的目录中。

    • maven环境变量配置

      1. 配置jdk,maven3.3.9需要的jdk版本为1.7以上

      2. 配置MAVEN_HOME

      3. 将%MAVEN_HOME%/bin加入到path中

    ​4. 测试maven是否安装成功

    cmd窗口运行mvn -v,看到maven版本为3.3.9及jdk版本为1.7以上,即安装成功:

    3. maven仓库

    3.1 三种仓库

    1. 本地仓库

    用来存储从远程仓库或中央仓库下载的插件和jar包,项目使用的插件或jar包优先从本地仓库查找。默认本地仓库在${user.dir}/.m2/repository,${user.dir}表示windows用户目录,例如:C:UsersWZL1998.m2 epository。

    1. 远程仓库

    远程仓库可以在互联网内,也可以在局域网内。当本地仓库找不到时,就去远程仓库下载。

    1. 中央仓库

    maven团队维护的,存储了非常全的jar包。https://repo1.maven.org/maven2

    3.2 配置本地仓库

    我的本地仓库在D:JavaEE16.Maven epository,在D:JavaEE16.Mavenapache-maven-3.3.9confsettings.xml配置本地仓库位置。

    <localRepository>D:JavaEE16.Maven
    epository</localRepository>
    

    4. maven项目工程目录

    • src/main/java: 存放项目的.java文件
    • src/main/resources: 存放项目资源文件,如spring,mybatis配置文件
    • src/test/java: 存放所有的单元测试.java文件,如junit测试类
    • src/test/resources: 测试资源文件
    • target: 项目输出位置,编译后的class文件会输出到此目录
    • pom.xml: maven项目核心配置文件

    5. 常用maven命令

    在dos窗口中运行时,前面要加上mvn;在eclipse中不需要加

    • compile

      编译命令,将src/main/java下的文件编译为class文件输出到target目录下。这个命令只会对java源程序编译,不会编译测试代码,编译测试类:mvn test-compile。

    • test

      测试命令,会运行src/test/java下的单元测试类。

    • clean

      清理命令,删除target目录的内容。

    • package

      打包命令,将java工程打包成jar包,web工程打包成war包。

    • install

      安装命令,将maven工程打成war包发布到本地仓库。位置:仓库/${groupId}/{artifactId}/version目录。

    6. 生命周期(了解)

    6.1 三套生命周期

    maven对项目构建过程分为三套相互独立的生命周期。

    • clean lifecycle

      在进行真正的构建之前进行一些清理工作。

    • default lifecycle

      构建的核心部分,编译,测试,打包,部署等。

    • site lifecycle

      生成项目报告,站点,发布站点。

    6.2 生命周期的阶段

    每个生命周期有很多阶段,每个阶段对应一个执行命令。

    • clean lifecycle

      pre-clean: 执行一些需要在clean之前完成的工作

      clean: 移除所有上一次构建生成的文件

      post-clean: 执行一些需要在clean之后立刻完成的工作

    • default lifecycle

    • site lifecycle

      pre-site: 执行一些需要在生成站点文档之前完成的工作

      site: 生成项目的站点文档

      post-site: 执行一些需要在生成站点文档之后完成的工作,并为部署做准备

      site-deploy: 将生成的站点文档部署到特定的服务器上

    在maven中,只要在同一个生命周期,执行后面的阶段,前面的阶段也会被执行,而不需要额外去输入前面的阶段。执行某个生命周期的某个阶段不会影响其它的生命周期。

    如果要同时执行多个生命周期的阶段,可在命令行输入多个命令,中间以空格隔开。如:clean package,该命令执行clean生命周期的clean阶段和default生命周期的package阶段。

    7. maven概念模型

    maven包含一个项目对象模型(project object model),一组标准集合,一个项目生命周期(project lifecycle),一个依赖管理系统(dependency management system),和用来运行定义在生命周期阶段中插件(plugin)目标(goal)的逻辑。

    maven概念模型图:

    • 项目对象模型

      一个maven工程都有一个pom.xml文件,在该文件中定义项目的坐标,项目依赖,项目信息,插件目标等。

    • 标准集合

      maven将整个项目管理过程定义一组标准。如:通过maven构建工程由标准的目录结构,有标准的生命周期阶段,依赖管理有标准的坐标定义等。

    • 项目生命周期

    • 依赖管理系统

      对项目所依赖的jar包进行统一管理。

      <!--添加依赖包-->
        <dependencies>
      	<!--此项目用到servlet,所以需要servlet-api-->      
        	<dependency>
              <!--groupId和artifactId统称为坐标,保证项目的唯一性-->
               <!--组织名-->
        		<groupId>javax.servlet</groupId>
               <!--模块名,项目名-->
        		<artifactId>servlet-api</artifactId>
               <!--版本号-->
        		<version>2.5</version>
               <!--依赖的作用范围-->
        		<scope>provided</scope>
        	</dependency>
        </dependencies>
      
    • 插件目标

      maven管理项目生命周期过程都是基于插件完成的。

    8. 入门项目构建

    8.1 eclipse安装m2e插件

    新建项目时如果能找到maven项目即表示maven插件已存在,但项目为了统一maven版本不会使用内置的maven版本,这里使用maven3.3.9。

    指定maven安装目录:

    8.2 User setting配置

    配置使用的maven的settings.xml文件,使用maven安装目录下的settings.xml文件:

    修改了settings.xml文件要点击update settings按钮对本地仓库重建索引,点击reindex。

    8.3 eclipse浏览本地仓库

    测试eclipse是否可以浏览maven的本地仓库,找到local respository本地仓库项,如果无法查看本地仓库,则右键点rebuild index重建索引即可。

    8.4 定义maven坐标

    每个maven工程都要定义本工程的坐标,坐标是maven对jar包的身份定义。如:

    <!--组织名,类似包名-->
    <groupId>com.itheima.maven</groupId>
    <!--模块名,项目名-->
    <artifactId>16.1maven</artifactId>
    <!--版本号;snapshot为快照版本,即非正式版本,release为正式发布版本-->
    <version>0.0.1-SNAPSHOT</version>
    <!--打包类型;jar:打包成jar包;war:打包成war包;pom:用于maven工程的继承,通常父工程设置为pom-->
    <packaging>war</packaging>
    

    8.5 构建web工程

    8.5.1 创建maven工程

    1. 右键new maven project

    2. 勾选create a simple project(skip archetype selection)

      即跳过骨架,如果不跳过,则创建的maven工程目录不完整。

      如果不勾选:

    3. 定义坐标

    工程目录示意:

    这里报错是因为缺少web工程目录,解决方法:右键项目-->javaEE tools-->generate deployment descriptor stub。生成后:

    8.5.2 设置编译jdk版本

    • 方法一:

    在pom.xml中加入:

     <!--修改全局jdk版本后,则此段代码可不加-->
      <build>
      	<plugins>
      		<plugin>
      		<!--添加编译器:右键项目==maven==add plugin==搜索compile-->
      			<groupId>org.apache.maven.plugins</groupId>
      			<artifactId>maven-compiler-plugin</artifactId>
      			<version>3.5.1</version>
      			
      		<!--将默认jdk版本1.5改为1.7-->
      		<configuration>
      			<!--源码版本-->
      			<source>1.7</source>
      			<!--编译目标版本-->
      			<target>1.7</target>
      			<!--指定编码-->
      			<encoding>utf-8</encoding>
      		</configuration>
      		</plugin>
      	</plugins>
    

    修改配置文件后,刷新工程,右键-->maven-->update projects,看到JRE System Library中变为JavaSE-1.7

    • 方法二:

      修改全局jdk版本:

      在D:JavaEE16.Mavenapache-maven-3.3.9confsettings.xml中修改profiles里的jdk版本为1.7,以后的项目则默认使用1.7来编译。

      <profile>
          <id>jdk1.7</id>
          <activation>
              <activeByDefault>true</activeByDefault>
              <jdk>1.7</jdk>
          </activation>
          <properties>
              <maven.compiler.source>1.7</maven.compiler.source>
              <maven.compiler.target>1.7</maven.compiler.target>
              <maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
          </properties>
      </profile>
      

    8.6 运行maven工程

    • 方式一:

      添加tomcat插件,使用插件运行,在pom.xml中:

      <!--添加tomcat7插件,以插件方式运行项目-->
        		<plugin>
        			<groupId>org.apache.tomcat.maven</groupId>
        			<artifactId>tomcat7-maven-plugin</artifactId>
        			<version>2.2</version>
        			<configuration>
        				<!--访问端口-->
        				<port>8080</port>
        				<!--项目路径-->
        				<path>/16.1maven</path>
        				<!--设置编码-->
        				<uriEncoding>utf-8</uriEncoding>
        			</configuration>
        		</plugin>
      

      运行步骤:

    • 方式二:

    直接当作普通的web项目运行即可。右键run as-->run on server。

    9. 依赖管理

    9.1 添加依赖

    添加依赖需要指定依赖jar包的坐标,可通过以下方式查询依赖的坐标:

    • 方式一:互联网搜索

      以spring core为例:

      访问https://mvnrepository.com,搜索spring core,选择版本,复制依赖即可。

      或直接百度搜索mvn repository spring

    • 方式二:使用maven插件的索引功能

      此种方式是从本地仓库中查找。

    9.2 依赖作用范围

    <dependency>
      		<groupId>javax.servlet</groupId>
      		<artifactId>jsp-api</artifactId>
      		<version>2.0</version>
        	<!--l依赖作用范围-->
      		<scope>provided</scope>
      	</dependency>
    
    • compile

      编译范围,默认依赖范围,可不写。编译范围的依赖会用在编译,测试,运行,由于运行时需要所以编译范围的依赖会被打包。

    • provided

      编译和测试时需要,运行时不需要,防止jar包冲突。如servlet-api运行时tomcat也会提供。

    • runtime

      运行和测试时需要。

    • test

      测试编译和测试运行时需要。

    • system

      与provided类似,但必须提供一个本地系统磁盘中的jar文件的路径,不推荐使用。

    10. pom.xml基本配置

    pom.xml是maven项目的核心配置文件,位于每个工程的根目录,基本配置如下:

    <!--project:文件根节点-->
    <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:pom.xml使用的对象模型版本-->
      <modelVersion>4.0.0</modelVersion>
      <!--groupId:项目名称,一般写项目的域名-->
      <groupId>com.itheima.maven</groupId>
      <!--artifactId:模块名称,子项目名称-->
      <artifactId>16.1maven</artifactId>
      <!--version:产品版本号-->
      <version>0.0.1-SNAPSHOT</version>
      <!--packaging:打包类型-->
      <packaging>war</packaging>
      <!--name:项目显示名,长用于maven生成的文档-->
      <name>maven入门</name>
      <!--description:项目描述,长用于maven生成的文档-->
      <description>maven入门案例</description>
      <!--dependencies:添加依赖包,配置依赖的坐标-->
      <dependencies>...</dependencies>
      <!--build:项目构建配置,配置编译,运行插件等-->
      <build></build>
    </project>
    
  • 相关阅读:
    shell28获取命令结果的第几个参数
    在 Amazon EC2 Linux 实例上手动安装 SSM 代理 Raspbian
    Trying out the Intel Neural Compute Stick 2 – Movidius NCS2
    Flask
    virtualenv/venv 和 pip
    轻量化卷积神经网络:SqueezeNet、MobileNet、ShuffleNet、Xception
    向 AWS Elastic Beanstalk 部署 Flask 应用程序
    Installing the AWS Toolkit for Visual Studio Code
    Installing the AWS SAM CLI on macOS
    树莓派显示器电源管理禁止屏幕休眠
  • 原文地址:https://www.cnblogs.com/ALiWang/p/12584487.html
Copyright © 2011-2022 走看看