美文网首页
[Java学习笔记]maven发布子模块到私服

[Java学习笔记]maven发布子模块到私服

作者: Loamen | 来源:发表于2020-04-19 13:15 被阅读0次

在IDEA中有多个子模块,经常会出现其他项目需要引用到该子模块。这个时候往往需要将子模块发布到私有仓库。如果直接在子模块上maven deploy会出现无法正常引用的问题(如:Dependencies出现波浪线,无法下载jar包导致本地maven repository中没有jar包等问题)。

目录层级

在项目中可能会用到子模块sub-module或者子子模块sub-sub-module,这里举一个子子模块的例子。
假如项目AProject层级结构如下,而子子模块AProject-a-api需要部署到maven私服给项目B使用。子模块依层级向上依赖父级pom。

|-AProject(root)
|--- AProject-a
|         |-- AProject-a-api    #需要deployed给项目B使用
|         |-- AProject-a-server
|---AProject-b

问题

如果直接在AProject-a-api目录执行mvn deploy会无法使用,因为AProject-a-api依赖了Parent父级AProject-a的pom,而AProject-a又依赖了根级AProject的pom。直接将a-api部署到私服时,会因为找不到Parent pom无法打包或者打包后无法正常使用。

解决方法

综上所述,只需要将父级pom一起发布就能解决问题了。那么在parentpom下执行mvn deploy, 这样就会自动将parent pomsub-module以及sub-sub-module都发布到仓库。

1.在根目录AProject pom中添加distributionManagement

<distributionManagement>
    <repository>
      <id>maven-releases</id>
      <name>Releases</name>
      <url>http://www.loamen.com:8081/repository/maven-releases</url>
    </repository>
    <snapshotRepository>
      <id>maven-snapshots</id>
      <name>Snapshot</name>
      <url>http://www.loamen.com:8081/repository/maven-snapshots</url>
    </snapshotRepository>
</distributionManagement>

此处的idmavensetting.xml配置中的server id要一一对应,url也要对应。

<!-- setting.xml远程仓库配置-->
  <servers>
    <server>
      <id>maven-snapshots</id> // 快照仓库 ID 
      <username>admin</username>
      <password>admin1234</password>
    </server>
    <server>
      <id>maven-releases</id> // 发布仓库 ID 
      <username>admin</username>
      <password>admin1234</password>
    </server>
  </servers>
  
 <profiles>
    <profile>
        <id>dev</id>
        <repositories>
            <repository>
                <id>maven-snapshots</id>
                <name>maven-snapshots</name>
                <url>http://www.loamen.com:8081/repository/maven-snapshots/</url>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>
            <repository>
                <id>maven-releases</id>
                <name>maven-releases</name>
                <url>http://www.loamen.com:8081/repository/maven-releases/</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
            </repository>
        </repositories>
    </profile>
</profiles>

2.忽略发布AProject-bAProject-a-server

因为不需要发布子模块AProject-b和子子模块AProject-a-server,所以在这两个模块properties设置中忽略发布。

<!--AProject-b子项目pom中修改设置-->
<properties>
        <java.version>1.8</java.version>
        <maven.deploy.skip>true</maven.deploy.skip> #AProject-b添加跳过deploye设置
    </properties>
<!--AProject-a-server子子项目中pom中修改设置-->
<properties>
        <java.version>1.8</java.version>
        <maven.deploy.skip>true</maven.deploy.skip> #AProject-a-server添加跳过deploye设置
    </properties>

3.发布AProject-a-api模块

切换到AProject根目录,执行如下操作发布AProject-a-api子子模块。
命令:mvn deploy -pl 子模块 -am,这里先clean一下。

AProject> mvn clean deploy -pl AProject-a/AProject-a-api -am

看到如下消息即是发布成功了,然后到项目B中就可以从maven私服依赖引用了。

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  9.292 s
[INFO] Finished at: 2020-04-19T12:30:59+08:00
[INFO] ------------------------------------------------------------------------

mvn命令参数参考:

-am --also-make 同时构建所列模块的依赖模块;
-amd -also-make-dependents 同时构建依赖于所列模块的模块;
-pl --projects <arg> 构建制定的模块,模块间用逗号分隔;
-rf -resume-from <arg> 从指定的模块恢复反应堆。

相关文章

  • [Java学习笔记]maven发布子模块到私服

    在IDEA中有多个子模块,经常会出现其他项目需要引用到该子模块。这个时候往往需要将子模块发布到私有仓库。如果直接在...

  • maven私服

    1、配置本地maven settings.xml 使用私服 2、发布jar到私服配置本地maven setting...

  • 2019-12-11

    gradle 发布jar或者aar到maven私服时pom文件缺少依赖 gradle使用maven publish...

  • Maven生成jar文件并发布到私服

    Maven生成jar文件并发布到私服 前提:确保本地已经安装maven,并且配置好maven环境 下面以fastd...

  • Maven(5)Nexus

    前言 Maven是Java项目管理的利器,使用私服来管理Maven仓库是Maven使用的一条最佳实践。私服是内网的...

  • 二、Maven分模块开发及私服介绍

    Maven分模块开发&私服 一、Maven的项目开发(整合SSH框架练习) 1.1 Maven - pom.xml...

  • Maven发布源代码到私服

    配置发布目标远程仓库 配置发布源代码插件 执行发布命令

  • 2020-03-12 关于api更新

    正常的maven deploy到远端的私服 然后这个就是 直接用 JCI 就可以 ,组件,发布release,不...

  • Maven

    1.安装maven 2.编译测试 3.maven使用阿里云 4.maven使用私服 5.上线java程序

  • Maven私服搭建

    什么是maven私服? 工程中如何使用? 如何接入maven私服? 了解maven私服 分为本地和远程 远程包括:...

网友评论

      本文标题:[Java学习笔记]maven发布子模块到私服

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