windows下maven私服搭建与android studio使用
maven是什么
简单来说,maven就是一款依赖管理工具,我们用它来管理java项目的各种依赖。
maven私服又是什么
可以用一张图来大致描述maven的组织关系:
可以看到,maven私服只是maven体系结构中的一小部分,但是对于我们开发者来说却是非常重要。
maven私服的作用
- 节省外网带宽。因为maven私服是搭建在局域网,即使没有连接外网我们也能使用,减少运维成本。
- 加速构建过程。通常局域网的下载速度肯定是大于外网,所以能节约大量构建时间。
- 缓存第三方构件。我们可以将中央仓库中的一些依赖包部署在maven私服中,这样当我们需要引用第三方的依赖的时候就可以直接在私服上下载,而私服会帮我们缓存已经下载过的依赖。这样,当外网不可用的时候,我们依然可以使用三方依赖。
- 提高稳定性。毕竟别人的仓库肯定是不可控的,而自己的仓库是可控的。
- 降低中央仓库负荷。我们可以按组织或按部门去搭建自己的私服,这样就能降低中央仓库的负荷,提高稳定性。
maven私服如何搭建
废话了这么多,我们看下具体如何搭建自己的maven私服。
- 下载Nexus
Nexus Repository Manager OSS 3.x下载windows版本即可。 - 解压启动
找到解压目录,cmd进入,然输入nexus.exe /install执行。如果已经安装过可以输入nexus.exe /run 启动。
启动成功
当我们在浏览器输入:http://localhost:8081/就可以看到启动界面了
至此,我们的完成了安装和启动。 - 登录使用
点击右侧的sign in 进行登录,账号admin ,此时需注意nexus3.17后admin的密码已改为随机密码,登录框上面会提示你密码的保存位置,只要打开复制过来即可。登录后的页面:
- 创建maven仓库
这里我们选择hosted类型。(grou聚合仓库,是将多个仓库聚合到一个group,统一指定聚合仓库的仓库地址可以获取到同一group下的所有包。hosted宿主仓库,我们管理本地依赖的仓库。proxy 远程代理仓库,当用户向 proxy 类型仓库请求下载一个依赖构件时,就会先在自己的库里查找,如果找不到的话,就会从设置的远程仓库下载到自己的库里,然后返回给用户,缓存作用)
需要注意的是,我们平时开发一般都会创建两个仓库,一个是snapshot类型,一个是release类型,snapshot快照仓库用于保存开发过程中的不稳定版本,release正式仓库则是用来保存稳定的发行版本。其实我们可以直接使用系统创建好的仓库,这里我们直接使用group类型的maven-public仓库
它里面已经自动为我们包含了所需要的几个仓库。 - 上传到仓库
项目根目录的gradle添加代码
maven {
url 'http://localhost:8081/repository/maven-public/'
credentials {
username 'admin'
password 'admin123'
}
}
在gradle.properties中加入如下代码
NEXUS_REPOSITORY_URL_SNAPSHOT=http://localhost:8081/repository/maven-snapshots/
NEXUS_REPOSITORY_URL_RELEASE=http://localhost:8081/repository/maven-releases/
POM_GROUPID=com.zy.lib
POM_PACKAGING=aar
NEXUS_USERNAME=admin
NEXUS_PASSWORD=admin123
找到需要上传的库的gradle,添加代码如下
apply plugin: 'com.android.library'
apply plugin: 'maven'
def pomName = this.getName()
def pomVersion = '1.0.1-SNAPSHOT'//snapshot版本必须带上-SNAPSHOT
def pomArtifactId = 'lib_audio'
def pomDescription = 'the audio libray for all projects'
static def isReleaseBuild(def name) {
return name.toUpperCase().contains("SNAPSHOT") == false
}
def getRepositoryUrl(def name) {
return isReleaseBuild(name) ? NEXUS_REPOSITORY_URL_RELEASE : NEXUS_REPOSITORY_URL_SNAPSHOT
}
android {
compileSdkVersion this.rootProject.android.compileSdkVersion
defaultConfig {
minSdkVersion this.rootProject.android.minSdkVersion
targetSdkVersion this.rootProject.android.targetSdkVersion
versionCode this.rootProject.android.versionCode
versionName this.rootProject.android.versionName
multiDexEnabled this.rootProject.android.multiDexEnabled
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
}
uploadArchives{
repositories{
mavenDeployer{
repository(url:getRepositoryUrl(pomVersion)){
authentication(userName:NEXUS_USERNAME,
password:NEXUS_PASSWORD)
}
pom.project{
name pomName
version pomVersion
description pomDescription
artifactId pomArtifactId
groupId POM_GROUPID
packaging POM_PACKAGING
}
}
}
}
同步之后点击uploadArchives即可
此时,我们在maven仓库里就可以看到我们上传的jar包
- 引用
如果是release可以参照groupId:artifactId:version引用即可。
最后注意:如果发布的是snapshot版本号后面需要加上-SNAPSHOT。