前言
组件化或者造轮子的时候我们往往需要将library打包成aar提供使用,这样的好处是:使用方便,直接加载库地址即可、版本管理的时候减少其他开发者格式化代码引起冲突、避免“手贱”轻易去修改库中的代码。
一般个人的项目都是通过github、jcenter上,但企业基本都是在局域网或者自己的服务器上搭建私服进行管理。
Nexus搭建
1.环境:Mac系统
2.下载Nexus,解压,进入bin
执行
./nexus start
这样Nexus就启动了。没有进行修改过的话默认端口是8081,访问localhost:8081
默认账号admin, 默认密码:admin123
3.创建自己的仓库
在search–>maven–>设置中点点击
点击之后进入Repository目录下,在Repository页面点击Repositories进入Repositories目录下,
点击Create Repository,选择maven2(hosted)
填写名称,选择Snapshot,点击新建,即可新建我们定义的仓库
新建之后,在Browser即可查看结果:
将library打包AAR上传到Nexus maven私服上
1.在项目下的gradle.properties上定义上传Nexus的常量
NEXUS_REPOSITORY_URL=http://localhost:8081/repository/linxz_nexus_test_snapshot/
POM_GROUPID=com.linxz.android
POM_PACKAGING=aar
NEXUS_USERNAME=admin
NEXUS_PASSWORD=admin123
如下图:
NEXUS_REPOSITORY_URL为上传的路径,通过Nexus上的Browser,copy得到:
2.在项目根目录的build.gradle中配置aar上传的地址、用户名、密码
maven {
url 'http://localhost:8082/repository/linxz_nexus_test_snapshot/'
credentials{
username 'admin'
password 'admin123'
}
}
如下图:
3.在库中的build.gradle中配置打包的aar名称、版本号等信息
添加maven插件
apply plugin: 'maven'
定义aar版本名称、版本号、版本描述等信息
def pomName=this.getName()
def pomVersion = '1.0.0-SNAPSHOT'
def pomDescription = 'first commit'
编写打包、上传代码
uploadArchives{
repositories{
mavenDeployer{
repository(url:NEXUS_REPOSITORY_URL){
authentication(userName: NEXUS_USERNAME,password: NEXUS_PASSWORD)
}
pom.project{
name pomName
version pomVersion
groupId POM_GROUPID
artifactId pomName
packaging POM_PACKAGING
description pomDescription
}
}
}
}
如下图:
4.打包并上传aar
点击AndroidStudio右侧的Gradle中项目->库->Tasks->upload->uploadArchives,会进行自动打包
执行结果如下表示打包并上传成功:
09:13:55: Executing task 'uploadArchives'...
Executing tasks: [uploadArchives]
> Configure project :app
WARNING: The specified Android SDK Build Tools version (28.0.1) is ignored, as it is below the minimum supported version (28.0.3) for Android Gradle Plugin 3.4.0.
Android SDK Build Tools 28.0.3 will be used.
To suppress this warning, remove "buildToolsVersion '28.0.1'" from your build.gradle file, as each version of the Android Gradle Plugin now has a default version of the build tools.
> Configure project :lib_nexus_test
WARNING: The specified Android SDK Build Tools version (28.0.1) is ignored, as it is below the minimum supported version (28.0.3) for Android Gradle Plugin 3.4.0.
Android SDK Build Tools 28.0.3 will be used.
To suppress this warning, remove "buildToolsVersion '28.0.1'" from your build.gradle file, as each version of the Android Gradle Plugin now has a default version of the build tools.
> Task :lib_nexus_test:preBuild UP-TO-DATE
> Task :lib_nexus_test:preReleaseBuild UP-TO-DATE
> Task :lib_nexus_test:checkReleaseManifest UP-TO-DATE
> Task :lib_nexus_test:generateReleaseBuildConfig UP-TO-DATE
> Task :lib_nexus_test:generateReleaseResValues UP-TO-DATE
> Task :lib_nexus_test:processReleaseManifest UP-TO-DATE
> Task :lib_nexus_test:prepareLintJar UP-TO-DATE
> Task :lib_nexus_test:mergeReleaseConsumerProguardFiles UP-TO-DATE
> Task :lib_nexus_test:mergeReleaseShaders UP-TO-DATE
> Task :lib_nexus_test:compileReleaseShaders UP-TO-DATE
> Task :lib_nexus_test:compileReleaseAidl NO-SOURCE
> Task :lib_nexus_test:compileReleaseRenderscript NO-SOURCE
> Task :lib_nexus_test:generateReleaseResources UP-TO-DATE
> Task :lib_nexus_test:packageReleaseResources UP-TO-DATE
> Task :lib_nexus_test:generateReleaseRFile UP-TO-DATE
> Task :lib_nexus_test:generateReleaseSources UP-TO-DATE
> Task :lib_nexus_test:javaPreCompileRelease UP-TO-DATE
> Task :lib_nexus_test:compileReleaseJavaWithJavac UP-TO-DATE
> Task :lib_nexus_test:extractReleaseAnnotations UP-TO-DATE
> Task :lib_nexus_test:generateReleaseAssets UP-TO-DATE
> Task :lib_nexus_test:packageReleaseAssets UP-TO-DATE
> Task :lib_nexus_test:packageReleaseRenderscript NO-SOURCE
> Task :lib_nexus_test:prepareLintJarForPublish UP-TO-DATE
> Task :lib_nexus_test:processReleaseJavaRes NO-SOURCE
> Task :lib_nexus_test:transformResourcesWithMergeJavaResForRelease UP-TO-DATE
> Task :lib_nexus_test:transformClassesAndResourcesWithSyncLibJarsForRelease UP-TO-DATE
> Task :lib_nexus_test:mergeReleaseJniLibFolders UP-TO-DATE
> Task :lib_nexus_test:transformNativeLibsWithMergeJniLibsForRelease UP-TO-DATE
> Task :lib_nexus_test:transformNativeLibsWithStripDebugSymbolForRelease UP-TO-DATE
> Task :lib_nexus_test:transformNativeLibsWithSyncJniLibsForRelease UP-TO-DATE
> Task :lib_nexus_test:bundleReleaseAar UP-TO-DATE
> Task :lib_nexus_test:uploadArchives
Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.1.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 0s
23 actionable tasks: 1 executed, 22 up-to-date
09:13:56: Task execution finished 'uploadArchives'.
这时候再查看Nexus私服上,看看有没有真正上传到Nexus上
点击Nexus上的Search,Maven,可以看到我们已经打包上传的aar
项目中引用已打包好的库
在需要这个库的项目的build.gradle中添加
implementation 'com.linxz.android:lib_nexus_test:1.0.0-SNAPSHOT'