gradle多模块打jar,上传本地仓库,并给本地其他项目使用_gradle安装jar到本地仓库_卡诺来了的博客-程序员宅基地

技术标签: gradle  多模块  

1、前言

本篇主要讲述:gradle多模块打jar包,上传本地仓库,并交由本地其他项目使用

2、环境准备

  • 操作系统: mac os
  • gradle版本:4.1.0
  • 开发软件:idea

注:gradle版本不同,引入依赖方式可能不同,如果你发现本地导包是OK的,但是打包就报错,可以看看是不是gradle版本所引起的问题

3、多模块gradle文档

gradle多环境讲解,官方文档】,官方文档描述了多模块配置中的几个闭包的常规使用
allprojects{}, subprojects{}。前者配置应用包括root模块在内的所有模块,后者只应用子模块,详细的使用规则进入官方文档详细了解

4、项目实战

项目1结构

|──root-project-one             项目1名称
    ├── common-project          基础子项目 
    │   └── build.gradle        基础子项目配置文件
    ├── example-project         依赖common项目的示例项目
    │   └── build.gradle        依赖common项目的示例项目的配置文件
    ├── build.gradle            项目1的配置文件

项目2结构

|──root-project-two           项目2名称  
    ├── build.gradle          项目2的配置文件(需要引用项目1中的example-project)

各个项目的配置文件(此处只列举主要配置)

root-project-one/build.gradle

//所有子项目共享配置
subprojects {
    apply plugin: 'maven'
    // 获取本地仓库路径
    def localRepositoryPath = 'file://' + new File(System.getProperty('user.home'), '.m2/repository').absolutePath
    //打包至本地仓库配置
    uploadArchives {
        repositories {
        //mavenDeployer 需要依赖 apply plugin: 'maven'
            mavenDeployer   { 
                repository(url: localRepositoryPath)
                pom.project {
                    name = project.name        // 当前项目名称
                    version = project.version   //当前项目版本  0.0.1
                    groupId = project.group     //  当前项目组  com.xxx
                }
            }
        }
    }
}

common-project/build.gradle

//jar SKIPPED 问题,添加如下配置
jar.enabled=true    //(不设置可能会无法打jar)

example-project/build.gradle

dependencies {
    //依赖 common-project
    compile project(':common-project')
}
//jar SKIPPED 问题,添加如下配置
jar.enabled=true

上述配置完毕后刷新gradle配置,进入每个子模块中打开命令行执行如下命令进行打包

gradle -q uploadArchives

或者打开右侧的gradle面板,到模块下的task>upload>uploadArchives,点击执行即可生成相关jar

本地项目引用jar
root-project-two /build.gradle

repositories {
    //优先查找本地maven库,性能最好
    mavenLocal() //注:引用本地jar包时,必须加上本地maven库
    maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
}
dependencies {
    //依赖本地jar
    compile('com.xxx:example-project:0.0.1')
}

5、总结

  • gradle版本可以通过修改项目下gradle>wrapper>gradle-wrapper.properties文件的distributionUrl对应地址的版本来修改,修改版本后需要刷新gradle
  • 当多模块相互依赖,打包给本地其他项目使用的时候,相互依赖的模块建议都打jar包上传本地仓库
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_16828223/article/details/99816644

智能推荐

大数据分析师培训出来就业前景怎么样?数据分析有没有发展前景?_科多兽兽的博客-程序员宅基地

我们正处于互联网高速发展的时代,互联网上每天都会产生大量信息,然而这信息和数据其实都是非常有价值的,而传统的处理数据信息的方式已经逐渐不能满足我们了,进而“大数据”技术这个概念随之出现。大数据是眼下非常时髦的热词,同时也催生出了一些与大数据处理相关的职业,通过对数据的挖掘分析来影响企业的商业决策。随着大数据在国内的发展,大数据相关人才却出现了供不应求的状况,大数据分析师更是被媒体称为“未来最具发展...

回溯法的解题步骤与例子解析_若明天不见的博客-程序员宅基地

回溯法有“通用解题法”之称。用它可以系统地搜索问题的所有解。回溯法是一个既带有系统性又带有跳跃性的搜索算法。 在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点出发深度探索解空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去,如果该结点不包含问题的解,则逐层向其祖先结点回溯。(其实回溯法就是对隐式图的深度优先搜索算法)。若

HDU Palindrome subsequence(区间DP)_weixin_30781631的博客-程序员宅基地

Palindrome subsequenceTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65535 K (Java/Others) Total Submission(s): 2836 Accepted Submission(s): 1160Problem Description I...

剑指Offer39--面试题、数字在排序数组中出现的次数_剑指offer39 c语言 排序_面朝大海zyp的博客-程序员宅基地

