Java--Maven,POM,maven安装,maven核心,命令

Posted MinggeQingchun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java--Maven,POM,maven安装,maven核心,命令相关的知识,希望对你有一定的参考价值。

一、Maven

Maven是Apache软件基金会组织维护的一款自动化构建工具,Maven这个单词的本意是:专家,内行。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。

Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理

maven官网地址maven官网

maven中央仓库maven中央仓库

1、Maven作用

(1)maven 可以整合多个项目模块之间的引用,还可以根据业务和功能拆分项目

(2)maven可以自动下载jar文档,源代码;管理jar文件 以及 jar版本(自动版本兼容)

(3)管理jar包依赖的其他jar包,自动下载并引入项目

(4)编译程序,把java编译为class

(5)测试代码

(6)打包文件,形成jar文件(Java工程),或者war文件(web工程)

(7)部署项目

2、构建项目

(1)清理:删除以前的编译结果,为重新编译做好准备

(2)编译:将Java源程序(.java文件)编译为字节码文件(.class文件)

(3)测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性

(4)报告:在每一次测试后以标准的格式记录和展示测试结果

(5)打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。(Java 工程对应jar 包,Web 工程对应war包)

(6)安装:在Maven环境下特指将打包的结果--jar包或war包安装到本地仓库中

(7)部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行

二、maven安装环境

1、从maven官网下载以前旧版本,可以查看文档,对应的JDK版本

maven老版本下载

2、将下载好的maven压缩包放在指定位置路径下,解压(路径不要带中文)

主要有如下两个目录

bin:执行程序,主要是mvn.cmd
conf:maven工具本身的配置文件 settings.xml

3、配置maven的环境变量

(1)在系统的环境变量中,新建一个M2_HOME的系统变量名称, 指定值是maven工具安装目录,bin之前的目录

如:M2_HOME=D:\\JDK\\apache-maven-3.6.3

 (2)再把M2_HOME加入到 path 之中,在所有路径之前加入 %M2_HOME%\\bin;

  

新的命令行中,执行mvn -v 命令

mvn -v 

第一次运行可能会报错如下:

The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE

(3)在这里在创建一个 JAVA_HOME的系统变量 

注:需要配置JAVA_HOME ,指定jdk路径

maven运行的时候如果用到了java.exe,没配置,maven就不能调用,配置了,就能调用

此时关闭DOS窗口,重新打开,重新运行 mvn -v命令,出现如下内容,maven安装,配置正确

Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: D:\\JDK\\apache-maven-3.6.3\\bin\\..
Java version: 1.8.0_291, vendor: Oracle Corporation, runtime: D:\\JDK\\java
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

4、执行mvn compile命令

第一次执行mvn compile命令时,会编译src/main目录下的所有java文件

(1)执行下载操作

maven工具执行的操作需要很多插件(java类--jar文件)完成的

(2)下载jar包(插件)

(3)下载的jar包存放位置

默认仓库(本机仓库):

C:\\Users\\(登录操作系统的用户名)Administrator\\.m2\\repository

Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-parameter-documenter-2.0.9.pom

https://repo.maven.apache.org :中央仓库的地址

执行mvn compile, 结果是在项目的根目录下生成target目录(结果目录), maven编译的java程序,最后的class文件都放在target目录中

5、设置maven安装主目录,setting.xml文件和本地仓库位置

(1)设置本机存放资源的目录位置(设置本机仓库)

默认仓库(本机仓库)存放位置:

C:\\Users\\(登录操作系统的用户名)Administrator\\.m2\\repository

可以将其复制到设定的目标路径,如将其复制到如下路径

D:\\XXXX\\maven-work\\repository (个人计算机存放位置)

(2)修改maven的配置文件, maven安装目录\\conf\\settings.xml(如:D:\\XXXX\\apache-maven-3.6.3\\conf\\settings.xml (个人计算机存放位置)),先备份 settings.xml

(3)编辑settings.xml文件,修改 <localRepository>  指定你的目录(不要使用中文目录)

        D:\\XXXX\\maven-work\\repository (个人计算机存放位置)

打开settings.xml文件,发现原始配置如下,在53行

 我们将<localRepository>标签拷贝出来,将标签中的路径修改为自己从默认C盘中拷贝出来的repository文件夹

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: $user.home/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->

  <localRepository>D:\\JDK\\maven-work\\repository</localRepository>

三、Maven核心 

1、约定的目录结构

maven项目采用“约定优于配置”的原则;maven项目的目录和文件的位置都是规定好的

一般情况下,约定>配置>编码

Maven默认约定了一套目录结构,在通过Maven创建了项目以后,项目的目录结构就是以这套目录结构作为模板创建的。虽然Maven提供了很多的模板,但是基本的目录结构都是固定的

根目录下主要有三个文件

src,target,pom.xml

Hello        根目录(工程名)
|---src      源代码          
|---|---main    主程序
|---|---|---java    主程序的 java 源码
|---|---|---resources    主程序的配置文件
|---|---|---webapp  (web项目)该目录是web应用源代码目录,如html文件和web.xml等都在该目录下
|---|---|---filters 项目的资源过滤文件所在的目录
|---|---test    测试程序
|---|---|---java    测试程序的 java 源码
|---|---|---resources    测试程序的配置文件
|---|---|---filters 测试相关的资源过滤文件所在的目录
|---target    存放编译、打包后的输出文件
|---pom.xml    Maven 工程的核心配置文件

我们可以在DOS命令窗口 或者 Windows PowerShell 输入

tree 根目录文件名

如下,tree Hello 

  

2、POM

POMProject Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件(pom.xml),包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。

