背景
上一期讲到了Maven仓的本地实现,但实际开发过程中,使用本地仓进行合作开发是不现实的,这时,我们可以考虑使用第三方的代码管理工具去实现,例如Gitee。但是Gitee 并不是专门的 Maven 仓库管理工具,因此在使用上可能会有一些限制,并不能自动完成一个Maven仓,我们可以将本地构建的Maven项目代码上传到 Gitee 指定文件夹中,确保 pom.xml 文件正确配置了项目的基本信息和依赖即可。
本地Maven仓的实现请参考:安卓本地Maven仓的实现
实现
- 从Gitee上拉取一个自己的项目,找到app下的build.gradle文件,将com.android.application改成com.android.library。
plugins {
id 'com.android.library'
}
- 将AndroidManifest.xml文件中的application标签删除,并将app下的build.gradle文件中applicationId注释掉。
- 选中你的项目,点击Build窗口中的Make Module生成对应的aar(Android Archive)文件。AAR文件是Android库项目的输出格式,包含了编译后的代码、资源文件、清单文件等。
-
生成的aar文件通常是在bulid->outputs->aar下。将生成的文件复制到一个方便的目录下,任意都可。
-
在项目的根目录下创建一个maven文件夹,用于存储后续生成的依赖文件。
- 在app下的build.gradle中添加maven-publish插件,并配置仓库地址。配置完成后Sync Now即可。
plugins {
id 'com.android.library'
id 'maven-publish'
}
afterEvaluate {
publishing {
publications {
release(MavenPublication) {
groupId 'com.example.navtest' // 可以随意取,一般取包名
artifactId 'navtest' // 可以随意取,一般取库的名字
version '1.0.0' // 版本号
artifact(uri("file://D:/yhf/maven/app-debug.aar")) // 此为存放aar文件的位置
}
}
repositories {
maven {
url uri("${rootDir}/maven") // rootDir为项目根目录,maven为存放maven库的文件夹
}
}
}
}
- Sync完成后在Gradle中会生成如下目录结构。
-
若你的Studio中没有,可能是未打开相应的开关,找到Settings中Experimenta,将如下图所示勾上即可。
-
在一切准备完成后,双击publish,成功后即可生成maven仓所有的所有文件。
-
生成的文件结构如下图所示。
-
将生成的maven文件夹下所有文件push到Gitee代码仓中,如下所示。
- 在一个新的安卓应用项目project下的build.gradle文件中(新版是在settings.gradle中),引入远程maven仓。如果不会查找自己正确的maven仓地址,可以查看后文中的注意事项。
pluginManagement {
repositories {
google {
content {
includeGroupByRegex("com\\.android.*")
includeGroupByRegex("com\\.google.*")
includeGroupByRegex("androidx.*")
}
}
mavenCentral()
gradlePluginPortal()
maven {url "https://gitee.com/hfyangi/instrument/raw/master/maven"}
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven {url "https://gitee.com/hfyangi/instrument/raw/master/maven"}
}
- 在app下的build.gradle文件中导入依赖。
dependencies {
implementation "com.example.navtest:navtest:1.0.0"
}
- 之后点击Sync Now即可拉取对应的aar包了,在Gradle包中可以找到对应的包。
- 在需要的地方直接调用相关方法即可。
注意事项
问题:
通过maven仓下载的pom文件为html文件问题。
原因:
这是因为在配置Maven仓时,直接选取了Gitee代码仓管理路径。
pluginManagement {
repositories {
google {
content {
includeGroupByRegex("com\\.android.*")
includeGroupByRegex("com\\.google.*")
includeGroupByRegex("androidx.*")
}
}
mavenCentral()
gradlePluginPortal()
maven {url "https://gitee.com/hfyangi/instrument/blob/master/maven"}
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven {url "https://gitee.com/hfyangi/instrument/blob/master/maven"}
}
}
这时候拉取的实际是Gitee展示代码的html页面。实际上我们是需要拉取的是文件的实际路径。
解决方法:
点击右上角的原始数据即可查看对应的文件存储位置。
在maven中使用正确的url即可。
pluginManagement {
repositories {
google {
content {
includeGroupByRegex("com\\.android.*")
includeGroupByRegex("com\\.google.*")
includeGroupByRegex("androidx.*")
}
}
mavenCentral()
gradlePluginPortal()
maven {url "https://gitee.com/hfyangi/instrument/raw/master/maven"}
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven {url "https://gitee.com/hfyangi/instrument/raw/master/maven"}
}
}