欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

maven 安装和配置说明

最编程 2024-07-17 09:43:32
...

Apache Maven是一个很流行的软件项目管理和理解工具,它能够被用来构建和管理任何基于java的项目,主要有以下几个目标:

  • • 简化构建过程
  • • 提供统一的构建系统
  • • 提供高质量的项目信息
  • • 鼓励更好的开发实践

考虑到maven的流行度,本篇就先从maven的安装和配置讲起。

1、安装maven

maven官网最新的版本是3.9.1,我们就以此版本为例进行讲解。

注:maven 3.9+以上的版本需要依赖JDK 8或者更高版本的JDK。

1.1 、下载maven

点击apache-maven-3.9.1-bin.zip进行下载,或者直接访问以下网址进行下载

https://dlcdn.apache.org/maven/maven-3/3.9.1/binaries/apache-maven-3.9.1-bin.zip

1.2、解压文件

将刚才下载下来的apache-maven-3.9.1-bin.zip文件解压到我们常用的安装开发工具的目录,比如

D:\developer目录,那么maven的主目录就是D:\developer\apache-maven-3.9.1-bin

1.3、配置系统环境变量

(1)进入Windows系统的"高级系统设置",点击右下角的“环境变量”,进入环境变量的维护页面

(2)编辑"系统变量"列表中的Path配置项,在编辑页面新增一条配置项的值,也即新安装的maven的bin目录的全路径名:D:\developer\apache-maven-3.9.1-bin\bin,然后点击确定保存。

(3)打开一个新的cmd命令行页面,执行下述命令

mvn -version

​ 如果得到类似下面的响应输出,说明安装成功。

Apache Maven 3.9.1 (2e178502fcdbffc201671fb2537d0cb4b4cc58f8)
Maven home: D:\developer\apache-maven-3.9.1-bin\bin..
Java version: 1.8.0_281, vendor: Oracle Corporation, runtime: D:\developer\Java\jdk1.8\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

2、maven配置文件详解

我们先看一下官方给我们提供的settings.xml文件的格式,可以在maven安装目录下的conf目录下找到该文件。

<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 https://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository/>
  <interactiveMode/>
  <offline/>
  <pluginGroups/>
  <servers/>
  <mirrors/>
  <proxies/>
  <profiles/>
  <activeProfiles/>
</settings>

我们挑其中常用的重要配置项来看下。

2.1、localRepository配置

localRepository配置项用来配置maven的本地仓库地址,简单说就是用来存储通过maven下载下来的各种jar包。如果我们的项目pom.xml文件依赖了某个jar包,默认会先从我们本地仓库去查找,查不到的请求下,再去请求外部仓库。

该配置的默认值是:

${user.home}/.m2/repository

${user.home}指用户的主目录,比如我的就是C:\Users\xt

如果我们想节省C盘的空间,想把jar包存储到其他磁盘,可以这么设置

<localRepository>D:/programs/.m2/repository</localRepository>

2.2、servers配置

该配置项主要是用来为各个远程仓库配置认证信息,比如访问远程仓库时需要提供用户名和密码信息,它的结构如下:

<servers>
    <server>
      <id>deploymentRepo</id>
      <username>repouser</username>
      <password>repopwd</password>
    </server>
    <server>
      <id>deploymentRepo2</id>
      <privateKey>/path/to/private/key</privateKey>
      <passphrase>ddddd</passphrase>
    </server>
 </servers>

结点下面可以有多个结点,其中server结点下的子结点释义如下:

  • • id,对应repository或mirror的id,用来指定该配置项是针对哪个仓库的,必填项
  • • username,访问仓库的用户名
  • • password,访问仓库的密码
  • • privateKey,访问仓库的私钥
  • • passphrase,访问仓库的口令,可选

其中username和password成对出现,privateKey和passphrase成对出现。两种认证方式不同,我们配置时只需要选取其中一种就可以。常用的就是配置用户名和密码。

2.3、mirrors配置

mirrors配置项主要是用来为远程仓库配置镜像站点,我们可以基于以下情况来考虑使用mirrors镜像配置。

  • • 分担远程仓库的访问压力,同时又不希望修改repoistory仓库的配置
  • • 用自己的内部仓库替换掉特定的仓库,比如替换掉central仓库

mirrors的结构如下:

<mirrors>
  <mirror>
    <id>nexus-aliyun</id>
    <name>Nexus aliyun</name>
    <mirrorOf>central</mirrorOf>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
   </mirror> 
</mirrors>

