Maven入门

Maven入门

一、概述

Maven 是 Apache 软件基金会组织维护的一款专门为 Java 项目提供构建依赖管理支持的工具。Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构件,报告和文档的软件项目管理工具。

  • 构建工具:项目相关的源码及资源 - jar、war - 构建
  • 依赖管理工具:自动下载、依赖、管理构建(jar)的工具

1、构建

Maven是一个优秀的构建工具。 它能够帮我们自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。我们不需要也不应该一遍又一遍地输入命令,一次又一次地点击鼠标,我们要做的是使用Maven配置好项目,然后输入简单的命令(如:mvn clean install),Maven会帮我们处理那些烦琐的任务。

Java 项目开发过程中,构建指的是使用原材料生产产品的过程。

  • 原材料

    • Java 源代码

    • 基于 HTML 的 Thymeleaf 文件

    • 图片

    • 配置文件

  • 产品

    • 一个可以在服务器上运行的项目

构建过程包含的主要的环节:

  • 清理:删除上一次构建的结果,为下一次构建做好准备
  • 编译:Java 源程序编译成 *.class 字节码文件
  • 测试:运行提前准备好的测试程序
  • 报告:针对刚才测试的结果生成一个全面的信息
  • 打包
    • Java工程:jar包
    • Web工程:war包
  • 安装:把一个 Maven 工程经过打包操作生成的 jar 包或 war 包存入 Maven 仓库
  • 部署
    • 部署 jar 包:把一个 jar 包部署到 Nexus 私服服务器上
    • 部署 war 包:借助相关 Maven 插件(例如 cargo),将 war 包部署到 Tomcat 服务器上

脱离IDE环境构建项目
在这里插入图片描述

2、依赖

Maven还是一个依赖管理工具和项目信息管理工具。它提供了中央仓库,能帮我们自动下载构件。

在这里插入图片描述

如果 A 工程里面用到了 B 工程的类、接口、配置文件等等这样的资源,那么我们就可以说 A 依赖 B。例如:

  • junit-4.12 依赖 hamcrest-core-1.3
  • thymeleaf-3.0.12.RELEASE 依赖 ognl-3.1.26
    • ognl-3.1.26 依赖 javassist-3.20.0-GA
  • thymeleaf-3.0.12.RELEASE 依赖 attoparser-2.0.5.RELEASE
  • thymeleaf-3.0.12.RELEASE 依赖 unbescape-1.1.6.RELEASE
  • thymeleaf-3.0.12.RELEASE 依赖 slf4j-api-1.7.26

依赖管理中要解决的具体问题:

  • jar 包的下载:使用 Maven 之后,jar 包会从规范的远程仓库下载到本地
  • jar 包之间的依赖:通过依赖的传递性自动完成
  • jar 包之间的冲突:通过对依赖的配置进行调整,让某些jar包不会被导入

二、安装与配置

第一:下载、解压到指定位置(不要有中文路径)

前提:必须安装好JDK,以及配置好JDK的环境变量

第二:配置环境变量

MAVEN_HOME:安装目录 – XXX_HOME

Path:%MAVEN_HOME%\bin

第三:测试是否安装成功

$ mvn -v

三、Maven配置

打开核心配置文件:Maven安装目录/conf/settings.xml

建议在配置之前,可以备份一下 settings.xml 文件

1、配置本地仓库

<!-- 配置本地仓库 -->
<localRepository>
    D:\java\localRepository
</localRepository>

2、配置镜像仓库

<!-- 阿里云Maven镜像配置 --> 
<mirrors>
    ...
    <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>*</mirrorOf>
        <name>Nexus aliyun.</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
</mirrors>

1、下载

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

2、安装

1)解压到指定目录

注意:

  • Maven依赖于Java,因此必须保证已经安装JDK,并配置好环境变量
  • 路径不要存在中文或空格
2)配置环境变量
  • MAVEN_HOME或M2_HOME:指定Maven根目录
  • Path:指定Maven相关的命令程序所在的bin目录
2.1)Linux或Mac
# 编辑用户目录下的.bash_profile文件
$ vim .bash_profile

########### Maven1.0 Evn ##################
# export MAVEN_HOME=/Users/circleus/apache-maven-3.5.4
# export MAVEN_HOME=/Users/circleus/aliyun-maven-3.6.0
# export PATH=$MAVEN_HOME/bin:$PATH
 
