美文网首页Android备忘录
搭建Maven私有仓库

搭建Maven私有仓库

作者: wIsper | 来源:发表于2018-10-24 18:47 被阅读10次

    内部的项目并且需要多团队协作模块化开发的时候,自然会想到搭建自己的maven私有仓库,本文主要介绍如何搭建maven私服和如何在项目中添加依赖。

    Maven 的远程仓库分为中央仓库和私服仓库。中央仓库存放了世界各地用户上传的依赖包,比较出名的是 JCenter 和 Maven Central,开源的第三方依赖一般都会上传到这两个中央仓库,这样我们只用添加这两个中央仓库的链接地址,就可以下载各种我们需要的依赖了

    在公司内部,搭建一个 Maven 仓库,把公司内部不想开源的依赖包上传到私服仓库中,有更好保密性和安全性。
    顺便介绍一个阿里的maven仓库

    maven { url 'http://maven.aliyun.com/nexus/content/groups/public/'} 
    

    可以帮助你快速通过gradle build

    有三种比较流行的 Maven 仓库管理软件可以创建私服,Apache基金会的 Archiva,JFrog 的 Artifactory ,Sonatypec 的 Nexus

    使用Nexus搭建Maven私有仓库

    环境

    要求 Java 8 Runtime Environment或者以上

    查看java版本

    java -version
    

    下载运行Nexus

    官网 下载 https://www.sonatype.com/download-oss-sonatype
    根据你的操作系统选择下载,解压

    进入 nexus-3.14.0-04-mac/nexus-3.14.0-04/bin 目录,执行

    // Unix & OS X
    ./nexus run
    
    // Windows  
    nexus.exe /run
    

    控制台显示如下,表示成功启动服务

    Started Sonatype Nexus OSS
    

    打开浏览器,输入 http://localhost:8081/ 就可以看到管理界面

    默认的管理员账号密码为

    username:admin
    password:admin123
    

    至此,使用nexus搭建的maven私有仓库已经准备就绪,接下来是如何上传Library和如何添加依赖

    上传Library

    Library Moudle 的 gradle.properties 文件里配置上传参数

    # 上传的Library信息
    GROUP=com.group.moduleteam
    VERSION_NAME=1.0.0
    POM_ARTIFACT_ID=modulelibrary
    
    # 上传的目标仓库地址
    SNAPSHOT_REPOSITORY_URL=http://localhost:8081/repository/maven-snapshots/
    RELEASE_REPOSITORY_URL=http://localhost:8081/repository/maven-releases/
    
    # Nexus私服的用户名称和密码
    NEXUS_USERNAME=admin
    NEXUS_PASSWORD=admin123
    

    然后在Library Moudle 的gradle.properties文件里加上

    apply plugin: 'maven'
    
    def isReleaseBuild() {
        return VERSION_NAME.toUpperCase().contains("SNAPSHOT") == false
    }
    def getRepositoryUsername() {
        return hasProperty('NEXUS_USERNAME') ? NEXUS_USERNAME : ""
    }
    def getRepositoryPassword() {
        return hasProperty('NEXUS_PASSWORD') ? NEXUS_PASSWORD : ""
    }
    def getRepositoryUrl() {
        return isReleaseBuild() ? RELEASE_REPOSITORY_URL : SNAPSHOT_REPOSITORY_URL
    }
    afterEvaluate { project ->
        uploadArchives {
            repositories {
                mavenDeployer {
                    pom.groupId = GROUP
                    pom.artifactId = POM_ARTIFACT_ID
                    pom.version = VERSION_NAME
                    repository(url: getRepositoryUrl()) {
                        authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
                    }
                }
            }
        }
        task androidJavadocs(type: Javadoc) {
            source = android.sourceSets.main.java.srcDirs
            classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
        }
        task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
            classifier = 'javadoc'
            from androidJavadocs.destinationDir
        }
        task androidSourcesJar(type: Jar) {
            classifier = 'sources'
            from android.sourceSets.main.java.sourceFiles
        }
    
       //解决 JavaDoc 中文注释生成失败的问题
        tasks.withType(Javadoc) {
            options.addStringOption('Xdoclint:none', '-quiet')
            options.addStringOption('encoding', 'UTF-8')
            options.addStringOption('charSet', 'UTF-8')
        }
        artifacts {
            archives androidSourcesJar
            archives androidJavadocsJar
        }
    }
    
    

    也可以把以上 build.gradle中的配置,创建一个 gradle 文件,例如 upload_nexus.gradle中,然后在 build.gradle中引用upload_nexus.gradle

    apply from: 'upload_nexus.gradle'
    

    配置已经完成,打开Android Studio 中打开右侧的 Gradle 侧边栏,打开 这个module library,可以看到 uploadArchives,这就是刚才创建的上传 Task,点击即可完成上传

    如果 uploadArchives Task 执行成功,在 Nexus 仓库中可以看到上传的内容

    点击左侧导航栏
    Browse - maven-public
    就可以看到

    添加私有库依赖

    项目根路径的build.gradle

    buildscript {
        repositories {
            google()
            jcenter()
            maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
            maven { url 'http://localhost:8081/repository/maven-public/' }
        }
    }
    
    allprojects {
        repositories {
            google()
            jcenter()
            maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
            maven { url 'http://localhost:8081/repository/maven-public/' }
        }
    }
    
    

    然后,在需要引用该三方库的目标 Module 的 build.gradle 中添加此库的依赖

    dependencies {
        implementation 'com.group.moduleteam:modulelibrary:1.0.0'
    }
    

    就可以正常使用私有Library了

    补充一下清理gradle缓存的命令:

    // OS X
    ./gradlew build --refresh-dependencies
    
    // Windows  
    gradlew build --refresh-dependencies
    

    相关文章

      网友评论

        本文标题:搭建Maven私有仓库

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