Java中Maven基础详解(包括maven工作原理、安装配置、IDEA建立Maven工程)

Java中Maven基础详解(包括maven工作原理、安装配置、IDEA建立Maven工程)

当前主要的Java构建工具
  • Maven,Gradle,Ivy,Builder,Ant等
  • 其中,Maven是B/S项目主流,Gradle常用于移动开发
Maven基本概念:
  • apache组织提供的一个顶级项目,由Java开发
  • 作用:
    1. 管理项目构建生命周期
    2. 管理项目中jar(核心功能)。自动帮程序员甄别和下载第三方库(jar)
    3. 管理项目基础信息(文档管理、测试报告)

可以说,maven作用于Java平台的项目构建,依赖管理和项目信息管理。

1、项目构建生命周期:

[清理]–>[编译]–>[测试]–>[报告]–>[打包]–>[安装]–>[发布]

[clean]–>[compile]–>[test]–>[report]–>[package]–>[install]–>[publish]

2、项目中jar包管理

Maven工作原理:
在项目中,需要使用到第三方库(即第三方jar包),传统做法:自己去网上查找需要的jar包,下载到本地,进行配置,设置好地址,导入jar包,才能使用。这种传统做法存在两个问题:
1、查找jar包、下载、配置麻烦;
2、需要把jar包放置在合适的路径。当项目发送给其他机器时,可能会因为jar包地址报错。(例如,自己把jar包放在f盘,发送给其他电脑时,没有f盘,这时候编译时就会发生报错)
在项目构建工具Maven下,就可以避免这个问题,这也是Maven的核心功能所在:管理第三方jar包。
在Maven项目下,只需要网上在Maven仓库中搜索所需的jar包,将jar包的依赖信息复制在pom.xml文件中。这样,在项目编译时,maven会自动检索本地计算机是否含有所需jar包,如果没有,在私服仓库中查找jar包(即局域网内),都没有的话,就从Maven中央仓库中自动下载jar包。
由于Maven中央仓库服务器在国外,下载时速度可能比较慢,这时候可以选择国内一些有名的Maven仓库,如阿里云。
Maven中jar包的获取过程如下:
image-20201205185510650

[本地仓库]–>[局域网私服仓库]–>[中央仓库]

3、Maven项目信息管理
  1. api文档
  2. 测试报告
Maven安装与配置

安装 解压即可

注:现在IDEA,eclipse都自带Maven,如非必要,不必安装更换maven。IDEA中Maven的默认路径在IDEA安装目录下:ideaIU-2020.2.3.win\plugins\maven\lib\maven3

查看版本号:在maven3/bin目录下,调出cmd,输入mvn -v

所以Maven原本是不需要配置的。只是为了在任何路径下都可以使用Maven命令,所以需要配置

配置
  1. JAVA_HOME
  2. MAVEN-HOME:Maven安装地址
  3. [path] %MAVEN-HOME%\bin

1、JAVA_HOME在安装jdk时已经配置,故而不需要配置

2、MAVEN-HOME配置。在此电脑-属性-高级系统设置-系统属性中,点击环境变量,image-20201213102957668

在下方系统变量中,新建,变量名MAVEN-HOME,变量值填IDEA中maven的地址image-20201213103051009

3、[path]。系统变量中找到Path,双击进去,新建,输入%MAVEN-HOME%\bin,配置完成。

在cmd窗口中输入mvn -v,查看maven版本号,image-20201213103427626

表示配置成功。

Maven本地仓库配置

本地仓库默认位置:

C:\Users\Administrator\.m2\repository

重新设置Maven本地仓库地址

Maven安装路径\conf\setting.xml中定位标签



#53 <localRepository>/path/to/local/repository</localRepository>

重新设置本地仓库位置

<localRepository>D:\DevTools\ideaIU-2020.2.3.win\plugins\maven\repository</localRepository>

阿里云镜像设置

在mirror位置(大约160行左右)添加阿里云镜像

<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
</mirror>
Maven工程结构
  1. Maven可以管理的工程,必须按照【约定结构】来创建

  2. 结构

    image-20201213104034760

    1. src:(Java代码)

      1. main文件夹:主要开发 业务程序

        1. java(创建Java文件)

          Java文件创建package,如	src\main\java\com\bjpowernode\model\Student.java
          
        2. resources(存放程序资源文件(配置文件,properties))

      2. test:主要进行测试 单元测试程序

        1. Java(创建测试类)

          Java文件创建测试类,如	src\main\java\com\bjpowernode\model\TestMain.java
          
        2. resources(存放测试程序资源文件(测试时使用的配置文件))

    2. target文件夹:(编译后class文件,在创建项目时,不需要创建。Maven命令在执行时自动创建target)

      目录如图:image-20201205202949326

    3. pom.xml:(核心配置文件:主要用来向Maven讨要jar包)(Project Object Model)