########### Maven2.0 Evn ##################
# export M2_HOME=/Users/circleus/aliyun-maven-3.6.0
# export M2_HOME=/Users/circleus/apache-maven-3.5.4
# export PATH=$PATH:$M2_HOME/bin
 
########### Maven3.0 Evn ##################
# export PATH=/Users/circleus/aliyun-maven-3.6.0/bin:$PATH

2.2)windows
  • MAVEN_HOME:d:\java\apache-maven-3.6.3
  • Path:%MAVEN_HOME%\bin

在这里插入图片描述

3)测试
$ mvn -v

在这里插入图片描述

4)目录结构
  • bin目录:包含mvn的运行脚本
  • boot目录:包含一个类加载器的框架,maven使用它加载自己的类库
  • conf目录:存放配置文件的目录(核心配置文件settings.xml文件)
  • lib目录:包含maven运行时的依赖类库

3、配置

1)配置本地仓库
 <!-- 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>/Users/zing/java/local-repository</localRepository>

http://www.mvnrepository.com/

2)镜像仓库
<!--阿里云Maven镜像配置--> 
<mirror>
  <id>nexus-aliyun</id>
  <mirrorOf>*</mirrorOf>
  <name>Nexus aliyun.</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

4、常用命令

  • mvn
    • -v :查看maven版本
    • compile:编译
    • package:打包
    • test:测试
    • clean:清除target
    • install:安装jar包到本地仓库中

三、创建Maven项目

1、手工创建

1、命令行的方式创建

1)纯手工

第一:创建项目 - 遵循 Maven 项目的结构

第二:配置 pom.xml 文件

注意:pom.xml是Maven项目的核心配置文件

<!-- 当前项目坐标:GAV -->
<groupId>com.nf.ums</groupId>
<artifactId>ums-user</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

第三:编写代码

后台代码:java

前端代码:webapp目录下,html、jsp、图片…

第四:编译

$ mvn compile
$ mvn clean compile

注意:

  • 在DOS命令行中,必须进行到项目的根目录
  • 编译成功后,在项目根目录生成一个target目录
  • 同时,在本地仓库中,下载了相关的依赖
  • 第一次执行maven命令时,maven会下载对象的插件

第五:使用构件

  • Java项目 - jar -其它项目通过GAV依赖jar
  • Javaweb项目 - war - 部署到WEB赋值中运行(Tomcat)
$ mvn package

2)脚手架

1)Maven项目目录结构

要遵循Maven项目目录结构的规范(webapp)- 否则需要添加插件maven-war-plugin.

  • 项目名称
    • src:项目源码
      • main:存放主程序
        • java:存放Java源码
          • 包名+类名
        • resoures:存放资源文件
        • webapps:web资源
          • WEB-INF
      • test:存放测试程序
        • java:存放Java测试源码
          • 包名+类名
        • resources:存放资源文件
    • target:此目录由maven生成
    • pom.xml:Maven项目核心配置文件
2)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>

  <!-- 当前项目坐标:GAV - 便于被别人使用(依赖)-->
  <groupId>edu.nf</groupId>
  <artifactId>demo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>demo</name>
  <url>http://maven.apache.org</url>

  <!-- 属性配置 -->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

<!-- 依赖配置:依赖第三方的jar包 -->
  <dependencies>
  
    <!-- 依赖 junit:测试工具-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    
    <!-- 依赖 javax.servlet-api开发,Javaweb程序 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    
  </dependencies>
</project>

说明:

  • GAV:项目坐标。用于定位,便于被别人依赖,也就是说,jar包通过GAV定位依赖到项目中。

  • groupId:包名(公司或组织域名倒序).项目名

  • artifactId:项目名-模块名

  • version:指定版本

  • packaging:指定项目的包的方式,默认是jar,可以为

    • jar:java项目
    • war:web项目
    • pom:父项目,用于管理各子项目
    <groupId>公司或组织域名倒序.项目名</groupId>
    <artifactId>项目名-模块名</artifactId>
    <version>x.x.x-yyyy</version>
    <!--
          第一个x表示大版本号
          第二个x表示分支版本号
          第三个x表示小版本号
          yyyy可以指定为:
           snapshot:快照
           alpha:内部测试
           beta:公测
           release:稳定
           GA:正式发布
    -->
    

  • dependencies:依赖列表,指定本项目所依赖的第三方工具(构件/jar)

    构件搜索网址:https://mvnrepository.com/
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • archetype插件——自动创建符合maven规定的目录骨架

    • 方法一:mvn archetype:generate

    • 方法二:

      mvn archetype:generate -DgroupId=组织名(公司网址的反写+项目名)
                             -DartifactId=项目名-模块名(唯一的标识)
                             -Dversion=版本号
                             -Dpackage=代码所存在的包名
                                              
      mvn archetype:generate -DgroupId=org.nf.sms -DartifactId=sms-entity -Dversion=1.0-SNAPSHOT -Dpackage=org.nf
      
      
    • 第一次构建需要连接网络,从官网下载相关的插件

    • 可以配置国内镜像解决

