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_20200716155158.png
点击Create repository
选择maven2 (hosted)
托管模式
配置名称以及选择发布版本为
Release
或snapShot
如下是我配置的测试私服,如图
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
一下,如果没出错的话证明我们的配置是成功的,接下来我们按照下图点击上传即可
然后回到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