maven学习

maven概念
  • 我们之前写代码时,会导入很多需要的jar包,都放在项目中,然后这就会造成我们开发完成后项目变得很大,而maven就是来解决这种问题的,用maven开发项目,jar包不在项目中,而在jar包仓库中存放着,通过pom.xml文件的配置获取jar包,而不用手动去添加jar包,所以我们的项目空间就会占用的很少,一个普通web项目要几十兆的话,一个maven只需要几百k.

  • 所以说,maven就是用来合理叙述项目间的依赖关系的.可以这么理解,当有十个相同需要jar包的项目的时候,传统的项目都会导入这些相同的jar包,而maven的jar包都在仓库中放着,只需要导入一次,是不是就节省了空间,就跟代码重用一样的道理.

  • maven的核心功能:

    • 其一就是依赖管理: 即maven工程对jar包的管理过程.
    • 其二就是一键创建.
  • maven项目的一键构建:

    • 我们之前的项目,使用本地安装的tomcat的时候,都是要经过编译,测试,运行,打包,安装,部署等一系列过程.
    • 什么是maven构建: 指的是项目从编译,测试,运行,打包,安装,部署整个过程都交给maven管理.
    • 什么是maven一键构建: 指的是我们不再使用本地安装的tomcat,而使用maven自身继承的tomcat插件,整个构建过程,使用maven一个命令就可以轻松完成.
  • 关于maven的安装流程(切记要先装jdk).

maven仓库的种类和各个仓库间的关系
maven工程-----里面放的有jar包坐标
    --首先.它会自动去c盘找本地仓库: `${user.home}/.m2/repository`,其中`${user.home}`就表示系统盘.
    --**刚安装好maven**的时候我们电脑上的**本地仓库**是没有jar包的.
    --本地仓库找不到之后,这时候如果我们电脑联网了,它就会自动去网上的中央仓库(放着几乎所有开源的jar包)下载jar包,没联网就会报错.
  • 总结一下:

    • 仓库分三类:
      • 本地仓库: jar包在本地的放置位置,启动maven项目首先会默认在本地找jar包.
      • 中央仓库: 启动maven项目在本地找不到对应jar包的时候,就会去中央仓库找.
      • 远程仓库(私服): 在公司中,一般都会自己建一个远程仓库供公司使用,和maven项目所在的电脑在同一个局域网的时候,本地找不到它会先在远程仓库找,远程仓库找不到再去中央仓库下载.
  • 本地仓库位置的修改: 找到maven解压目录下的conf文件夹—> settings.xml—> 通过’自定义本地仓库路径’修改, 注意路径不能有中文,不能有空格.

maven标准目录结构
  • maven项目构成
    • 核心代码部分
    • 核心代码配置文件部分
    • 测试代码部分
    • 测试代码配置文件部分
  • 传统的都是放在src目录下的
  • maven项目标准目录结构
    • src/main/java目录 放置核心代码部分.
    • src/main/resource目录 放置核心代码配置文件部分.
    • src/test/java目录 放置测试代码部分
    • src/test/resources目录 放置测试配置文件部分
    • (web工程比java工程多一个)src/main/webapp目录 放置界面资源,包括js,css,图片等
maven常用命令

我传了一个很简单的maven项目,大家可以根据这个来掌握命令,尤其是注意一下其中路径的写法: maven项目.

  • mvn clean 会删除maven项目下的target目录
  • mvn compile 重新生成maven项目下的target目录(里面放着src/main/java目录下编译后的class文件等)
  • mvn test 会在target目录下生成一个test-classes文件夹,里面放着src/test/java下的代码的编译class文件
    • 注意: 如果直接编译test文件,没有target目录会自动生成,而且还会编译src/main/java下的核心代码
  • mvn package 打包项目,没有target目录会生成target目录,里面放着打包生成的war包,而且会自动编译核心代码和测试代码.
  • mvn install 该命令相当于执行了前面三个命令,没有target目录会生成target目录,会自动编译核心代码和测试代码,而且该命令生成的war包也会放在该目录下,同时会自动将该war包安装到本地仓库.
  • 后一个命令的执行,都包含了前一个命令的执行,即我执行mvn test,会包含执行mvn compile这个意思.
