Nexus Repository OSS 3.X 官网快捷下载这个可能会变动,下面两个应该不怎么变动;
Download Nexus Repository OSS 3.X
Download Nexus Repository OSS 2.X
官方教程 这样有解释 repository 、proxy、 group 3种类型的搭建方法;
我这里是在mac系统下操作的,其他系统也可以参考,Nexus Repository OSS 已经设计的挺简单的了,高级的反正我也没学会。
下载完成,解压,可以看到如下的目录结构;
1:nexus 可运行程序是启动,和关闭 nexus的脚本程序;
2:上面有两个properties文件是用来修改配置的,比如端口,主机ip等;
第一个文件上面注明了:不要让我们编辑,而是去编辑$data-dir/etc/nexus.properties 这个文件,应该是下面的properties文件;
运行nexus
mac 环境下:使用命令窗口,打开到nexus 所在目录,比如我这里的:
//运行试试,可以看到 nexus 只有这几个操作可以执行
➜ bin nexus
Usage: nexus {start|stop|run|run-redirect|status|restart|force-reload}
➜ ~ nexus start
Starting nexus
//到这里,nexus 就已经启动好了
如果你想每次启动nexus 更方便些(无需进入到nexus 所在目录去执行nexus命令),就需要配置下path;
我这里配置到的是 .zshrc 文件下(请参考有用部分NEXUS_ROOT,其他请忽略)
NEXUS_ROOT=/Users/xpath/nexus-3.15.2-01-mac/nexus-3.15.2-01/bin
PATH=$GROOVY_ROOT:$NDK_ROOT:$DART_ROOT/bin:$FLUTTER_ROOT/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools:$NEXUS_ROOT:$PATH:
======================上面是配置的内容======================
======================下面是执行的步骤======================
➜ ~ vim .zshrc
➜ ~ source .zshrc
➜ ~ nexus
Usage: /Users/xpath/nexus-3.15.2-01-mac/nexus-3.15.2-01/bin/nexus {start|stop|run|run-redirect|status|restart|force-reload}
➜ ~ nexus start
Starting nexus
➜ ~ nexus stop
Shutting down nexus
nexus is not running.
➜ ~ nexus start
Starting nexus
➜ ~ pwd
/Users/xpath
接下来,我们可以打开页面试试,看看部署在我们电脑上的nexus.
查看部署在本机的nexus
1:使用电脑浏览器打开 http://localhost:8081/ (参数的意义,前面properties文件有解释)
2:登录
默认登录账号:admin
默认登录密码:admin123
登录之后:就有设置选项了
创建自己的Repository
1:点击Create repository ;
2:选择要创建的类型;这里选择maven(hosted)
proxy:是远程仓库的代理。比如说在nexus中配置了一个central repository的proxy,当用户向这个proxy请求一个artifact,这个proxy就会先在本地查找,如果找不到的话,就会从远程仓库下载,然后返回给用户,相当于起到一个中转的作用;
Hosted:是宿主仓库,用户可以把自己的一些构件,deploy到hosted中,也可以手工上传构件到hosted里。比如说oracle的驱动程序,ojdbc6.jar,在central repository是获取不到的,就需要手工上传到hosted里;
Group:是仓库组,在maven里没有这个概念,是nexus特有的。目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不需要在pom中配置多个地址,只要统一配置group的地址就可以了右边那个Repository Path可以点击进去,看到仓库中artifact列表。不过要注意浏览器缓存。
到这里服务器部分的工作就已经完成了。接下来就是往这个仓库推东西了;
Android项目使用gradle-mvn-push
场景:我们需要对一个model提交到maven库;。
1:工程目录添加gradle-mvn-push.gradle文件;可以参考;
2:对应的子module apply gradle-mvn-push.gradle该文件。
apply from: "../gradle-mvn-push.gradle"
3:根据gradle-mvn-push.gradle 修改gradle.properties配置文件;
后面是文件的内容:
//gradle-mvn-push.gradle
apply plugin: 'maven'
apply plugin: 'signing'
def sonatypeRepositoryUrl
def isReleaseBuild() {
return VERSION_NAME.contains("SNAPSHOT") == false
}
def getReleaseRepositoryUrl() {
return hasProperty('nexusUrl') ? "${nexusUrl}/content/repositories/releases"
: "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
}
def getSnapshotRepositoryUrl() {
return hasProperty('nexusUrl') ? "${nexusUrl}/content/repositories/snapshots"
: "https://oss.sonatype.org/content/repositories/snapshots/"
}
if (isReleaseBuild()) {
println 'RELEASE BUILD'
sonatypeRepositoryUrl = "${nexusUrl}/content/repositories/releases"
} else {
println 'SNAPSHOT BUILD'
sonatypeRepositoryUrl = "${nexusUrl}/content/repositories/snapshots"
}
def getRepositoryUsername() {
return hasProperty('NEXUS_USERNAME') ? NEXUS_USERNAME : ""
}
def getRepositoryPassword() {
return hasProperty('NEXUS_PASSWORD') ? NEXUS_PASSWORD : ""
}
afterEvaluate { project ->
uploadArchives {
repositories {
mavenDeployer {
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
pom.artifactId = POM_ARTIFACT_ID
pom.version = VERSION_NAME
pom.groupId = GROUP
repository(url: sonatypeRepositoryUrl) {
authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
}
pom.project {
name POM_NAME
packaging POM_PACKAGING
description POM_DESCRIPTION
url POM_URL
licenses {
license {
name POM_LICENCE_NAME
url POM_LICENCE_URL
distribution POM_LICENCE_DIST
}
}
developers {
developer {
id POM_DEVELOPER_ID
name POM_DEVELOPER_NAME
}
}
}
}
}
}
signing {
required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") }
sign configurations.archives
}
if (project.hasProperty("android")) { // Android libraries
task sourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.srcDirs
}
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
} else { // Java libraries
task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
}
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives javadocJar
archives sourcesJar
}
}
VERSION_NAME=1.0.0
POM_ARTIFACT_ID=UI
nexusUrl=http://localhost:8081/repository/UI
POM_NAME=YOU_POM_NAME
POM_PACKAGING=aar
POM_DESCRIPTION=An android hybrid Library
POM_URL=https://pom.url
GROUP=com.youGroup.android
POM_LICENCE_NAME=xxxx Privicy License
POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt
POM_LICENCE_DIST=repo
POM_DEVELOPER_ID= developer id
POM_DEVELOPER_NAME = developer name
NEXUS_USERNAME=admin //这个和nexus登录账户一致
NEXUS_PASSWORD=admin123 //这个和nexus登录密码一致
设置好如上配置我们就可以推送我们代码了;
2种方式:
1:使用Android studio 自带的gradle 图形界面开启推送任务;
2:自己使用gradle 命令执行任务推送;
XXXDemo git:(master) ✗ gradlew :submodule name:uploadArchives
//推送成功之后的日志
Could not find metadata com.xxxx.android:webview/maven-metadata.xml in remote (http://localhost:8081/repository/UI/content/repositories/releases)
BUILD SUCCESSFUL in 1s
26 actionable tasks: 1 executed, 25 up-to-date
我们在回到nexus的图形界面
代码是已经上传成功了,但是具体存储在本地哪里呢?
1:默认会放在~/.m2/repository目录下
2 更改配置用户范围的本地仓库:(如下是摘录来的,默认还是改的好)
先在/.m2/目录下创建settings.xml文件,然后在~/.m2/settings.xml,设置localRepository元素的值为想要的仓库地址
你想要设置的路径
1.2 更改配置全局范围的本地仓库:
在M2_HOME/conf/settings.xml中更改配置,更改配置的方法同上
注:此时更改后,所有的用户都会受到影响,而且如果maven进行升级,那么所有的配置都会被清除,所以要提前复制和备份M2_HOME/conf/settings.xml文件;
故:一般情况下不推荐配置全局的settings.xml
使用私有库
buildscript {
repositories {
maven { url "http://localhost:8081/nexus/content/repositories/releases"}
//url "http://localhost:8081/nexus/ 基本固定,取决于服务器ip
//content/repositories/releases 取决于GroupID ,可以在选中要依赖的包查看;
}
...
}
allprojects {
repositories {
maven { url "http://localhost:8081/nexus/content/repositories/releases"}
}
}