Maven仓库和插件

版权声明:+1s https://blog.csdn.net/qq997404392/article/details/80507898

Maven仓库的概念

在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。
Maven在某个统一的位置存储所有项目共享的构建,这个位置就称之为仓库。
任何构件都有唯一的坐标,Maven根据这个坐标定义了构件在仓库中的唯一存储路径。

构件在仓库中对应的存储路径

<groupId>com.companyname.project-group</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<packing>jar</packing>

基于groupId准备路径,将 . 分隔符转成路径分隔符:com/companyname/project-group
基于artifactId准备路径,连接到后面:com/companyname/project-group/project
基于version准备路径,连接到后面:com/companyname/project-group/project/1.0
将artifactId与version以 - 连字号连接到后面:com/companyname/project-group/project/1.0/project-1.0
判断如果构件有classifier,就要在第4步后增加 - 连字号:com/companyname/project-group/project/1.0/project-1.0-jdk8
检查构件的extension(由packing定义),如果extension存在,则加上 . 分隔符和extension:com/companyname/project-group/project/1.0/project-1.0-jdk8.jar

Maven仓库类型

本地仓库
Maven在本地存储构件的地方,它在第一次运行任何 maven 命令的时候创建。
本地仓库保存工程的所有依赖(library jar、plugin jar 等)。当你运行一次 Maven 构建,Maven 会自动下载所有依赖的 jar 文件到本地仓库中。它避免了每次构建时都引用存放在远程机器上的依赖文件。
Maven本地仓库默认创建在 %USER_HOME%/.m2/repository 目录下。

1、更改配置用户范围的本地仓库
先在/.m2/目录下创建settings.xml文件,然后在~/.m2/settings.xml,设置localRepository元素的值为想要的仓库地址(此时配置的maven本地仓库是属于用户范围的)。

<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>C:/MyLocalRepository</localRepository>
</settings>

2、更改配置全局范围的本地仓库
在M2_HOME/conf/setting.xml中更改localRepository元素的值为想要的仓库地址。此时更改后,所有的用户都会受到影响;如果maven进行升级,那么所有的配置都会被清除。

远程仓库
1、中央仓库
中央仓库是默认的远程仓库,由Maven社区提供,其中包含了大量常用库。
url:http://repo1.maven.org/maven2/
中央仓库需要通过外网才能访问。

2、私服
私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。
私服可以节省自己的外网带宽,减少重复请求造成的外网宽带消耗。
加速Maven构件:如果项目配置了很多外部远程仓库的时候,构件速度就会大大降低。
部署第三方构件:有些构件无法从外部仓库获取,我们可以把这些构件部署到私服中,供内部Maven项目使用。
提高稳定性,增强控制:网络不稳定的时候,Maven构件也会变得不稳定,一些私服软件还提供了其他功能。
降低中央仓库的负荷。

当前主流Maven私服:Apache的Archiva、JFrog的Artifactory、Sonatype的Nexus。

3、其他公共库
Maven依赖搜索顺序
在本地仓库中搜索,如果找到了则执行其他操作;否则执行步骤2。
在中央仓库中搜索,如果找到了则下载到本地仓库中以备将来引用;否则,如果有设置远程仓库,则执行步骤3;未设置Maven将停止处理并抛出错误(无法找到依赖的文件)。
在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库以备将来引用;否则Maven将停止处理并抛出错误(无法找到依赖的文件)。

远程仓库的配置
在元素下,可以使用子元素声明一个或者多个远程仓库。

<repositories>
          <repository>
              <id>jboss</id>
              <name>JBoss Repository</name>
              <url>http://repository.jboss.com/maven2/</url>
             <releases>
                  <!-- 更新频率,值:never、always、interval、daily(默认值)--> 
                  <updatePolicy>daily</updatePolicy>
                  <enabled>true</enabled>
                   <!-- Maven检查和检验文件的策略,值:fail、ignore、warn(默认值)-->
                  <checksumPolicy>warn</checksumPolicy>
              </releases>
              <snapshots>
                  <enabled>false</enabled>
              </snapshots>
              <layout>default</layout>
          </repository>
</repositories>

出于安全方面的考虑,有时我们需要对远程仓库的访问进行认证,一般将认证信息配置在settings.xml中:

<servers>
          <server>
              <!-- id必须与pom.xml中需要认证的repository元素的id一致 -->
              <id>same with repository id in pom</id>
              <username>username</username>
              <password>pwd</password>
          </server>
</servers> 

将项目部署到远程仓库
在pom.xml中配置元素,包含两个子元素:
repository - 表示发布版本构件的仓库
snapshotRepository - 表示快照版本构件的仓库
这两个元素都需要配置id、name、url(表示该仓库的地址),配置后运行:mvn clean deploy

私服库的配置

<repositories>
      <repository>
            <id>nexus</id>
            <name>nexus</name>
            <url>私服库地址</url>
            <releases>
                  <enabled>true</enabled>
            </releases>
            <snapshots>
                  <enabled>true</enabled>
            </snapshots>
      </repository>
</repositories>

项目上传到私服库
settings.xml

<servers>
    <server>
        <id>mavenedu-snapshots</id>
        <username></username>
        <password></password
    </server>
    <server>
        <id>mavenedu-releases</id>
        <username></username>
        <password></password
    </server>
</servers>

<profile>  
    <repositories>
        <repository>
          <id>nexus</id>
          <name>nexus</name>
          <url>私服库地址</url>
          <layout>default</layout>
          <snapshotPolicy>always</snapshotPolicy>
        </repository>
      </repositories>
</profile>

pom.xml

<distributionManagement>
      <!-- 快照版本仓库 -->
      <snapshotRepository>
            <id>mavenedu-snapshots</id>
            <name>mavenedu-snapshots</name>
            <url>私服库地址</url>
      </snapshotRepository>

      <!-- 正式版本仓库 -->
      <repository>
            <id>mavenedu-releases</id>
            <name>mavenedu-releases</name>
            <url>私服库地址</url>
      </repository>
</distributionManagement>

maven build
这里写图片描述

Maven插件的概念

Maven实际上是一个依赖插件执行的框架,每个任务都由插件来完成:创建jar文件、创建war文件、编译代码文件、代码单元测试、创建工程文档、创建工程报告等。
插件通常提供了一个目标的集合,并且可以使用以下语法执行:

mvn [plugin-name]:[goal-name]

插件类型
Build plugins,在构建时执行,并在pom.xml的元素中配置。
Reporting plugins,在网站生成过程中执行,并在pom.xml的元素中配置。

常用插件
clean 构建之后清理目标文件。删除目标目录。
compiler 编译 Java 源文件。
surefile 运行 JUnit 单元测试。创建测试报告。
jar 从当前工程中构建 JAR 文件。
war 从当前工程中构建 WAR 文件。
javadoc 为工程生成 Javadoc。
antrun 从构建过程的任意一个阶段中运行一个 ant 任务的集合。

插件是在pom.xml中使用plugins元素定义的。
每个插件可以有多个目标。

猜你喜欢

转载自blog.csdn.net/qq997404392/article/details/80507898