Maven基础

本文详细介绍了Maven作为Java项目构建工具的功能与优势,包括依赖管理、生命周期、坐标配置及常用命令,展示了Maven如何简化项目构建流程,提高团队协作效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是maven?
  • 它是一个纯Java开发的管理工具,主要管理的工作是:对Java项目进行依赖管理,项目构建。
2.什么是项目构建

项目构建是一个项目从编写源代码到编译、测试、运行、打包、部署等过程。

  • 1.传统项目构建的过程
    在这里插入图片描述
    构建过程如下:
    1.在eclipse中创建一个Javaweb工程
    2.对工程中编写源代码及配置文件等
    3.对源代码进行编译,Java文件编译成class文件
    4.执行junit单元测试
    5.将工程打包程war包部署到tomcat服务器运行

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

在这里插入图片描述

3.使用maven的好处?
  • 1.能够集中的管理项目所需的jar包,不需要手动导包,在pom.xml定义坐标即可。
  • 2.提供一键构建,一个命令完成构建、运行、方便快捷,maven对每个构建阶段进行规范,非常有利于大型团队的协作开发。
  • 3.maven跨平台,可在window、Linux上使用
  • 4.maven遵循规范开发、有利于提高大型团队的开发效率,降低项目的维护成本。
4.maven的安装与配置

下载安装、环境变量、本地仓库、远程和中央仓库的配置、jdk版本的配置
命令行:mvn -v 测试查看是否安装好maven。

5.常用的maven命令?
  • compile:是maven工程的编译命令,作用是将src/main/java下的文件编译文class文件输出到target目录下。
  • test:测试命令,会执行src/test/java下的单元测试类
  • package:打包命令,对于Java工程执行package打包成jar包,对Javaweb工程会打成war包。
  • install:安装命令,执行install将maven打成jar包或war包发布到本地仓库。
  • clean:清理命令,执行clean会删除target目录下的内容
6.maven工程具有一定的目录结构?

在这里插入图片描述

7.什么是依赖管理?
  • 什么是依赖?

一个Java项目需要使用一些第三方的jar包才可以运行,这样的Java项目就依赖这些第三方的jar包。

  • 什么是依赖管理?

就是对项目所有依赖的jar包进行规范化的管理

8.传统项目的依赖管理
  • 传统项目工程要管理所依赖的jar包完全靠人工来进行,需要从网上下载jar包,在导入进项目工程中。
  • 手工拷贝jar包添加到项目中存在的问题?

无法对jar包的版本进行统一管理,容易导致版本冲突
从网上找jar包非常麻烦,有些jar包找不到
jar包添加到项目中导致工程过大。

9.maven项目的依赖管理
  • maven项目管理所依赖的jar包不需要手动向工程中添加jar包,只需要在pom.xml中添加jar包的坐标,自动从maven的仓库中下载jar包,运行。
  • 使用maven依赖管理添加jar的好处?

通过pom.xml文件对jar包的版本进行统一管理,可有效避免版本冲突。
maven团队维护了一个非常全的maven仓库,里面包括来当前基本上开源的jar包。

10.maven仓库的作用
  • 本地仓库:用来储存从远程仓库或者中央仓库下载的插件和jar 包,项目使用的一些插件和jar包,都优先从本地仓库查找。
  • 远程仓库:如果本地需要插件或者jar 包,本地仓库没有,默认去远程仓库下载,远程仓库可以在互联网内也可以在局域网内。
  • 中央仓库:在maven软件中内置一个远程仓库地址:hhtp//repo1.maven.org/maven2 它是中央仓库,服务于整个互联网,它是由maven团队自己维护,里面储存来非常全面的jar包,它包含了世界上大部分流行的开源项目构件。
  1. 在 Maven 本地资源库中搜索,如果没有找到,进入第 2 步,否则退出。
  2. 在 Maven 中央存储库搜索,如果没有找到,进入第 3 步,否则退出。
  3. 在java.net Maven的远程存储库搜索,如果没有找到,提示错误信息,否则退出。
11.如何配置本地仓库
<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>/Users/xiayubao/maven/repository</localRepository>
12 如何配置远程仓库
<mirrors>
  <!-- mirror
   | Specifies a repository mirror site to use instead of a given repository. The repository that
   | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
   | for inheritance and direct lookup purposes, and must be unique across the set of 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>
13 如何配置jdk版本?
<!-- 修改jdk版本,不用每次都要在eclipse里修改 -->
<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>
14.maven工程项目目录的介绍

在这里插入图片描述

15.maven的生命周期

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

  • clean lifecycle:在进行真正的构建之前进行一些清理工作
  • default lifecycle:构建的核心部分,编译、测试、打包、部署
  • site lifecycle:生成项目报告,站点、发布站点。
16.定义maven的坐标
<dependency>
<!--项目名称,定义为组织名+项目名,类似包名  -->
	<groupId>org.apache.struts</groupId>
	<!-- 模块名称 -->
	<artifactId>struts2-core</artifactId>
	<!--当前的版本号  -->
	<version>${struts.version}</version>
	<exclusions>
		<!-- 排除依赖 -->
		<exclusion>
			<groupId>javassist</groupId>
			<artifactId>javassist</artifactId>
		</exclusion>
	</exclusions>
</dependency>
17.jar包的依赖范围scope
  • compile:编译范围,指A在编译时依赖B,此范围为默认依赖范围,编译范围的依赖会用在编译、测试、运行、由于运行时需要所以编译范围的依赖会被打包。
  • provided:在编译和测试时需要,在运行时不需要,比如servlet API被tomcat容器提供。
  • runtime:此依赖在运行和测试系统时需要,但在编译时期不需要,比如jdbc的驱动包,由于运行时需要,所以runtime范围的依赖会被打包。
  • test:test范围依赖在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用,不会被打包的
  • system:此依赖与provided类似,但必须显式的提供一个对于本地系统中jar文件的路径,需要指定systemPath磁盘路径,system依赖不推荐使用。
maven中引入插件
<dependencies>
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.11</version>
		<scope>test</scope>
	</dependency>
</dependencies>

<build>
  <plugins>
	<plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-compiler-plugin</artifactId>
		<version>2.3.2</version>
		<configuration>
			<source>1.6</source>
			<target>1.6</target>
		</configuration>
	</plugin>
  </plugins>
</build>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值