Maven学习心得——快速入门Meven

学习maven有一些感想:

起初不是很了解maven,到现在也是略懂皮毛,我只知道他是一个管理依赖jar包的工具,现在用的时候也是通过IDEA 和 eclipse里的插件在使用,没强记过它的一些常用命令,编辑器都有简单的操作,不需要你输入命令。
但是今天在打包一个springboot项目的时候,出了问题,package命令的执行过程是validate–>compile–>test–>package,我的项目里加了websocket的jar,但是在测试环境下老报错,运行环境可以,可能是加的依赖包和现有的包重了。我也改了依赖的scope,默认是compile,我改成了provided,但是没解决问题,只能通过命令了,让它在打包的时候跳过测试环境,最后打包成功。


学习maven你暂时不需要做的事:
  • 你不需要了解groupid、artifactId、version等有什么用
  • 你不需要去记命令
  • 你不需要深入了解maven的原理,会用就行
学习maven你必须要做的事:
  • 知道怎么用编辑器简单使用maven(现在的编辑器如IDEA,安卓的,eclipse都自带maven插件,非常自动化)
  • 你要会找dependency,推荐网站(http://mvnrepository.com/
  • 遇到关于maven的问题要会通过百度解决
  • 当然还要会在自己的电脑上配maven环境(百度经验有

下面记述一个比较高深的东西,maven的聚合与继承

这是一个父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>
  <groupId>user_parent</groupId>
  <artifactId>parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <modules>
    <module>../user_dao</module>
    <module>../user_service</module>
  </modules>

  <properties>
    <spring.version>4.1.7.RELEASE</spring.version>
    <junit.version>4.12</junit.version>
    <log4j.version>1.2.17</log4j.version>
  </properties>
<dependencyManagement>
  <dependencies>
  <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>

        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>${junit.version}</version>
          <scope>test</scope>
        </dependency>

        <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
    </dependencies>
  </dependencyManagement>
</project>
聚合:<modules></modules>

从字面意思来说,module就是模块,而pom.xml中的modules也正是这个意思,用来管理同个项目中的各个模块;如果maven用的比较简单,或者说项目的模块在pom.xml没进行划分,那么此元素是用不到的;不过一般大一点的项目是要用到的。

使用场景:

如果我们的项目分成了好几个模块,那么我们构建的时候是不是有几个模块就需要构建几次了(到每个模块的目录下执行mvn命令)?当然,你逐个构建没问题,但是非要这么麻烦的一个一个的构建吗,那么简单的做法就是使用聚合,一次构建全部模块。

版本号统一管理:

在spring的依赖中,我们需要引用一系列版本的spring,如版本1.2.6。每次都写不利于维护。所以加入标签properties,动态注入版本号。

<properties>
    <spring.version>4.1.7.RELEASE</spring.version>
  </properties>
继承当然要有父和子,举例:

user_dao项目的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>

    <parent>
    <groupId>user_parent</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath>../parent/pom.xml</relativePath>
  </parent> 

  <groupId>com.user.login</groupId>
  <artifactId>user_dao</artifactId>
  <packaging>jar</packaging>

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

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
</dependency>


    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

明显的看见有<parent>标签

<parent>
    <groupId>user_parent</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath>../parent/pom.xml</relativePath>
  </parent>

groupId、artifactId、version对应的是父pom.xml的信息,relativePath这个标注父pom.xml在哪里。
你仔细看,依赖包的的版本号都没了,这是因为在父pom.xml里统一管理了。
maven的聚合和继承如果是自己的小项目没必要用,但是公司里的项目多了,大项目下还有子项目就需要统一管理。

学习maven的一些小知识:

在添加依赖时下载很慢,原因是maven的远程仓库在国外,要想下载快,用阿里云仓库。

在maven的安装包下(我的D:\maven\apache-maven-3.5.2\conf)找到settings.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写了一个集成的工具,想要在其他项目中直接引用,可通过install,将工具打包成jar自动存放在本地仓库,像其他依赖一样加入即可。

如:

<dependency>
  <groupId>com.user.login</groupId>
  <artifactId>user_service</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</dependency>
将本地仓库移出c盘(默认在c盘,我的在C:\Users\asus.m2\repository),一旦重装系统所有依赖就得重新下载,而且c盘很满看着不舒服

在settings.xml里我同样找到了这个标签,只是被注释掉了,我们可以不用打开注释 <localRepository>D:\maven\repository</localRepository>

<!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->

我们在项目中改动最多的地方是这里面添加依赖<dependencies></dependencies>,实际中再遇到什么问题,百度即可。


象征性的粘贴些maven的常用命令

编译源代码: mvn compile

编译测试代码:mvn test-compile

运行测试:mvn test

打包:mvn package

跳过测试打包:mvn install -DskipTests 或者mvn install -Dmaven.test.skip=true

在本地Repository中安装jar:mvn install

清除产生的项目:mvn clean

生成eclipse项目:mvn eclipse:eclipse

生成idea项目:mvn idea:idea


一些认知性的知识:

modelVersion:POM 模型版本 4.0.0 固定

groupId:一般指某个公司或者某个组织的某个项目 比如 org.springframework

artifactId:一般指某个具体项目的某个具体模块 比如 spring-context

Version:项目的版本

Mvn 远程仓库地址:http://mvnrepository.com/


学习maven其实很简单,先不求甚解,使用了再说。在使用中学习,知道它在一个项目中的作用,遇到问题了,就去百度,解决问题的过程会让你对它的认识更加透彻。

学习其他新知识也一样,认知过程是痛苦的,直接与它近距离接触才能慢慢揭开它的神秘面纱。


本人看过的学习maven视频链接,还不错,推荐给大家。

链接:https://pan.baidu.com/s/1eUhbj2q 密码:se0o

有任何问题,请评论留言。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

徐同学呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值