Maven的基本使用

生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

导读:本篇文章讲解 Maven的基本使用,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

一、Maven的概述

Maven是项目管理工具,对软件项目提供构建与依赖管理

Maven是Apache下的Java开源项目

Maven为Java项目提供了统一的管理方式,已成为业界标准

maven概念模型

在这里插入图片描述

1.项目对象模型 (Project Object Model)

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

2.依赖管理系统(Dependency Management System)

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

<!-- 依赖关系 -->
<dependencies>
	<!-- 项目运行使用junit,所以项目依赖junit -->
	<dependency>
	<!-- junit的项目名称 -->
	<groupId>junit</groupId>
	<!-- junit的模块名称 -->
	<artifactId>junit</artifactId>
	<!-- junit版本 -->
	<version>4.9</version>
	<!-- 依赖范围:单元测试时使用junit -->
	<scope>test</scope>
</dependency>

3.项目生命周期(Project Lifecycle)

使用 maven 完成项目的构建,项目构建包括:清理、编译、测试、打包、部署等过程,maven 将这些过程规范为一个生命周期。

maven通过执行简单命令即可实现上边生命周期的各各过程,比如执行 mvn compile 执行编译、执行 mvn clean 执行清理。

4.标准集合

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

5.插件(plugin)目标(goal)

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

二、Maven的安装

1.maven下载

Maven官网

在这里插入图片描述

2.maven安装

将Maven解压到一个没有中文没有空格的路径下。

在这里插入图片描述

bin:	maven的命令,如:mvn tomcat:run

boot:	maven本身的引导程序,如:类加载器 plexus-classworlds-2.6.0.jar

conf:	maven的配置文件,如:setting.xml 

lib:	maven本身运行所需jar 包,如:maven-core-3.6.3.jar

3.配置Mavn环境

注意:使用Maven需要本机安装并配置好JDK环境。

配置MAVEN_HOME ,变量值:maven 安装路径,(解压 maven压缩文件包所在的目录,最好不要有中文和空格)

在这里插入图片描述

4.验证是否安装成功

执行 mvn -v 命令检查 maven 是否安装成功

在这里插入图片描述

三、Maven的仓库

Maven仓库分类

maven在工作时,需要从仓库下载相关jar 包,当maven第一次使用某个Jar包时会从远程仓库下载这个Jar包并存入本地仓库(一个本地文件夹),在第二次需要使用这个Jar包时,maven则不再从远程仓库下载,而是直接从本地仓库取该jar包,因为第一次使用时已经将该Jar包存入本地仓库了,可以将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了。

在这里插入图片描述

1.本地仓库

用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包,优先从本地仓库查找。


默认本地仓库位置在 ${user.dir}/.m2/repository,${user.dir}表示windows 用户目录。

在这里插入图片描述
在这里插入图片描述

2.远程仓库

如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载。远程仓库可以在互联网内也可以在局域网内,如:私服。

3.中央仓库

在 maven 软件中内置了一个远程仓库地址,如:http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由 Maven 团队维护,里面存储了非常全的 jar 包,它包含了世界上大部分流行的开源项目构件。

配置本地仓库

在 MAVE_HOME/conf/settings.xml 文件中配置本地仓库位置

在这里插入图片描述
全局配置与用户配置

maven 仓库地址、私服等配置信息需要在 setting.xml 文件中配置,分为全局配置和用户配置。

在 maven 安装目录下的有 conf/setting.xml 文件,此 setting.xml 文件用于 maven 的所有 project项目,它作为 maven 的全局配置。

如需要个性配置则需要在用户配置中设置,用户配置的 setting.xml 文件默认的位置在:${user.dir}/.m2/settings.xml 目录中,${user.dir} 指windows 中的用户目录。

maven会优先寻找用户配置,如果找到则以用户配置文件为准,否则使用全局配置文件。

其他配置

配置阿里云镜像

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

配置jdk1.8编译项目

	<profiles>
		<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>
	</profiles>

四、Maven工程的基本认识

项目的标准结构

一个 maven工程, src目录和 pom.xml 是必备的。

在这里插入图片描述

文件、目录 用途
${basedir) 根目录,用于保存pom.xml
${basedir)/.idea 开发工具生产的文件
${basedir)/src/main/java Java源代码目录
$fbasedir/src/main/resources 资源目录,保存配置文件、静态图片等
${basedir/src/test/java 测试类的源代码
$fbasedir]/src/test/java/resources 测试时需要使用的资源文件
basedir/target 项目输出的目录,用于存储iar、war文件
$basedir/target/classes 字节码(.class)的编译输出目录
$(basedir}/pom.xml 项目(Project)对象(Object)模型(Model))文件
$(basedir}/src/main/webapp 存放页面的目录(如果是普通java项目,就没有webapp目录)

项目的运行

进入maven工程目录(当前目录有 pom.xml 文件),运行 mvn tomcat:run 命令。	

在这里插入图片描述

在这里插入图片描述

五、Maven的常用命令

命令 用途
mvn archetype:generate 创建Maven工程结构
mvn compile 编译源代码
mvn test 执行测试用例
myn clean 清除产生的项目
mvn package 项目打包
mvn install 安装至本地仓库

通过一系列maven命令来对maven工程进行编译、测试、运行、打包、安装、部署。

1.compile

compile是编译命令,执行mvn compile,将 src/main/java下的文件编译为class 文件输出到 target目录下。

在这里插入图片描述

2.test

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

在这里插入图片描述

3.clean

clean是清理命令,执行mvn clean ,会删除target目录及内容。

在这里插入图片描述

4.package

package是打包命令,执行mvn package ,会对于java工程执行package打成 jar 包,对于web 工程打成war包。
在这里插入图片描述

