Maven学习总结

本文详细介绍Maven的安装配置、常用命令、项目结构管理、依赖管理、聚合与继承特性及远程仓库配置,帮助开发者快速掌握Maven,提升项目构建效率。

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

一,Maven的下载安装和环境变量的配置

    1.什么是Maven

        Maven是一个项目管理和综合工具。Maven提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建Maven使用标准的目录结构和默认构建生命周期。

        在多个开发团队环境时,Maven可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。

     2.Maven下载地址

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

494f2141f31c9006b48bdfbcbb70c601ed2.jpg

    3.Maven的目录结构

  563baec942bab85602a42de74cc436cdda5.jpg

        bin目录:Maven的运行脚本。mvn.bat是基于windows的脚本。在cmd中每次输入一条mvn的命令都是在调用并执行这些脚本。

        boot目录:该目录只有一个文件plexus-classworlds-x.x.x.jar。他是一个类加载器的框架,相对于JDK中的类加载器,他提供了更丰富的语法以方便配置,Maven使用这个框架来加载自己的类库。

        conf目录:该目录包含一个非常重要的文件setting.xml。配置该文件就能在project中定制Maven的行为。

        lib目录:包含了所有Maven运行时需要的java类库以及用到的第三方类库。

        LICENSE:软件许可证。

        NOTICE:所包含的第三方软件。

        README.txt:包含Maven的简介。

    4.Maven的配置

d1b248122c534f817de4d81a46bad013672.jpg

        将解压后的Maven的bin路径配置到环境变量path

8fd23bd940fa6e2b222fbb9fd380d5da784.jpg

82d8c85d589304e5adf9b2df4edfa0ce46b.jpg

    5.测试是否配置成功

        在dos窗口下输入mav -v查看Maven的版本信息

73ed081bd4c5c418a00cf998b3e5ee14373.jpg

二,Maven的常用命令

    Maven的工程结构和内容被定义在pom.xml中,全称为project object module。

    1.创建工程

        mvn archetype:generate

        -DgroupId 公司名

        -DartifactId 项目名称

        -DarchetypeArtifactId 利用archetypeArtifactId模型(骨架)指定ArchetypeId:maven-archetype-quickstart->创建一个java                       project,maven-archetype-webapp->创建一个web project

        -DinteractiveMode 是否使用交互模式

ce0ff4dbfd9c3aedd482398bb1b2e87c2c3.jpg

e0c0be709556f626fc19c9ec265ff761f89.jpg

          选择archetypeArtifactId模型(骨架):输入maven-archetype-quickstart,来找到编号。

fc47f71390716f96413673b8223302d5247.jpg

        输入1

ce080320c0d3d65720e2aa417686370cb51.jpg

        选择骨架版本:输入7,之后会输入groupId,artifactId,version(项目版本号)和package(包名)。

e3d32db9912498fc7646fce71ff8c411ac9.jpg

        输入Y信息确认

66c5787a818f92fa3f863899151af46cb61.jpg

        工程创建成功。

d7ad52645e9343c9d73ff4d6d0b8b7202b5.jpg

    2.编译源代码

        mvn compile

        在工程目录下进入dos,输入命令。

ba12254e45c7ef8426b613b25ad2ad9dc7f.jpg

d5b14c40c535a8d6a1719f3b20317efed2b.jpg

        工程中会多出一个target文件夹

71364692c292e8c4648432b5b68c4e39135.jpg

    3.清空

        mvn clean

3b139e74fb0530a924d1f1d0208c9c90b6c.jpg

eab456308a25387ece2cea9cffcc2be6bb4.jpg

        删除了target文件夹。

507d47905bd40d6ef3a5f345764459632f0.jpg

    4.生成站点目录

        mvn site

        如果遇到一直报这个错误,意思是找不到org/apache/maven/doxia/siterenderer/DocumentContent

        原因:doxia-site-renderer 1.8版本才有这个类,说明你maven-site-plugin插件版本高了,或者doxia-site-renderer低了

        在项目的pom.xml中加入

    <build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-site-plugin</artifactId>
				<version>3.7</version>
			</plugin>
		</plugins>
	</build>

        命令成功后项目会生成target\site目录。