eg:记事本开发Maven工程

Student.java

package com.bjpowernode.model;
public class Student{

    public void sayHello(){
        System.out.print("Hello Maven");
    }
}

TestMain.java

package com.bjpowernode.test;
import com.bjpowernode.model.Student;
import org.junit.Test;
public class TestMain{
    @Test
    public void myTest (){
        Student stu=n  ew Student();
        stu.sayHello();
    }
}
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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>	//固定不变的

	//这三行是定位package的,简称gav
    <groupId>com.bjpowernode</groupId>	//域名
    <artifactId>Maven_Project</artifactId>	//项目名,不能有中文
    <version>6.0</version>	//版本号
    //<package>war</package>	//这一行通常为默认jar或war,需要时手动添加

	//添加依赖
    <dependencies>
    	//所需的依赖可以到百度Maven Repository,搜索相关包名,获取gav
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

      </dependencies>

</project>
常见Maven命令:(与项目构建生命周期相关)

1、mvn clean 删除当前工程中target
2、mvn compile 将当前工程中main文件下的所有java编译为class,输送到target文件中
3、mvn test 运行test文件下所有测试文件
4、mvn package 首先将test文件下所有的java测试类的方法调用执行进行测试,并生成[测试报告]。如果测试没有问题,将main文件下所有class文件打成(jar/war),然后输送到target
5、mvn install 与package命令执行基本一致,将[jar\war]推送到Maven的本地仓库

Maven坐标(gav)

为了方便Maven对jar的定位,在Maven世界中,每一个jar都要由一个独立坐标,相当于ip

artifact:构建

这个独立坐标由三部分组成

1. <groupId>公司域名反顺序</groupId>   组织
2. <artifactId>项目名称</artifactId>   产品名称
3. <version>项目版本号</version>   版本
Maven开发流程
  1. 新建Maven项目
  2. 在中央仓库查找第三方jar的依赖文本
  3. 拷贝依赖文本至项目的pom.xml
  4. 执行Maven,编译/构建整个项目
IDEA建立Maven工程(以2020.2版为例,其他版本大同小异)

打开IDEA,选择创建Maven工程image-20201213104442578

选择jdk1.8,勾选Create from archetype,这里选择创建普通的maven项目,并不涉及java web项目,所以选择quickstart,如果要创建web项目,选择下面的webapp,点击next。

在这一页中,点击Artifact Coordinates,展开,这里的groupID,artifactid,version就是之前提到的gavmaven坐标,填好后进入下一步next。

image-20201213105014249

这里,User settings file选择c盘默认即可,Local repository选择上面你自己更改的repository,点击finish,即完成maven项目的构建。

第一次配置Maven工程,需要等待一会(1分钟左右),出现BUILD SUCCESS,即创建成功。image-20201213105304437

在main中Java中写java代码,将所需的依赖在pom.xml中写入。

eg:求两个数的最大公约数。

Java自带的jdk没有求最大公约数的函数,Apache组织中有个org.apache.commons中有个求最大公约数的方法(这里不必死记硬背函数库,需要时上网查找即可,这里只是举个例子)

百度Maven repository,进入Maven,搜索org.apache.commons,如图image-20201213105912144

点击第一个进入,选择使用量较高的版本,复制依赖项。

image-20201213110037470

然后在pom.xml中中粘贴依赖项

<!--apache扩展数学工具包-->
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-math3 -->
<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-math3</artifactId>
  <version>3.6.1</version>
</dependency>

在main-java中创建类hello,使用org.apache.commons中的方法,跟使用jdk自带方法一样

public static void main(String[] args) {
    //计算两个整数的公约数
    int a = ArithmeticUtils.gcd(361, 285);
    System.out.println("a = " + a);
}

即可求出两个数的最大公约数,是不是很简便。

此外,在IDEA的右侧,有个Maven选项,点击查看。image-20201213110511031

在Lifecycle中包括上面提及的Maven命令,点击即可执行Maven命令。

**注意:**在每次添加依赖项后,最好手动点击Maven左上角的刷新按钮,以方便maven下载依赖项,以免报错

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值