Maven再相识

Maven是项目管理和构建工具。那具体怎么进行项目管理和构建的呢?
应用场景,在电商项目中,分为订单、商品、商家、用户、营销模块,其中订单模块需要用到用户模块的代码,比如查询用户信息的接口,那是不是需要用户模块的同学把代码拷贝一份给订单模块呢?若是这么做,会出现很多问题,第一用户模块的代码有bug、功能一直在迭代,比如查询用户信息按userId查询,增加按姓名查询,每次更新代码都需要重新拷贝代码,效率很低。所以把这些代码集中存储管理,用包+版本的方式,集中存储的地方叫仓库,变更通过版本号为维护,包的版本分为测试版本和线上版本,Snapshot和Release。
仓库
在maven中,仓库Repository是非常重要的一个概念。
在这里插入图片描述
maven仓库分为本地仓库和远程仓库,远程仓库又包括中央仓库和私服,其中私服就是在局域网内搭建的一个私有的仓库地址。
很多人会把私服和镜像(mirror)弄混,镜像(mirror)是中央仓库的复制品,原因也很简单,中央仓库在国外,你访问中央仓库的速度慢,镜像的服务器在国内,相当于弄了个缓存。
Idea中maven默认的配置如下
在这里插入图片描述
一般放在用户目录下的.m2目录下。
settings.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>/.../.m2/repository</localRepository>
  <interactiveMode>true</interactiveMode>
  
  <!--服务端的一些设置。如用户名密码不应该和项目的pom.xml放在一起,密码等认证信息应该存在于settings.xml文件中。 -->
  <servers>
    <server>
      <!--这是server的id(注意不是用户登陆的id),该id与distributionManagement中repository元素的id相匹配。 -->
      <id>server001</id>
      <!--鉴权用户名-->
      <username>my_login</username>
      <!--鉴权密码-->
      <password>my_password</password>
      <!--鉴权时使用的私钥位置 -->
      <privateKey>/.../.ssh/id_dsa</privateKey>
      <!--鉴权时使用的私钥密码。 -->
      <passphrase>some_passphrase</passphrase>
    </server>
  </servers>
 <mirrors>
   <mirror>
        <!-- 镜像的唯一标识符-->
        <id>aliyunmaven</id>
        <!-- 被镜像的服务器的id。-->
        <mirrorOf>central</mirrorOf>
        <name>阿里云公共仓库</name>
        <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
  </mirrors>
  <profiles>
    <profile>
     <!-- profile的唯一标识 -->
     <id>aliyun</id>
     <!-- 让当前profile 生效的条件(激活当前profile) -->
      <activation>
        <!-- 默认激活状态为false -->
        <activeByDefault>false</activeByDefault>
         <!-- jdk为1.8时激活 -->
        <jdk>1.8</jdk>
      </activation>
     <!-- 远程仓库列表 -->
     <repositories>
      <repository>
        <id>aliyun</id>
        <name>aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <layout>default</layout>
      </repository>
     </repositories>
   </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>aliyun</activeProfile>
  </activeProfiles>
</settings>

localRepository :我们从远程仓库拉取的maven 包在本地存放的仓库地址;
servers :有些仓库的访问需要用户名密码做身份认证,比如公司自己的仓库。一般 repositories 和 distributionManagement 都会在项目里面的pom.xml 定义,但是用户名密码不适合直接明文放在项目的pom中,而且有的密码是每个人私有的,所以更适合在maven settings.xml里面配置;
mirrors:mirror这个单词是镜像的意思,这里是配置远程仓库的镜像,前面安琪拉提到过,中央仓库可能访问量比较大,访问比较慢,所以可以用镜像来缓存远程仓库的压力。
POM
POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖。
所有 POM 文件都需要 project 元素和三个必需字段:groupId,artifactId,version。
构建生命周期
在这里插入图片描述
清理clean:将编译得到的旧文件class字节码文件删除;
编译compile:将java源程序编译成class字节码文件,编译resource资源文件;
测试test:自动运行测试用例
报告report:测试程序执行的结果
打包package:动态Web工程打War包,java工程打jar包
安装install:将打包得到的文件复制到“仓库”中的指定位置,比如我们多模块构建的时候使用install 将包安装到本地仓库;
部署deploy:将包部署到指定仓库,或者配置应用部署的运行目录;
这些Lifecycle实际都是通过插件的形式来完成的,其实功能都是通过插件来完成的。
一般稍大一点的项目,都是采用多模块管理,如果引入了领域概念,一般分层还有领域层。
scope
一个属性是scope,我们看下scope 的可选值:compile、runtime、test、provided。
compile :默认值,compile表示被依赖项目需要参与当前项目的编译,当然后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去。
provided :在编译、测试时有效,但是在运行时无效。例如:servlet-api,运行项目时,Tomcat这种运行容器已经提供,就不需要Maven重复地引入一遍了。
runtime :在运行、测试时有效,但是在编译代码时无效。例如:JDBC驱动实现,项目代码编译只需要JDK提供的JDBC接口,只有在测试或运行项目时才需要实现上述接口的具体JDBC驱动。
test :只在测试时有效,例如:JUnit。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值