美文网首页
Maven使用及Nexus私服的搭建

Maven使用及Nexus私服的搭建

作者: 已迁至知乎_此不再维护 | 来源:发表于2019-05-21 12:06 被阅读0次

    菜鸟Maven

    Maven主要帮助开发者完成依赖、构建、发布等工作,声名文件是项目或各模块内的pom.xml。

    Maven安装

    1. 下载并解压
    2. 配置环境变量
    3. 配置远程仓库镜像及本地仓库目录:${M2_HOME}/conf/settings.xml

    生命周期

    Maven有三个标准的生命周期:

    • clean
    • default(build)
    • site

    不同的生命周期又抽象出了各阶段(phase):每个阶段都成为了一个扩展点,可以采用不同的方式来实现,提高了扩展性与灵活性;同时规范了Maven的执行路径。

    Maven插件

    生命周期中各阶段(phase)的实际操作由Maven插件执行,Maven的核心部分代码量很少,大部分实现都是由插件来完成。

    在pom.xml中,可以设置指定插件目标(goal)与阶段(phase)绑定,当项目构建到给定阶段时,就会触发绑定插件的goal的执行,如官网演示的插件执行器

    另外,插件也可以通过mvn plugin-name:goal直接运行。

    插件与生命周期的关系是:

    • 生命周期的阶段可以绑定到具体的插件及目标
    • 不同配置下,同一个阶段可以对应多个插件和目标(如打jar包和打war包时)
    • Maven默认为不同的阶段绑定了插件实现,参见说明和实现(%M2_HOME%/lib/maven-core.xxx.jar/MATE-INF/plexus/default-bindings.xml

    如何自定义Maven插件参见这里

    Maven项目结构

    即约定大于配置:

    ----(${basedir})
        |
        pom.xml
        |
        /src/main/java/
        /src/main/resources/
        /src/main/webapp/WEB-INF/
        /src/test/java/
        /src/test/resources/
        /target/classes/
        /target/test-test-classes/
        
    

    常用命令

    • mvn clean
    • mvn compile
    • mvn package
    • mvn test
    • mvn archetype:generate
      ...

    依赖

    • 依赖传播:只需要在项目的pom中定义好直接的依赖关系,间接依赖maven会帮我们搞定;

    • 依赖优先原则

      • 最短路径
      • 相同路径配置在前的优先
      • 同一个pom文件,同一个依赖的不同版本,配置在后的生效
    • 依赖可选:父项目P不允许子项目C依赖其可选依赖<optional>

    • 依赖排除:子项目C不依赖父项目P的目标依赖<exclusions>

    • 依赖管理:在rootpom.xml声明所有依赖(使用dependencyManagement与否皆可),所有继承其的子项目不用再指定依赖版本。

    • 依赖范围:范围指的是编译、测试、运行三个阶段,声明依赖时指定不同的范围(通过<scope>标签),maven会在不同的阶段将其引入classpath。详情参考这篇博客

      • compile:默认的依赖范围,编译、测试运行三个阶段都会被引入classpath
      • test:只有在测试阶段会被引入,代码编译和项目运行时不会被引入,如jUnit
      • provided:只有在编译和测试时候会被引入,项目运行时不会被引入,如setvlet-api
      • runtime:只有在测试和运行阶段会被引入,编译阶段不会被引入,如JDBC驱动,编译时只提供接口
      • system:非Maven仓库中的jar,与provided一致,但需通过systemPath来指定依赖文件的路径
      • import:与dependencyManagement元素配合使用

    聚合

    指将多个模块整合在一起,统一构建。需要一个父工程,使用<modules>配置其中对应的子工程的相对路径。

    继承

    子工程通过<parent>继承父工程,则可以继承其:

    • 属性:通过<properties>标签配置,引用方式是${属性名称},maven的默认属性有 ${basedir}、${version}
    • 依赖
    • 插件

    上面的三个配置子工程够可以重写,重写之后以子工程为准。

    Maven仓库

    Maven仓库分为:

    • 本地仓库(Maven所需的构件都是直接从本地仓库获取的,若本地仓库没有,会从远程仓库下载至本地仓库后再使用。默认位置是%USER_HOME%/.m2/repository,在%M2_HOME%/conf/setting.xml配置文件中可修改)
    • 中央仓库(Maven 社区提供的仓库)
    • 远程仓库(中央仓库、阿里镜像、企业私服等)

    Maven项目中可以修改仓库位置共有一下几处:

    • 中央仓库,默认的仓库
    • 镜像仓库,settings.xml中的settings.mirrors.mirror
    • 全局profile仓库,settings.xml中的settings.profiles.profile.repositories.repository
    • 项目仓库,pom.xml中的project.repositories.repository
    • 项目profile仓库,pom.xml中的project.profiles.profile.repositories.repository
    • 本地仓库

    若所有配置都存在,依赖的搜索顺序就会变得异常复杂,详见这里介绍。结论如下:

    • 只要本地仓库中包含依赖,无论怎么配置,都会优先使用local本地仓库中的jar
    • local_repo>settings_profile_repo>pom_profile_repo>pom_repositories>settings_mirror>central

    Maven Profiles

    Maven构建配置文件用于修改构建过程,可以被多种方式激活。

    settings.xml中提供的配置文件旨在提供本地计算机特定的路径和存储库位置,以允许构建在本地环境中工作。对于settings.xml中定义的配置文件,您只能指定仓库位置,插件仓库位置和自由格式属性,以用作POM中插件的配置变量。

    pom.xml中也可以指定profiles和activeProfiles来进行差异化构建。

    Nexus私服的搭建

    私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件,参见这里

    下载

    下载地址点我,一种是包含jetty容器的bundle包,另一种是不包含容器的war包,按需下载即可。

    安装

    • Windows安装见这里(3.0以下版本)

      • 3.0及以上版本免安装、免配置,见这里
      • 在cmd中从C盘到D盘不使用cd命令符,直接输入D:即可。
    • Linux安装方式如下,yum安装点我

      • 解压tar -zxvf nexus-2.14.5-02-bundle.tar.gz
      • 在环境变量中设置启动用户 vim /etc/profile,不建议使用root用户,如果使用其他用户需要增加相应权限export RUN_AS_USER=root
      • 配置启动参数 vim ${nexusBase}/conf/nexus.properties,默认端口8081
      • 启动与停止 ${nexusBase}/bin/nexus start/stop,若注册为服务
      • 登录页面 http://{ip}:port/nexus,用户名admin,密码admin123

    仓库说明

    • 3rd party:第三方仓库
    • Apache Snapshots:Apache快照仓库
    • Central :Maven中央仓库,一般要修改该仓库的Remote Storage Location的值为国内镜像地址
    • Releases:私有发布版本仓库
    • Snapshots:私有快照版本仓库

    指向私服

    • pom.xml中的project.repositories.repository
    • settings.xml中的settings.mirrors.mirror

    若指向私服后,依赖无法找到,可能是因为这个原因

    发布项目至私服

    • pom.xml中使用<distributionManagement>进行配置
    • settings.xml中配置<server>认证信息

    详情参见这里

    相关文章

      网友评论

          本文标题:Maven使用及Nexus私服的搭建

          本文链接:https://www.haomeiwen.com/subject/fswdzqtx.html