利用Nexus搭建私服(Maven仓库)

版权声明:本文为博主原创文章,转载希望能注明出处,感谢。 https://blog.csdn.net/u010126792/article/details/82757907

      开发过程中利用maven搭建仓库可以很方便的解决复杂的依赖问题,Android开发中最常用的库格式为aar,jar,这些库都可以从 google(), jcenter()还有以前默认的 mavenCentral()仓库中获取,只需要简单的引用就可以使用很方便,这些成为maven的远程仓库。

      有时公司内部或者部门内部会产出很多便捷的库,一方面想让不同部门的使用,一方面又想对外保持库的独立性,这时一个简单的方法就是搭建私服仓库(局域网内搭建私服),常用工具为Nexus(https://www.sonatype.com/download-oss-sonatype),可以下载免费的OSS版本,基本功能已够搭建简单的仓库。其他搭建方式还包括Apache基金会的 Archiva,JFrog 的 Artifactory ,Sonatypec的 Nexus

1 搭建私服

      nexus-3.13.0-01-win64,下载之后解压,内部两个文件夹,进入D:\nexus-3.13.0-01-win64\nexus-3.13.0-01\bin,在ect文件夹和bin目录下的nexus.vmoptions可以对参数进行配置,具体需要后续研究,这里只讲解快速搭建。Nexus3和nexus2进行了较大改变,但很多功能也被隐藏了,估计是和专业版区分吧,这里不用太关心。把maven也安装到电脑上,可以配合maven命令更好的管理(jdk想来大家电脑上都有)。

进入D:\nexus-3.13.0-01-win64\nexus-3.13.0-01\bin   找到nexus.exe  运行nexus.exe/run

运行成功:

访问:localhost:8081

默认登录用户名,密码:admin admin123

这里重点讨论maven-release,maven-snapshots两种仓库。

区别:

release 是正式环境中使用的仓库,仓库不能重复上传同一版本号,版本不能覆盖,只能迭代保证了每个版本的可用性。

snapshot 为开发仓库,仓库可删除版本,允许版本覆盖。上传相同版本的仓库会被覆盖,利用时间戳进行区分。

2 上传aar到仓库

要上传的module根目录下新建gradle文件,引入maven和maven-public插件:

apply plugin: 'maven'
apply plugin: 'maven-publish'

def isReleaseBuild() {
    return VERSION_NAME.toUpperCase().contains("SNAPSHOT") == false
}

//从配置文件中获得上传的仓库地址
def getRepositoryUrl() {
    return isReleaseBuild() ? rootProject.RELEASE_REPOSITORY_URL : rootProject.SNAPSHOT_REPOSITORY_URL
}

//生成source.jar
task webSourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.sourceFiles
}

//生成docs文档
task androidJavadocs(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

//生成javadoc.jar文件
task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
    classifier = 'javadoc'
    from androidJavadocs.destinationDir
}

//解决 JavaDoc 中文注释生成失败的问题
tasks.withType(Javadoc) {
    options.addStringOption('Xdoclint:none', '-quiet')
    options.addStringOption('encoding', 'UTF-8')
    options.addStringOption('charSet', 'UTF-8')
}

//生成相关配置文件任务
artifacts {
    archives webSourcesJar
    //archives androidJavadocsJar
}

//上传
uploadArchives {
    repositories {
        mavenDeployer {

            pom.project {
                packaging = 'aar'
                groupId = GROUP
                artifactId = POM_ARTIFACT_ID
                version = VERSION_NAME
            }

            repository(url: getRepositoryUrl()) {
                authentication(userName: rootProject.USERNAME, password: rootProject.PASSWORD)
            }
                 }
    }
}

仓库地址获取:

上传库的Task:

pom.project {
    packaging = 'aar'
    groupId = GROUP
    artifactId = POM_ARTIFACT_ID
    version = VERSION_NAME
}

groupId ,artifactId,version 如果对应的值分别为:

groupId = GROUP=com.simple.wb

artifactId = POM_ARTIFACT_ID=wb

Version = VERSION_NAME=1.0.0

其中:GROUP,POM_ARTIFACT_ID,VERSION_NAME等可以定义在gradle.properties,在gradle脚本中可以直接取值。

则引用方式为: implementation 'com.simple.wb:wb:1.0.0'

需要在项目根gradle中添加私服仓库地址。

3简单介绍nexus的权限机制,基于3.x

Role (角色)相当于权限组,定义Users(用户)可以赋予Role(一个或多个)就具有了相应权限。

猜你喜欢

转载自blog.csdn.net/u010126792/article/details/82757907