5.安装当前工程的输出文件到本地仓库

        mvn install

        在本地仓库就有我们项目的包了

828245f8eda99b9188d66d9d1ded66aad7a.jpg

    6.打包

        mvn package

        在target目录下就有我们项目的打包文件

31b30a2380e489e4fccb39af16c5cd9925b.jpg

        mvn clean package

         先清除再打包

三,坐标-仓库-生命周期

     1.坐标

        组成元素

        groupId:一般代表公司名。

        artifactId:一般为项目名。

        version:版本号。

        package:定义Maven项目的打包方式。

        classifier:表示在相同版本下针对不同的环境或者jdk使用的jar。

    2.仓库

        仓库就是指存储所有项目的共享构件(包)的位置。

        分为两大类:1.本地仓库,2.远程仓库。其中远程仓库分为:中央仓库,私服,其他公共库。

        ①本地仓库是在第一次执行maven命令的时候被创建,不是安装maven后创建。

        ②无论是Windows还是Linux,本地仓库的默认位置都是在用户目录下的.m2/repositpry/

        ③修改本地仓库的方式:

            1.用户范围:把setting.xml放到.m2文件下。

            2.全局修改:修改maven目录中setting.xml文件的localRepository。

    3.Maven生命周期

        1).Maven有三套相互独立的生命周期。

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

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

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

            注意:运行任何一个阶段的时候,它前面的所有阶段都会被执行,这也就是为什么我们在运行mvn install的时候,代码会被编译,测试,打包。每个生命周期都包含一些阶段,阶段是有顺序的。

        2).Clean Lifecycle

            ①pre-clean:执行清理前需要完成的工作。

            ②clean:清理上次构建生成的文件。

            ③post-clean:执行清理后需要完成的工作。

        3).Default Lifecycle

            ①validate:验证工程是否正确,所需要的资源是否可用。

            ②compile:编译项目的源代码。

            ③test:测试已编译的源代码。

            ④package:已编译的代码打包。

            ⑤integration-test:将包处理和发布到一个能够进行集成测试的环境。

            ⑥verify:运行所有检查,验证包是否有效且达到质量标准。

            ⑦install:把包安装到本地仓库。

            ⑧deploy:在集成或发布环境下执行,将最终版本的包拷贝到远程仓库。

        4).Site Lifecycle

            ①pre-site:生成项目站点之前需要完成的工作。

            ②site:生成项目站点文档。

            ③post-site:生成站点之后需要完成的工作。

            ④site-deploy:将项目站点发布到服务器。

四,依赖-聚合-继承

    1.依赖

       项目中需要引入的jar包称之为依赖。

       在pom.xml的dependencies标签里加入dependency标签,具体信息可以去https://mvnrepository.com/查询。

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

        1)依赖的范围:依赖范围是用来控制与编译、测试、运行三总classpath的关系。<scope></scope>来设置依赖范围。

            ①compile范围

            依赖的包会在编译的时候加入进来,并且在打包的时候也会把这个包加入进去。

           ②provided范围

            在编译和测试的时候有效,在进行打包的时候不会加入进去。

           ③test范围

            在测试的时候有效,在编译和打包的时候不会使用这个依赖。

           ④runtime范围

            在运行的时候才会依赖,在编译的时候不会依赖。

           ⑤system范围

            与provided类似,但是你必须显示的提供一个对于本地系统中jar文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven也不会在仓库中去寻找它。如果设置撑system范围,你必须提供一个systemPath元素。(该范围不推荐使用)

            注意:在默认情况下scope的范围是compile。

       2)依赖的传递性

           如果A项目引入了a包,B项目引入了A项目,那么B项目也就引入了a包。

           那么B项目怎么引入A项目呢?

