IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 编译Library至本地maven仓库,自动部署、分模块开发 -> 正文阅读

[移动开发]编译Library至本地maven仓库,自动部署、分模块开发

本文基于Android Studio,借助Gradle插件 —— Maven Publish,实现在构建完安卓或Java库之后,自动将之部署至maven仓库,使其成为一个公共模块,供其他项目引用。

首先了解一下其他多模块开发方法。

  • 第一种:在setting.gradle中定义子模块然后 api Project(':...')),直接引用 。
  • 第二种,部署至远程服务器,如 jitpack.io(傻瓜式操作,还支持gitee)

第一种方法适合小库,优点是改动后可一键构建运行,缺点是不适合维护较大的公共库,易于拖慢整体编译速度并造成分支混乱。

第二种方法的优点是可以给别人用,但是远程构建比较缓慢,不是增量编译,不适合开发时使用。

两种方法各有优缺,于是我找到了第三种几乎两全其美的方案:上传库至本地maven缓存。使用gradle的脚本或maven的pom.xml时,依赖项一般会下载到c:/user/admin/.m2/,我们在开发的过程中可以先将库上传到这个地方,对外发布时再上传至远程仓库。

具体做法很简单,在 Library 的 build.gradle 中写上一段话即可:

apply plugin: 'maven-publish'
publishing {
    publications {
        maven(MavenPublication) {
            from components.java
            groupId "org.appxmod.metaline"
            artifactId "Metaline"
            version "1.0.0"
        }
    }
}
build.finalizedBy publishToMavenLocal

分段解读一下,第一段引入插件maven-publish,第二段publishing {... 定义模块 的相关属性。第二段配置成功后,插件会为我们生成四个gradle任务(task),可以在Android Studio的Gradle面板(默认停靠在右侧顶部)中找到并双击运行。其中一个任务的名字是 publishToMavenLocal,也就是上传编译好的库至 mavenLocal 了!


第二段里面再分解一下。首先from components.java是固定写法,对于纯Java库有效,上传jar文件,并根据其依赖项生成pom文件。用于安卓库可能会报错,还说“Java不是个东西”:

Could not get unknown property java for SoftwareComponentInternal

只好舍弃from components.java,强制指定构建出来的aar文件,比如:artifact "build\\outputs\\aar\\glide-debug.aar"

此时上传的是aar文件,一旁的pom文件中却没有任何依赖库,可能需要自行引用。不知标准做法是不是也这样,Maven Publish 的官方文档太长没有看,希望英语好的同学可以取经一下,然后为我等解惑~

其次groupId是包名,artifactId 是库名,再加上 version 版本号就差不多啦。其他项目引用的时候,先在最外层的build.grale中添加mavenLocal():

buildscript {
    repositories {
        mavenLocal()
        ……
}
allprojects {
    repositories {
        mavenLocal()
         ……
}

这样就可以像引用远程依赖一样引用本地库了!写法是 api groupId:artifactId:version

以我的元线模块为例,引用起来是这个样子的:

Gradle

buidl.gralde,dependency:

    compileOnly libs_metaline
    annotationProcessor libs_metaline
    
gradle.properties:
libs_metaline=org.appxmod.metaline:Metaline:1.0.0

Maven

       <dependency>
            <groupId>org.appxmod.metaline</groupId>
            <artifactId>Metaline</artifactId>
            <version>1.0.0</version>
            <scope>provided</scope>
        </dependency>

(因为是编译期的注解处理器,所以用compileOnly 、annotationProcessor 、provided方式引入)


第三段build.finalizedBy publishToMavenLocal,含义是在build任务运行完成后,接着运行publishToMavenLocal任务,也就是编译后自动部署。需要注意的是,编译失败可能也会上传。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 22:51:12  更:2022-04-07 22:51:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 21:40:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码