介绍
我现在创建了一个应用A, 一个库工程 B , B 远程依赖了库工程C ,A远程依赖B工程. B 是通过Maven 发布成远程依赖库. B 作为一个通用的库工程,发布到了Maven上,就可以比较简单的被各个项目引入.
如下图:
问题
目前存在一个问题, 当A使用B中的代码,B使用到了C中的代码,提示C中的代码找不到. 运行就崩溃.
分析
存在这个问题,说明把B上传到Maven上的时候,没有把C的依赖传递下去,导致A使用B, B调用C 导致类找不到 崩溃.
解决
需要把依赖传递下去.
目前我采用的是我之前发的
android studio使用 maven push 插件上传私有maven - 已成功使用到项目中
里面的脚本文件 .
单个库工程是没有问题的, 但是遇到现在这种远程的,存在依赖传递的时候就有问题了, 需要改一下上传maven库的脚本.
afterEvaluate {// components.release 只有在配置完成之后,才能拿到值
publishing {
publications {
Production(MavenPublication) {
// 使用方引用 implementation 'com.sinochem.apm:1.0.0-SNAPSHOT'
groupId = "自己定义的groupId"
artifactId = "自己定义的artifactId"
version = "自己定义的versionName"
// 必须有这个 否则不会上传AAR包
afterEvaluate { artifact(tasks.getByName("bundleReleaseAar")) }
// 上传source,这样使用方可以看到方法注释
artifact generateSourcesJar
// pom文件中声明依赖,从而传递到使用方
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
configurations.implementation.allDependencies.each {
// 避免出现空节点或 artifactId=unspecified 的节点
if (it.group != null && (it.name != null && "unspecified" != it.name) && it.version != null) {
println it.toString()
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', it.group)
dependencyNode.appendNode('artifactId', it.name)
dependencyNode.appendNode('version', it.version)
dependencyNode.appendNode('scope', 'implementation')
// dependencyNode.appendNode('scope', 'implementation')
}
}
}
}
}
repositories {
// 定义一个 maven 仓库
maven {
// 可以有且仅有一个仓库不指定 name 属性,会隐式设置为 Maven
// 根据 versionName 来判断仓库地址
url = versionName.endsWith('SNAPSHOT') ? SNAPSHOT_REPOSITORY_URL : RELEASE_REPOSITORY_URL
// 仓库用户名密码
credentials {
username = maven_local_username
password = maven_local_psw
}
}
}
}
}
其他使用maven-publish 插件的问题 参考
android studio使用 maven push 插件上传私有maven - 已成功使用到项目中
打完收工. 解决问题.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。