c6c3cdf0a6b387f901dd54a17908180a12e.jpg

            在demo项目的pom.xml文件中,5-8行是demo项目的信息,那么其他项目可以dependency标签引入demo项目。

            传递性的规则:

                1.路径最近优先:c->b->a,c依赖b,b依赖a。那么c会优先使用b中的包。

                2.路径相同配置在前优先:c->b,c->a,c依赖b,c依赖a。如果c把依赖b的代码写在前面那么就优先使用b的包。

           去除依赖:

                如果b->a,而你b中不想要a中的某个包就可以使用去除依赖。

                1.选择性依赖(optional)

                 在a项目里引入的包中加入<optional>true</optional>

                2.排除性依赖(exclusion)

                在b项目里引用a项目的代码中加入exclusion标签

<dependencies>
    <dependency>
      <groupId>com.demo</groupId>
      <artifactId>demo</artifactId>
      <version>1.0-SNAPSHOT</version>
      <exclusions>
       <exclusion>
        <groupId>不引入包的信息</groupId>
        <artifactId>不引入包的信息</artifactId>
       </exclusion>
      </exclusions>
    </dependency>
</dependencies>

    2.聚合

        Maven的聚合功能可以通过一个父模块将所有要构建模块整合起来,将父模块的打包声明为POM,通过<modules>将各模块集中到父POM中。

    创建父模块:

d988070dcc2ecce5a10e3c88408885a5a45.jpg

f7bc8cd8dcfdfc695e9d3e89075a382b09b.jpg

    父模块目录:

a99b58767759bf9dd571bc51425445d100d.jpg

    创建子模块:

e70bb7a734c8e3b8761d974558d3eab066a.jpg

    在父模块的pom.xml文件中加入<module>标签

bd4a152ded86485aaa1c1959c122ed2a606.jpg

    点击父模块执行Maven命令发现一个错误

c358763e5559c799931db812c37ca61bc47.jpg

    原因是父模块里没有子模块,把子项目复制到父项目里

b90c540d5a79a1c3bf8c7b3c720d89c52b3.jpg

    刷新后就可以看到父模块中有子模块

ad5d6f838e466fcc57bb5323cccdda25e17.jpg

    再执行Maven命令就可以成功了。

    另外可以右键父模块项目new Maven项目的时候选择Maven Module

f45cf948d2cabd046fef5e3c2f64096d4b9.jpg

    这样就不用复制子模块到父模块中

   3.继承

    与面向对象的继承概念一样,通过继承消除重复编码的行为。父模块提取公共的部分,子模块使用<parent>继承父模块获取公共部分。

<parent>
    <groupId>com.demo</groupId>
    <artifactId>father</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

可继承的POM元素如下:

  • groupId:项目组ID,项目坐标的核心元素
  • version:项目版本,项目坐标的核心因素
  • description:项目的描述信息
  • organization:项目的组织信息
  • inceptionYear:项目的创始年份
  • url:项目的URL地址
  • developers:项目的开发者信息
  • contributors:项目的贡献者信息
  • distributionManagement:项目的部署配置
  • issueManagement:项目的缺陷跟踪系统信息
  • ciManagement:项目的持续集成系统信息
  • scm:项目的版本控制系统西溪
  • malilingLists:项目的邮件列表信息
  • properties:自定义的Maven属性
  • dependencies:项目的依赖配置
  • dependencyManagement:项目的依赖管理配置
  • repositories:项目的仓库配置
  • build:包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等
  • reporting:包括项目的报告输出目录配置、报告插件配置等

五.远程仓库的配置

      两种方式:

          1.修改setting.xml文件中的<mirror>标签

1b1563d29bfc202f5c5108fdd067cd0039a.jpg

           2.可以在pom.xml文件中指定仓库

<repositories>
  	<repository>
	  	<id>maven-ali</id>
	  	<url>http://maven.aliyun.com/nexus/content/groups/public</url>
	  	<releases>
	  		<enabled>true</enabled>
	    </releases>
	  	<snapshots>
	  		<enabled>true</enabled>
	  		<updatePolicy>always</updatePolicy>
	  		<checksumPolicy>fail</checksumPolicy>
	  	</snapshots>
  	</repository>
</repositories>

 

转载于:https://my.oschina.net/u/2411763/blog/1935474

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值