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

2020-07-17  本文已影响0人  kevinsEegets

参考战斗名族大神的文章
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
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

上一篇下一篇

猜你喜欢

热点阅读