2、Eclipse创建

1)在src/main/java/com/maven/demo目录下新建文件User.java

package com.maven.demo;
public class User{
	public String sayHello() {
		return "hello" ;
	}
}

2)在src/main/java/com/maven/demo目录下新建文件UserTest.java

package com.maven.demo ;
import org.junit.* ;
import org.junit.Assert.* ;

public class UserTest {
	@Test
	public void testHello() {
		Assert.assertEquals("hello",new User().sayHello()) ;
	}
}

3)配置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>
	<groupId>com.maven.demo01</groupId>
    	<artifactId>demo01-entity</artifactId>
    	<version>0.0.1SNAPSHOT</version>
   	 <dependencies>
       		 <dependency>
            			<groupId>junit</groupId>
           			 <artifactId>junit</artifactId>
           			 <version>4.10</version>
           			 <scope>test</scope>
        		</dependency>
    	</dependencies>
</project>

eclipse创建maven项目时指定默认的JRE(默认是1.5的)

修改settings.xml文件

<profile>
    <id>jdk-1.8</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>

3、IDEA创建

maven项目的设置:

在这里插入图片描述

<?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>org.nf</groupId>
    <artifactId>maven-test</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <!-- war打包插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <warSourceDirectory>web</warSourceDirectory>
                    <!-- 指定web.xml路径 -->
                    <webXml>web\WEB-INF\web.xml</webXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

例子:Javaweb项目依赖Java项目

<!-- 依赖demo-java项目 -->
<dependency>
    <groupId>org.nf.demo</groupId>
    <artifactId>demo-java</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

四、JUnit

1、概念

JUnit是一个用于Java编程语言的测试框架,可以帮助开发人员编写自动化的单元测试和集成测试。

2、使用步骤

第一:在项目中添加JUnit依赖

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

第二:创建一个测试类,该类应该包含一些测试方法。在测试类中使用@Test注解来标识测试方法。

package com.maven.demo ;
import org.junit.* ;
import org.junit.Assert.* ;

public class UserTest {
	@Test
	public void testHello() {
    	// 断言验证测试结果是否符合预期
			Assert.assertEquals("hello",new User().sayHello()) ;
	}
}

第三:在测试方法中编写测试代码。可以使用断言来验证测试结果是否符合预期。例如,使用assertEquals()方法来比较实际值和期望值。

第四:运行测试。可以使用IDE工具来运行测试,也可以使用Maven或Gradle等构建工具来运行测试。测试运行后,将会显示测试结果和测试覆盖率等相关信息。

3、常用API

1)@Test注解:用于标识一个测试方法。例如:

@Test
public void testAddition() {
    int result = Calculator.add(2, 3);
    assertEquals(5, result);
}

2)assertEquals()方法:用于比较实际值和期望值是否相等。例如:

int result = Calculator.add(2, 3);
assertEquals(5, result);

3)assertTrue()assertFalse()方法:用于验证一个条件是否为真或为假。例如:

boolean flag = Calculator.isPositive(5);
assertTrue(flag);

flag = Calculator.isPositive(-5);
assertFalse(flag);

4)assertNotNull()assertNull()方法:用于验证对象是否为空或不为空。例如:

String str = Calculator.getString();
assertNotNull(str);

str = null;
assertNull(str);

5)@Before@After注解:用于标识测试方法之前和之后要执行的方法。例如:

@Before
public void setUp() {
    // 初始化测试数据
}

@After
public void tearDown() {
    // 清理测试数据
}

6)@BeforeClass@AfterClass注解:用于标识所有测试方法之前和之后要执行的方法。例如:

@BeforeClass
public static void setUpClass() {
    // 初始化测试数据
}

@AfterClass
public static void tearDownClass() {
    // 清理测试数据
}

7)@Ignore注解:用于标识某个测试方法需要被忽略。例如:

@Ignore("这个测试方法还没准备好")
@Test
public void testSomething() {
    // 测试代码
}

五、Lombok

Lombok是一个Java库,它可以通过注解自动化Java类的样板代码,从而简化开发人员的编程任务。

1、@Data注解

使用@Data注解可以自动生成JavaBean所需的getter、setter、toString、equals和hashCode方法。

@Data
public class Person {
    private String name;
    private int age;
}

2、@AllArgsConstructor@NoArgsConstructor注解

使用@AllArgsConstructor和@NoArgsConstructor注解可以自动生成有参构造函数和无参构造函数。

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
    private String name;
    private int age;
}

3、@Builder注解

使用@Builder注解可以自动生成Builder模式所需的代码,可以方便地创建复杂对象。

@Data
@Builder
public class Person {
    private String name;
    private int age;
    private String address;
}

Person person = Person.builder()
        .name("张三")
        .age(20)
        .address("北京市")
        .build();

第一:在IDEA中,安装 Lombok 插件

第二:在 Maven 项目中,添加 Lombok 依赖

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.24</version>
    <scope>provided</scope>
</dependency>

第三:使用 Lombok

提供相关的注解

tructor
@NoArgsConstructor
public class Person {
private String name;
private int age;
}


3、`@Builder`注解

使用@Builder注解可以自动生成Builder模式所需的代码,可以方便地创建复杂对象。

```java
@Data
@Builder
public class Person {
    private String name;
    private int age;
    private String address;
}

Person person = Person.builder()
        .name("张三")
        .age(20)
        .address("北京市")
        .build();

第一:在IDEA中,安装 Lombok 插件

第二:在 Maven 项目中,添加 Lombok 依赖

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.24</version>
    <scope>provided</scope>
</dependency>

第三:使用 Lombok

提供相关的注解

### Maven 入门教程 #### 什么是MavenMaven 是一种强大的项目管理工具,主要用于基于 Java 的项目构建、依赖管理和文档生成。通过使用POM(Project Object Model),即项目的对象模型来描述项目并管理其整个生命周期。 #### 下载与安装Maven 为了开始使用 Maven,需先从官方网址获取最新版本的软件包[^2]。对于不同操作系统有对应的二进制分发版可供选择;例如,在Windows环境下可以选择`apache-maven-3.9.5-bin.zip`这样的压缩文件进行下载[^1]。 完成下载之后,应当把该压缩包解压至指定位置作为安装路径,并确保将解压出来的 `bin` 文件夹添加到系统的 PATH 环境变量里去以便可以在任何地方调用命令行工具 mvn.exe 来执行操作[^3]。 验证安装成功的方法是在命令提示符下输入 `mvn -v` ,如果显示出了关于当前使用的 Maven 版本以及相关配置的信息,则说明已经正确设置了环境。 ```shell C:\>mvn -v Apache Maven 3.5.2 (...) ... ``` #### 创建第一个Maven项目 创建一个新的 Maven 工程可以通过 archetype 插件快速实现: ```shell mvn archetype:generate \ -DgroupId=com.example \ -DartifactId=my-app \ -DarchetypeArtifactId=maven-archetype-quickstart \ -DinteractiveMode=false ``` 这段指令会依据给定参数自动生成一个简单的Java应用程序框架,其中包含了必要的目录结构和初始源码文件。 #### 构建项目 进入刚刚建立好的工程根目录,可以利用如下命令来进行编译打包工作: ```shell cd my-app/ mvn clean package ``` 这将会清理旧的目标产物(`clean`),接着按照定义在 pom.xml 中的生命週期阶段依次执行测试(test),最后产出可部署的应用程序包(package)。 #### 使用仓库管理依赖关系 Maven 自动处理外部库之间的相互依存性问题。只需要编辑 POM 文件中的 `<dependencies>` 部分就可以轻松引入所需第三方类库而无需手动下载它们。比如要加入 JUnit 测试框架的支持只需加上几行 XML 即可: ```xml <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> ``` 这样当再次运行构建过程时,Maven 就会在本地缓存或远程中央存储库里查找匹配项并将之纳入进来供开发人员使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WyuanY.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值