美文网首页
Linux下Nexus 3私服配置及gradle配置使用

Linux下Nexus 3私服配置及gradle配置使用

作者: kevinsEegets | 来源:发表于2020-07-17 16:54 被阅读0次

    参考战斗名族大神的文章
    https://habr.com/ru/post/416665/

    1、要使用nexus服务需要安装jdk

    注:我这里用的是zsh,配置使用.zshrc

    #解压
    rpm -ivh jdk-8u221-linux-x64.rpm
    #打开环境变量配置
    vim ~/.zshrc
    #配置环境变量
    export JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
    #保存配置
    source ~/.zshrc
    #验证jdk是否安装成功,执行以下命令
    java -version
    
    

    Nexus安装

    wget https://download.sonatype.com/nexus/3/latest-unix.tar.gz
    
    tar -zxvf nexus-3.18.1-01-unix.tar.gz
    #解压后又2个目录
        #nexus-3.18.1-01:包含了 Nexus 运行所需要的文件。是 Nexus 运行必须的
        #sonatype-work:包含了 Nexus 生成的配置文件、日志文件、仓库文件等。当我们需要备份 Nexus 的时候默认备份此目录即可
    
    #配置环境变量
    vim /etc/profile
    export NEXUS_HOME=/usr/local/nexus/nexus-3.18.1
    export PATH=$PATH:$NEXUS_HOME/bin
    
    source /etc/profile
    
    #修改启动用户
    vim /usr/local/nexus/nexus-3.18.1/bin/nexus.rc
    #run_as_user=""         #内容就这一行,放开注释,填写用户即可
    
    #修改端口
    vim /usr/local/nexus/nexus-3.18.1/etc/nexus-default.properties  #默认是8081
    
    #最后启动nexus
    cd /usr/local/nexus/nexus-3.18.1/bin
    ./nexus start
    ./nexus status
    
    #访问http://ip:8081,登陆用户admin 密码存放在:/usr/local/nexus/sonatype-work/nexus3/admin.password 目录
    
    #开机自启动
    vim /etc/rc.d/rc.local
    
    /usr/local/nexus/nexus-3.18.1/bin/nexus start   #添加这一行内容
    
    chmod 755 /etc/rc.d/rc.local
    

    使用 ./nexus start启动,如果看到如下界面,证明我们配置成功了

    WeChat Image_20200716154951.png

    我们现在想增加我们自己的私有仓库,如下图操作就可以


    WeChat Image_20200716155158.png

    点击Create repository 选择maven2 (hosted)托管模式

    WeChat Image_20200716160201.png
    配置名称以及选择发布版本为ReleasesnapShot
    如下是我配置的测试私服,如图
    WeChat Image_20200717161257.png

    到这里我们的私有maven库就配置完成了!!!

    接下来我们使用Gradle配置私有maven库

    我们使用两种方式配置(1:maven方式 ,2:maven-publish方式)

    1:用maven方式配置

    首先我们创建一个测试项目,并创建一个libaray


    WeChat Image_20200717161502.png

    在我们项目的根目录的build.gradle中配置刚刚建立的仓库

    // Top-level build file where you can add configuration options common to all sub-projects/modules.
    buildscript {
        ext.kotlin_version = "1.3.72"
        repositories {
         ...
        }
        dependencies {
           ...
        }
    }
    
    allprojects {
        repositories {
            maven { url 'http://172.17.71.184:8081/repository/testRepRelease/'}
        }
    }
    

    然后在gradle.properties文件中配置我们的gradle(此处配置信息放在local.properties文件中更好,因为该文件是本地文件,不上传至gitlab上)

    
    #Maven仓库的URL
    MAVEN_REPO_RELEASE_URL=http://172.17.71.184:8081/repository/testRepRelease/
    MAVEN_REPO_SNAPSHOT_URL=http://172.17.71.184:8081/repository/testRepSnapshot/
    
    ##对应maven的GroupId的值
    #GROUP = com.eegets
    
    #登录nexus ossde的用户名
    NEXUS_USERNAME=admin
    
    #登录nexus oss的密码
    NEXUS_PASSWORD=admin123
    
    # groupid
    GROUP_ID = com.eegets
    
    # type
    TYPE = aar
    
    # description
    DESCRIPTION = This is Toast lib
    
    

    再次配置我们libraray下build.gradle文件

    apply plugin: 'com.android.library'
    apply plugin: 'kotlin-android'
    apply plugin: 'kotlin-android-extensions'
    
    //maven插件(1)
    apply plugin: 'maven'
    
    android {
      ...
    }
    
    dependencies {
      ...
    }
    
    //maven输出路径(2)
    uploadArchives {
    //    configuration = configurations.archives
        repositories {
            mavenDeployer {
                //snapShot输出地址, MAVEN_REPO_RELEASE_URL地址在 gradle.properties文件中配置
                snapshotRepository(url: MAVEN_REPO_SNAPSHOT_URL) {
                    authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
                }
                //release输出地址, MAVEN_REPO_RELEASE_URL地址在 gradle.properties文件中配置
                repository(url: MAVEN_REPO_RELEASE_URL) {
                    authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
                }
                //maven信息
                pom.project {
                    // 如果要输出release版本,version为X.X.X(例如:version '1.0.4'),
                    // 如果输出snapshot版本,则命名必须为 'XXX-SNAPSHOT',也就是必须要为 `-SNAPSHOT`(例如:version '1.0.4-SNAPSHOT')
                    version '1.0.4-SNAPSHOT'
                    artifactId 'toastutils-lib'
                    groupId GROUP_ID
    //                packaging TYPE
    //                description DESCRIPTION
                }
            }
        }
    }
    

    接下来Sync Now一下,如果没出错的话证明我们的配置是成功的,接下来我们按照下图点击上传即可

    WeChat Image_20200717162658.png

    然后回到Nexus界面,如出现下图中的配置,证明我们上传成功了,如下图:


    WeChat Image_20200717163238.png

    2:用maven.publish方式配置

    我们单独配置一个名称为publisher.gradle文件,如下:

    apply plugin: 'maven-publish'
    
    ext {
        // 仓库地址
        repositoryReleaseUrl = "http://10.185.240.240:8081/repository/android/"
        repositorySnapshotUrl = "http://10.185.240.240:8081/repository/android_snapshot/"
        // 用户名密码
        contributorUserName = "contributor_droid"
        contributorPassword = project.property("maven_password")
        // 库依赖信息
        libraryGroupId = "com.secoo.cooplayer"
        libraryArtifact = "cooplayer"
        libraryVersion = "0.0.7-SNAPSHOT"
    }
    
    // 生成源码
    task generateSourcesJar(type: Jar) {
        from android.sourceSets.main.java.srcDirs
        classifier 'sources'
    }
    
    publishing {
        repositories {
            // 定义一个 maven 仓库
            maven {
                // 可以有且仅有一个仓库不指定 name 属性,会隐式设置为 Maven
                // 仓库用户名密码
                credentials {
                    username contributorUserName
                    password contributorPassword
                }
                // 根据 libraryVersion后缀来判断仓库地址
                url libraryVersion.endsWith("SNAPSHOT") ? repositorySnapshotUrl : repositoryReleaseUrl
            }
        }
    
        publications {
            // 定义一个名为 AndroidLibrary 的发布
            AndroidLibrary(MavenPublication) {
                // 库依赖信息
                groupId libraryGroupId
                artifactId libraryArtifact
                version libraryVersion
                // 上传aar
                artifact "$buildDir/outputs/aar/${project.getName()}-release.aar"
                // 上传source
                artifact generateSourcesJar
                // 配置dependencies
                pom {
                    withXml {
                        def dependencies = asNode().appendNode("dependencies")
                        configurations.getByName("releaseCompileClasspath")
                                .getResolvedConfiguration()
                                .getFirstLevelModuleDependencies()
                                .each {
                                    def dependency = dependencies.appendNode("dependency")
                                    dependency.appendNode("groupId", it.moduleGroup)
                                    dependency.appendNode("artifactId", it.moduleName)
                                    dependency.appendNode("version", it.moduleVersion)
                                }
                    } // withXml
                } // pom
            } // AndroidLibrary
        } // publications
        // 生成上传aar包
        model {
            tasks.publishAndroidLibraryPublicationToMavenRepository {
                dependsOn project.tasks.assembleRelease
            }
        }
    } //publishing
    
    

    在我们使用的地方引入就可以

      
    apply from: "publisher.gradle"
    

    我们使用命令上传或图形化上传
    1:命令

    ./gradlew publishAndroidLibraryPublicationToMavenRepository -Dorg.gradle.internal.publish.checksums.insecure=true -Pmaven_password=密码
    

    2:图形化


    WeChat Image_20200717165030.png
    • 有一个注意点:当我们使用了远程仓库上传了相同版本依赖时,有时需要为缓存指定一个时效去检查远程仓库的依赖笨版本,Gradle提供了cacheChangingModulesFor(int, java.util.concurrent.TimeUnit) ,cacheDynamicVersionsFor(int, java.util.concurrent.TimeUnit)两个方法来设置缓存的时效
    configurations.all {
        //每隔24小时检查远程依赖是否存在更新
        resolutionStrategy.cacheChangingModulesFor 24, 'hours'
        //每隔10分钟..
        //resolutionStrategy.cacheChangingModulesFor 10, 'minutes'
        // 采用动态版本声明的依赖缓存10分钟
        resolutionStrategy.cacheDynamicVersionsFor 10*60, 'seconds'
    }
    
    dependencies {
        // 添加changing: true
        compile group: "group", name: "module", version: "1.1-SNAPSHOT", changing: true
        //简写方式
        //compile('group:module:1.1-SNAPSHOT') { changing = true }
    

    参考:
    https://blog.csdn.net/KingBoyWorld/article/details/78917855
    https://www.jianshu.com/p/6954613c13ef

    相关文章

      网友评论

          本文标题:Linux下Nexus 3私服配置及gradle配置使用

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