剑指Offer39--数字在排序数组中出现的次数暴力搜索输出不是这个数的个数,再相减统计一个数字在排序数组中出现的次数。暴力搜索public class Solution { public int GetNumberOfK(int [] array , int k) { int count=0; for(int i=0; i<array.length; i++){ if(array[i] == k){ co_剑指offer39 c语言 排序

android热更新和热修复使用,你有过迷茫吗?小白也能看明白_m0_56037919的博客-程序员宅基地

导语Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的。只能通过一点点的学习和积累把这块的知识串联积累起来。音视频的开发,往往是比较难的,而这个比较难的技术就是NDK里面的技术。音视频/高清大图片/人工智能/直播/抖音等等这年与用户最紧密,与我们生活最相关的技术一直都在寻找最终的技术落地平台,以前是windows系统,而现在则是移动系统了,移动系统中又是以Android占比绝大部分为前提,所以AndroidNDK技术已经是我们必备技能了。要学习好NDK,其_android热更新和热修复使用

c语言宏替换作用,C语言中,宏替换的替换规则_姜小白71的博客-程序员宅基地

匿名用户1级2011-10-25 回答简单来说:宏定义又称为宏代换、宏替换,简称“宏”。是C提供的三种预处理功能的其中一种。复杂的请看下面,讲的很全。下面的带参宏定义,多行宏定义,在Linux内核源码中很多。另外sizeof也是一个宏定义。宏定义宏定义是C提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译1. 不带参数的宏定义:宏定义又称为宏代换、宏替换,简称“宏”。格式..._宏定义作用域为其后的代码在定义之前的代码不会被替换对吗

随便推点

ICP与IP备案管理系统常见问题总结(FAQ)_weixin_30788731的博客-程序员宅基地

1、 什么是互联网信息服务? top↑ 用户可以通过独立的域名(www.miibeian.gov.cn)或独立的IP浏览公司在互联网上发布的信息。2、 什么是经营性的互联网信息服务? top↑ 经营性互联网信息服务:是指通过互联网向上网用户有偿提供信息或网页制作等服务的活动。见<互联网信息服务管理办法>国务院292号令。3、 从事经营性互...

记忆优化搜索(简单题)(洛谷P3183 [HAOI2016]食物链 )( P5635 【CSGRound1】天下第一 )_p5635 ,题解_昵称很长很长真是太好了的博客-程序员宅基地

昨天做了蓝桥杯的时候,发现自己对于记忆优化搜索甚是不熟悉,所以今天随便找了几个基础题做做,顺便写下两片题解,顺便用了一下devc++敲的代码,发现没有代码补全真的可以说是灰常难受了。。。洛谷P3183 [HAOI2016]食物链 :题目描述如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数。物种的名称为从1到n编号M条能量流动关系形如a..._p5635 ,题解

wordpress绑定多个域名js跨域问题解决办法_weixin_33895016的博客-程序员宅基地

为什么80%的码农都做不了架构师?>>> ..._wordpress跨域

RTree源代码——C语言实现_r树的c语言实现_车斗的博客-程序员宅基地

RTree源代码——C语言实现cheungmine一、什么是RTree“R树是B树向多维空间发展的另一种形式,它将空间对象按范围划分,每个结点都对应一个区域和一个磁盘页,非叶结点的磁盘页中存储其所有子结点的区域范围,非叶结点的所有子结点的区域都落在它的区域范围之内;叶结点的磁盘页中存储其区域范围之内的所有空间对象的外接矩形。每个结点所能拥有的子结点数目有上、下限,下限保证对磁盘空间的有_r树的c语言实现

Win7使用teredo连接IPv6的方法_teredo位probe模式_盒子_Case的博客-程序员宅基地

(1) 在 ” 开始 ”->” 运行 ” 中输入 cmd 打开 Windows 命令行。在命令行中输入 ipconfig /all ,会出现若干网络配置信息,找到 Tunnel adpter (隧道适配器) Teredo Tunneling Pseudo-Interface , 查看它是否有正确的 IPv6 地址 ( 以 2001:0 为前缀的 ipv6 地址 ),若有说明正确;(2) 在 ”_teredo位probe模式

网络面试题:TCP和UDP的区别及应用场景_tcp udp双工性_我是方小磊的博客-程序员宅基地

TCP和UDP的区别1.TCP的特点TCP是面向连接的可靠性传输协议。面向连接:需要进行三次握手进行连接,四次挥手断开连接可靠性:TCP通过快速重传机制,同时有自身的流量控制和拥塞控制设计,因此数据的传输可靠性较高。TCP是面向字节流的传输协议。TCP是面向面向字节流,虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无结构的字节流。TCP有一个缓冲,当应用程序传送的数据块太长,TCP就可以把它划分短一些再传送。TCP传输效率低,传输速度慢 _tcp udp双工性

推荐文章

热门文章

相关标签