执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。maven把一个项目当做一个模型使用。控制maven构建项目的过程,管理jar依赖

 补充标签:

(1)<scope>标签:依赖范围

scope的值有 compile,test,provided ,默认是compile

在maven构建项目的编译, 测试 ,打包, 安装 ,部署 过程(阶段)起作用

如下, junit的依赖范围是 test

<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
</dependency>

(2)<properties>标签:属性设置

【1】maven中常用属性设置

<properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 项目构建使用的编码,避免中文乱
码
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 生成报告的编码
     <maven.compiler.source>1.8</maven.compiler.source> 源码编译 jdk 版本
     <maven.compiler.target>1.8</maven.compiler.target> 运行代码的 jdk 版本
 </properties>

【2】 设置全局变量

在 Maven 的 pom.xml 文件中,<properties>用于定义全局变量

POM 中通过$property_name的形式引用变量的值,标签名称一般由  项目名称 + 字段version组成

单个单词可直接 XX.version命名,多个单词可横线分割 XX-XX-version

定义全局变量

<properties>
    <dubbo.version>2.6.2</dubbo.version>
    <spring-context-version>4.3.10.RELEASE</spring-context-version>
</properties>

 引用全局变量

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>$dubbo.version</version>
</dependency>


<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>$spring-context-version</version>
</dependency>

(3)<resource>标签:资源;<build>标签:构建

src/main/java 和 src/test/java 这两个目录中的所有*.java 文件会分别在 comile 和 test-comiple 阶段被编译,编译结果分别放到了 target/classes 和 targe/test-classes 目录中,但是这两个目录中的其他文件都会被忽略掉,如果需 要把 src 目录下的文件包放到 target/classes 目录,作为输出的 jar 一部分。需要指定资源文件位置。以下内容放到 <buid>标签中

<build>
    <resources>
         <resource>
             <directory>src/main/java</directory><!--所在的目录-->
             <includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
                 <include>**/*.properties</include>
                 <include>**/*.xml</include>
             </includes>
             <!-- filtering 选项 false 不启用过滤器, *.property 已经起到过滤的作用了 -->
             <filtering>false</filtering>
         </resource>
    </resources>
</build>

 3、坐标(gav)

Maven 把任何一个插件都作为仓库中的一个项目进行管理,用一组(三个)向量组成的坐标来表示坐标在仓库中可以唯一定位一个 Maven 项目

groupId:组织名,通常是 公司或组织域名倒序 + 项目名

artifactId:模块名,通常是工程名

version:版本号

项目在仓库中的位置是由坐标来决定的:groupId、artifactId 和 version 决定项目在仓库中的路径,artifactId 和 version 决定 jar 包的名称

4、依赖管理(dependency)

管理项目可以使用的jar文件

依赖范围:compile、test、provided,默认采用 compile

注:

项目中用到的所有依赖(jar ) ,必须在本地仓库中有;没有必须通过maven下载, 包括provided的都必须下载 

5、仓库管理

Maven仓库能帮助我们管理它的文件(主要是JAR),就是放置所有JAR(WAR,ZIP,POM)的地方

(1)Maven 仓库存放

        【1】Maven 的插件,插件也是一些 jar,这些 jar 可以完成一定的功能

        【2】我们自己开发项目的模块

        【3】第三方框架或工具的 jar 包

(2)仓库分类

    本地仓库:个人计算机上的文件夹,存放各种jar

        默认存放在~\\.m2\\repository中

    远程仓库, 在互联网服务器上的,使用网络才能使用的仓库

        【1】中央仓库,最权威的, 所有的开发人员都共享使用的一个集中的仓库        

           https://repo.maven.apache.org :中央仓库的地址

        【2】中央仓库的镜像:就是中央仓库的备份, 在各大洲,重要的城市都是镜像

        【3】私服,在公司内部,在局域网中使用的, 不是对外使用的。

6、生命周期

maven工具构建项目的过程,就是生命周期

maven构建项目的过程,清理,编译,测试,报告,打包,安装,部署

(1)mvn compile        

编译main/java/目录下的java 为class文件, 同时把class拷贝到 target/classes目录下面
把main/resources目录下的所有文件 都拷贝到target/classes目录下

(2)mvn test-compile         

编译测试程序(会在当前目录下生成一个 target目录,里边存放编译测试程序之后生成的字节码文件)

(3)mvn test         

测试(会生成一个目录surefire-reports,保存测试结果)

(4)mvn package        

打包主程序(会编译、编译测试、测试、并且按照 pom.xml 配置把主程序打包生成 jar 包或者 war 包)

(5)mvn install         

安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中)

(6)mvn deploy         

部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中还会自动把项目部署到 web 容器中)

(1)使用 mvn package 打包之后,会在工程目录的target目录下生成一个工程名-版本好的jar包

(2)将其拷贝到自己复制的maven本地库下,按照工程路径com.公司组织名.工程名

 (3)查看当前被打包的工程pom.xml文件下的坐标(gav)信息

 

(4)将其拷贝到需要依赖引用的工程下 

(5)编译测试,通过

7、插件

maven命令执行时,真正完成功能的是插件,插件就是一些jar文件, 一些类

8、继承

9、聚合

以上是关于Java--Maven,POM,maven安装,maven核心,命令的主要内容,如果未能解决你的问题,请参考以下文章

Java Maven MOJO - 从项目 POM 中获取信息

maven pom.xml报错

Java-Maven-Runoob:Maven POM

java MAVEN 项目出现红叉

Github Java Maven Actions 持续集成 POM 是在引用自己

markdown [独立可运行的jar包pom配置] #java #maven