maven生命周期
  • 清理生命周期 即: mvn clean.
  • 默认生命周期 即: mvn compile->test->package->install->deploy
  • 站点生命周期(不管)
maven概念模型图

maven项目概念模型图.

  • 项目对象模型中包括: 项目自身信息,项目运行所依赖的jar包信息,项目运行环境信息,比如jdk等.
  • 依赖管理模型放的都是jar包的坐标,它指向的三个箭头从下往上依次是: 本地仓库, 远程仓库, 中央仓库.
  • 注意: maven的生命周期中的每个构建命令都对应了maven底层的一个插件.
idea如何使用maven的话,我百度云上面有视频,我分享给大家吧: idea创建项目-要提取码的话就是:tk6r.
几个问题
  • 在用idea创建maven的web项目的时候,我碰到了一个问题,就是src/main/java下不能创建servlet,搞了半天,解决办法如图:
    maven不能创建servlet解决办法.

  • 我们在web项目中需要导入jar包时就只需要在pom.xml下添加这样一段话就好了:

      <dependencies>
          要多少个jar包就写多少个<dependency>
          <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
          </dependency>
      </dependencies>
    
    • 在这里还要注意:
      • 这个idea是可以帮我们完成的,在报错的地方看提示:类似添加到dependencies的字样
      • 当我们自己添加的时候,先填<artifactId>,如果你的本地仓库有这个jar包,填的时候有提示,如果本地仓库没有,就要去中央仓库找
        • 可以直接百度maven中央仓库,我把链接放这里: maven中央仓库
        • 然后搜索你要的jar包,然后复制对应jar包的<dependency>到当前项目下的pom.xml中来就ok,如果电脑联网了,它会自动下载jar包到本地来的.
  • 我在创建maven项目后,运行的时候,报错说无法编译jsp文件,也搞了我好久,原因是因为tomcat和jdk不兼容,我的jdk是1.8,需要tomcat7才可以兼容,而maven默认用的是tomcat6,解决办法如图:

    • 注意: 在这期间可能tomcat下载不下来,反正我就是这样,你只需要选中右侧的那个Dependencies,然后鼠标右键点击Download Resources就可以完美解决.
      maven报错不能编译jsp异常解决办法.
  • 还有一个错就是说在运行的时候,报错说不能将servlet作为httpservlet,反正就是这么个意思,原因是因为本地tomcat中的jar和maven中的jar包重合了,解决办法是在依赖中添加一句话,是的编译的时候用依赖中的jar,运行的时候用tomcat的jar.如图:

maven报错servlet不能作为servlet解决办法

  • 对于maven项目中xml依赖配置的问题:

    • 一般它的属性默认就可以了,也就是编译运行测试都用,但是有几个常用的不是这样子
    • jsp和servlet设置为provided,只用于编译和测试,因为它会和tomcat中的jar冲突,造成不能将servlet识别为httpservlet.
    • jdbc驱动设置为runtime,只用于运行时.
    • junit设置为test,表示只用于测试时.
  • 记得在maven安装路径下的config文件夹下的setting.xml中把<mirrors>改成阿里云的,贼快,国外的网如果你没有翻墙你会哭的,相信我,直接复制下面的过去就可以了,亲测有效.

      <mirrors>
          <mirror>
            <id>alimaven</id>
            <name>aliyun maven</name>
          <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <mirrorOf>central</mirrorOf>        
          </mirror>
      </mirrors>
    
  • 还有就是在用maven连接数据库的时候,这个依赖不是最新最好,而是要适应自己数据库版本才行!!!我上过当,我是5.1的数据库下载了一个8.0的依赖,搞死我了!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值