5.install

install是安装命令,执行mvn install ,会将maven项目打成 jar 包或 war 包发布到本地仓库。

在这里插入图片描述

六、Maven指令的生命周期

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

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

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

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

七、在idea中使用Maven

1.idea的maven配置

选择本地 maven 安装目录,指定 maven 安装目录下conf文件夹中 settings 配置文件

在这里插入图片描述

2.创建maven工程

创建web工程

选择创建项目类型:maven,选择使用模板,选择使用哪种模板。

在这里插入图片描述

配置项目名称、存放位置以及项目信息

在这里插入图片描述

配置maven信息,或者修改项目配置信息

在这里插入图片描述

工程创建后,由于目录结构不完整,需要手动补齐

在这里插入图片描述

添加src/main/java目录,在mian目录上右键,选择New -->Directory,然后选择Java。

在这里插入图片描述
在这里插入图片描述

在新生成的文件夹 java 上右键选择Make Directory as-->Sources Root

在这里插入图片描述

创建Jar工程

在这里插入图片描述
在这里插入图片描述

3.创建一个Servlet

创建Servlet后,由于缺少依赖无法自动导包报错。需要在pom.mxl中添加servlet的坐标信息。

在这里插入图片描述

4.在pom.xml中添加坐标

pom基本配置

<project > :文件的根节点 

<modelversion > : pom.xml 使用的对象模型版本

<groupId > :机构或者团体的英文,采用"逆向域名"形式书写。一般写项目的域名。

<artifactId > :模块名称,子项目名、模块名称、项目名称。说明其用途,例如:cms、oa.....

<version > :产品的版本号,一般采用"版本+单词"形式,例如:1.0.0.RELEASE

<packaging > :打包类型,一般有 jar、war、pom 等

<name > :项目的显示名,常用于 Maven 生成的文档

<description > :项目描述,常用于 Maven 生成的文档

<dependencies> :项目依赖构件配置,配置项目依赖构件的坐标

<build> :项目构建配置,配置编译、运行插件等。
添加servlet的坐标信息后,创建的Servlet类自动导入,报错信息消失。

在这里插入图片描述

添加 jar 包的坐标时,可以指定jar包的作用范围。
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>
每个maven工程都需要定义本工程的坐标信息,坐标是maven对jar包的身份定义。
	<!--项目名称,定义为组织名+项目名,类似包名-->	
	<groupId>cn.ybzy</groupId>
	<!-- 模块名称 -->
	<artifactId>maven_demo</artifactId>
	<!-- 当前项目版本号,snapshot快照版本即非正式版本,release为正式发布版本 -->
	<version>0.0.1-SNAPSHOT</version>
	<!--<packaging > 打包类型;
	jar:执行package会打成jar包; 
	war执行package会打成war包; 
	pom 用于maven工程的继承,通常父工程设置为pom-->
	<packaging>war</packaging>

5.获取坐标的来源

添加依赖需要指定依赖 jar 包的坐标,很多情况是不知道 jar 包的坐标,一般通过从互联网仓库搜索查询,确定jar的坐标信息。

Mavne网络仓库1

Maven网络仓库2

6.依赖范围

依赖是指:A 依赖 B,需要在 A 的 pom.xml 文件中添加 B 的坐标,添加坐标时需要指定依赖范围。

依赖范围:

compile:编译范围,指 A在编译时依赖 B,此范围为默认依赖范围。编译范围的依赖会用在编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。

provided:provided 依赖只有在当 JDK 或者一个容器已提供该依赖之后才使用, provided 依赖在编译和测试时需要,在运行时不需要,比如:servlet api 被 tomcat 容器提供。
 
runtime:runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc的驱动包。由于运行时需要所以 runtime 范围的依赖会被打包。
 
test:test 范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用,比如:junit。由于运行时不需要所以test范围依赖不会被打包。

system:system 范围依赖与 provided 类似,但是你必须显式的提供一个对于本地系统中 JAR文件的路径,需要指定 systemPath 磁盘路径,system依赖不推荐使用。

在这里插入图片描述
默认引入 的 jar 包 ——- compile 【默认范围 可以不写】(编译、测试、运行 都有效 )

servlet-api 、jsp-api ------- provided (编译、测试 有效, 运行时无效 防止和 tomcat 下 jar 冲突)

jdbc 驱动 jar 包 ---- runtime (测试、运行 有效 )
 
junit ----- test (测试有效)
 
依赖范围由强到弱的顺序是:compile>provided>runtime>test

7.设置jdk编译版本

  <build>
    <plugins>
      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.1</version>
          <configuration>
            <target>1.8</target>
            <source>1.8</source>
            <encoding>UTF-8</encoding>
          </configuration>
        </plugin>
    </plugins>
  </build>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

8.编写Servlet

public class MyServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        doGet(request, response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        request.getRequestDispatcher("/myJsp.jsp").forward(request, response);
    }
}

9.web.xml中配置servlet访问路径

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>cn.ybzy.MyServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/myJsp</url-pattern>
  </servlet-mapping>
</web-app>

10.编写Jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h2>this is my jsp!</h2>
</body>
</html>

11.添加tomcat7插件

   <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <port>8080</port>
          <path>/</path>
        </configuration>
      </plugin>
添加tomcat7插件后,点击idea最右侧Maven,就可以看到新添加的tomcat7 插件,双击tomcat7:run命令可以直接运行项目。

在这里插入图片描述

击如图M按钮,手动输入tomc7:run命令或者选择相关命令来运行项目

在这里插入图片描述
在这里插入图片描述

浏览器访问:
在这里插入图片描述

12.maven运行debug调试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/137088.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!