结点下面可以包含多个子结点,其中mirror结点下面的子结点释义如下:

  • • id,镜像仓库的id,要保证唯一,不能和mirrors和repositories下面的id相同,因为镜像仓库本质上也是仓库,下载jar包时,会根据此id去servers结点下面查找server结点配置的认证信息
  • • name,镜像仓库的名称,方便用户识别该仓库
  • • mirrorOf,需要做镜像的仓库的id值,也就是取repository的id值
  • • url,镜像仓库的地址

关于此段配置,我们一般会用来替换maven的central仓库,mirrorOf的值就写成central,url的值配置为阿里云maven仓库地址或者公司内网的maven仓库地址。

2.4、profiles配置

profiles配置项用来配置我们常用的仓库,而且可以对这些仓库进行分类,在特定的条件下使特定类别的仓库生效,当然也可以默认指定使用某些仓库。

注意:官方更推荐在pom.xml文件中定义profiles

profiles的结构如下:

 <profiles>
    <profile>
      <id>dev</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
       <repositories>
       </repositories>
      <pluginRepositories>
        <pluginRepository>
        </pluginRepository>
      </pluginRepositories>
    </profile>
    <profile>
      <id>test</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
       <repositories>
       </repositories>
      <pluginRepositories>
        <pluginRepository>
        </pluginRepository>
      </pluginRepositories>
    </profile>
 </profiles>

结点下面可以有多个结点,我们就是通过profile结点对仓库进行分类。profile结点的子节点释义如下:

  • • id,标识profile,单个文件中的profile的id值要保证唯一,后续靠这个值来激活对应的profile
  • • activation,自动激活相关的配置,其中它的子节点activeByDefault配置为true,则默认激活当前的profile
  • • repositories,仓库列表配置
  • • pluginRepositories,插件仓库列表配置

repositories和pluginRepositories这两部分包含内容较多,我们分开来看

2.4.1、repositories配置

repositories用来配置各个仓库的信息。之所以有这样的设计,其中一个原因就是我们平时开发所需的jar包可能分散在不同的仓库里,由于仓库之间是独立的,如果把所有的包都维护在一个仓库,本身也会影响仓库的性能,所以这时就需要结合多个仓库来使用了。

repositories结构如下:

    <repositories>
        <repository>
          <id>dev</id>
          <name>开发仓库</name>
          <releases>
            <enabled>false</enabled>
            <updatePolicy>always</updatePolicy>
          </releases>
          <snapshots>
            <enabled>true</enabled>
            <updatePolicy>never</updatePolicy>
          </snapshots>
          <url>http://192.168.1.1/repository/dev</url>
        </repository>
   </repositories>

结点下面有多个repository结点,repository结点下面的子节点释义如下:

  • • id,仓库的id,需要全局唯一,也不能和mirror的id相同
  • • name,仓库的名称,随便起,只是方便我们识别仓库
  • • releases,发布版本的配置
  • • snapshots,快照版本的配置
  • • enabled,true或false,代表该仓库对指定类型(releases或snapshots)的版本的jar包是否有效,b比如releases下面的enabled如果是true,那么下载发布版本的jar包就可以使用到该仓库。
  • • updatePolicy,是指更新策略,alway代表每次下载jar包都从远程仓库下载并更新本地jar包;daliy是默认值,指每天下载jar包都会去远程下载并更新一次本地的jar包。never指的是只要本地有jar包,就一直使用本地的。针对snapshots的配置,我们一般会设置为always
  • • url,仓库的地址

2.4.2、pluginRepositories配置

pluginRepositories是指插件仓库,用来管理我们使用到maven插件的仓库。我们平时使用的jar包一般分两种,一类就是这种jar包需要被别的项目依赖,另一种jar包就是maven自身使用到的jar包,也叫插件。maven官方针对这两类jar包,就给出了pluginRepositories和repositories这两类的配置。而repositories就配置我们项目开发常用的彼此之间存在依赖的jar包所在的仓库。

pluginRepositories的结构如下:

   <pluginRepositories>
        <pluginRepository>
          <id>testPluginRepo</id>
          <name>测试插件仓库</name>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <url>http://192.168.1.1/repository/testPlugin/</url>
        </pluginRepository>
    </pluginRepositories>

pluginRepositories结点下可以有多个pluginRepository结点,pluginRepository结点下的子节点的释义和repository的一样,此处就不再重复了。

2.5、activeProfiles配置

activeProfiles配置项用来指定哪些profile生效,它的结构如下:

<activeProfiles>
    <activeProfile>dev</activeProfile>
 </activeProfiles>

activeProfiles结点下面可以多个activeProfile结点,activeProfile对应的值就是profile的id。

结束语

本文先分享到这里,觉得有收获的朋友,可以关注我,或者进行分享或收藏,有疑惑的也可以来私聊评论,我会及时进行回复~