第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Kotlin與Java混編項(xiàng)目的Nexus私有倉(cāng)庫(kù)持續(xù)交付與集成

標(biāo)簽:
Kotlin

关于 Android 开发结合 Nexus 仓库的使用已经有很多相关文章了,但大多是纯 Java 工程的应用。我使用 Kotlin 开发已有半年多了,愈发感觉 Kotlin 好用。现在新项目的开发中,95%以上的代码使用 Kotlin 编写,旧的项目也逐渐升级。随着项目规模的不断变大,模块越来越多,每次编译都十分耗时。而新项目使用旧有模块,需要手动拷贝,版本控制也是个问题。为了解决这个问题,我们搭建了私有 Nexus 仓库。相对稳定的模块直接通过私有仓库管理,在打包上传包含 Kotlin 的模块时,遇到了一些问题,这里记录下,大家有需要可以参考下。

搭建 Nexus 仓库

搭建 Nexus 仓库的文章相比有很多,官方也提供了详细的文档。但如果想快速搭建,建议使用 Docker,只需一行命令,当然前提是你已经安装了 Docker。在 Docker hub 搜索下


webp

Docker hub Nexus 搜索结果


显而易见 sonatype/nexus3 是首选

docker pull sonatype/nexus3

是的一个强大的私有库,只需等待这条命令执行完成就可以了。具体如何配 nexus 这里就不做详细介绍了,无论是 Google 还是百度都一大把。


webp

Nexus仓库截图

支持 Kotlin aar 打包,包括 java 文档打包。

要想支持 Kotlin 打包,需要使用 Kotlin 官方插件 org.jetbrains.dokka:dokka-android-gradle-plugin,目前最新版本是 0.9.17,虽然还没到1.0,暂时没有发现问题。

//工程的 build.gradledependencies {
    ...    classpath "org.jetbrains.dokka:dokka-android-gradle-plugin:0.9.17"
    ...
}repositories {
    ...
    maven {
        url "https://plugins.gradle.org/m2/"
    }
    ...
}
//库 Module 的 build.gradletask generateSourcesJar(type: Jar) {    group = 'jar'
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'}task javadoc(type: Javadoc) {    source = android.sourceSets.main.java.srcDirs    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}task dokkaJavadoc(type: org.jetbrains.dokka.gradle.DokkaTask) {
    outputFormat = "javadoc"
    outputDirectory = javadoc.destinationDir}task generateJavadoc(type: Jar, dependsOn: dokkaJavadoc) {    group = 'jar'
    classifier = 'javadoc'
    from javadoc.destinationDir}artifacts {    //在频繁打包交付测试时,可暂时注释掉文档打包,提高打包效率
    archives generateJavadoc

    archives generateSourcesJar
}//动态获取版本名称def POM_VERSION_NAME = getVersionName()

uploadArchives {    repositories {
        mavenDeployer {
            snapshotRepository(url: NEXUS_REPO_SNAPSHOT_URL) {
                authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
            }
            repository(url: NEXUS_REPO_RELEASE_URL) {
                authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
            }
            pom.project {
                name POM_NAME
                version POM_VERSION_NAME
                artifactId POM_ARTIFACTID
                groupId POM_GROUP_ID
                packaging POM_PACKAGING                description POM_DESCRIPTION
            }
        }
    }
}def getVersionCode() {    def versionFile = file('./version.properties')    if (versionFile.canRead()) {
        Properties properties = new Properties()
        properties.load(new FileInputStream(versionFile))        def versionCode = properties['VERSION_CODE'].toInteger()//读取version.properties文件存放的版本号。
        properties['VERSION_CODE'] = (++versionCode).toString()
        properties.store(versionFile.newWriter(), null)        return versionCode
    } else {        throw new Exception("无法读取version.properties文件!")
    }
}//频繁测试发布时配置自动追加 -SNAPSHOT 后缀def getVersionName() {    def versionFile = file('./version.properties')    if (versionFile.canRead()) {
        Properties properties = new Properties()
        properties.load(new FileInputStream(versionFile))        //这里可以根据 gradle.startParameter.taskNames 任务名称进行判断是打包快照版本还是正式版本
        return properties['VERSION_NAME'].toString() + "." + getVersionCode() + "-SNAPSHOT"
    } else {        throw new Exception("无法读取version.properties文件!")
    }
}

SNAPSHOT上传 版本号必须以SNAPSHOT结尾

通过上面的配置已经可以实现打包上传了。由于我的部分模块功能还处于开发阶段,就想着每次编译自动打包上传到Nexus私有仓库。显然这样频繁的上传不适用于release的仓库,应该上传至SNAPSHOT。可尝试了多种方法仍旧不能上传到SNAPSHOT,知道看到一个 官方例子
我尝试着将版本号追加SNAPSHOT后缀,然后就神奇的可以了。上面的库 Module 的 build.gradle 已经包含了这个设置。

持续打包,持续测试

原本以为这样就天高任鸟飞了,但实践时发现不是这样的。频繁发布时需要不停的修改打包以及集成的版本,真心累。Google了半天大部分的答案是做如下配置:

//在主 Module 的 build.gradle 配置configurations.all {    // check for updates every build
    resolutionStrategy{
        cacheDynamicVersionsFor 0, 'seconds'
    }
}

我做了上述配置还是不会自动更新。于是便另觅它法,自动升级库版本号,而主 Module 自动使用最新的版本。同样上面的库的 build.gradle 已经做了版本自增长逻辑,还需要在库 Module 根目录下增加一个 version.properties 文件,每次回追加一个自增长的数字(0.0.1 0.0.2 0.0.3 .... 0.0.n)。当做大的升级时,修改下 VERSION_NAME 并重置 VERSION_CODE=0 即可。

#Thu Jan 17 18:53:14 CST 2019VERSION_NAME=0.0
VERSION_CODE=0

集成私有库

要想使用私有的库,需要做如下配置:
配置私有的 Nexus 仓库地址,包括 release 仓库,snapshots 仓库。

//工程的 build.gradlemaven {
    url "http://<nexus server>:port/repository/xxxx-releases/"}
maven {
    url "http://<nexus server>:port/repository/xxxx-snapshots/"}

在应用打包的仓库时,如果想每次获取最新的库,需要设置一个动态的版本,下面的两种形式都可以:

//主 Module 的 build.gradleimplementation '<group id>:<name>:latest.integration'// implementation '<group id>:<name>:0.0.+-SNAPSHOT'



作者:Jepack
链接:https://www.jianshu.com/p/8aba5768a20b


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
JAVA開發(fā)工程師
手記
粉絲
205
獲贊與收藏
1010

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消