今天做了一个将Module上传到Maven仓库的功能,基本上就是把以前的代码拷了一份,在此记录一下,给有需要的童鞋参考。
1.新建maven_upload.gradle
在项目根目录下,新建 maven_upload.gradle
apply plugin: 'maven'
def REPOSITORY_URL = "http://xxxx.yyyy.你的maven服务器的地址/" //TODO <--- 请修改
def NEXUS_USERNAME = "maven服务器账号" //TODO <--- 请修改
def NEXUS_PASSWORD = "maven服务器密码" //TODO <--- 请修改
logger.info("groupId = %s\t\nartifactId = %s\t\nversion = %s\t\nrepository = %s\t\n", GROUP, POM_ARTIFACT_ID, VERSION_NAME, REPOSITORY_URL)
afterEvaluate { project ->
uploadArchives {
repositories.mavenDeployer {
pom.groupId = GROUP
pom.artifactId = POM_ARTIFACT_ID
pom.version = VERSION_NAME
repository(url: REPOSITORY_URL) {
authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
}
}
}
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.sourceFiles
}
artifacts {
archives androidSourcesJar
}
}
注意这里的几个关键变量
- REPOSITORY_URL : Maven服务器地址
- NEXUS_USERNAME : Maven服务器的账号
- NEXUS_PASSWORD : Maven服务器的密码
2.在想要上传的Library中添加
在想要上传的Library中添加如下代码,将GROUP、POM_ARTIFACT_ID修改为我们自定义的内容
ext.GROUP="com.heiko.android"
ext.POM_ARTIFACT_ID="mytest"
ext.VERSION_NAME=android.defaultConfig.versionName
//引用gradle_upload.gradle
apply from: "${project.rootDir}/maven_upload.gradle"
GROUP 、 POM_ARTIFACT_ID 、 VERSION_NAME 这三者 共同组成我们所需的一个依赖,比如 implementation 'com.heiko.mytest:1.0.0'
3.进行使用
添加上面的代码之后,我们点击sync
,同步下代码
可以发现多了一个uploadArchives
的Gradle Task
我们双击运行,一段时间后,出现如下成功的提示,说明就上传到maven仓库成功了
3.依赖上传的maven库
上传成功后,我们要如何进行依赖使用呢 ?
3.1 添加maven仓库地址
在一个新建的项目了,我们需要先添加maven仓库的地址
allprojects {
repositories {
//....此处省略了其他的maven库....
maven {
url "http://xxxx.yyyy.你的maven服务器的地址/" //TODO <--- 请修改
credentials {
username 'maven服务器的账号' //TODO <--- 请修改
password 'maven服务器的密码' //TODO <--- 请修改
}
}
}
}
3.2 进行依赖
dependencies {
//...
implementation 'com.heiko.android:mytest:1.0.0'
}
3.3 验证是否可以用
标准一 : 可引用module中的类、函数
标准二 : 可正常编译项目并正常跑在Android设备上
注意事项
Module中不能直接依赖其他的aar
Module中不能直接依赖其他的aar,如果有直接依赖其他的aar,会报Missing required attribute : dependency groupId
的错误
所以,如果有直接依赖其他的aar,需要先将这些aar手动上传到maven仓库上,详见我的另一篇博客 手动上传aar到nexus maven仓库
Module中不能直接依赖其他的Module
Module不能存在嵌套关系,如果有存在嵌套关系,也会报上面的那个Missing required attribute : dependency groupId
的错误
相关文章
我的其他和Maven相关的文章
Linux (Ubuntu) Android环境及Maven(Nexus3.X)配置
手动上传aar到nexus maven仓库
将Flutter项目打包aar上传maven