【发布时间】:2020-08-09 17:21:30
【问题描述】:
我正在实现一个封闭源代码的自定义模块/SDK(类似对讲), 根据 maven 在我自己的服务器上使用私人仓库, 并且在 pom.xml 文件中有一个小挑战
问题描述: Pom.xml 文件包含我在任何项目中集成此库/SDK 时在模块中使用的一些依赖项, 不知何故,我的依赖项和项目的依赖项之间存在冲突。 例如 : 我在我的库模块中使用这个依赖项
implementation 'com.google.android.material:material:1.0.0'
以及我尝试使用同一库的最新版本集成的项目
implementation 'com.google.android.material:material:1.2.0'
所以,我有一个编译时错误。我正在尝试使用<dependencyManagement> 标签来解决这个问题,但我没有运气。
另外,我无法指定我的库和打算使用它的项目之间的常见依赖关系。
问题是: 如何克服冲突问题。 我希望我的库模块使用这个依赖的 1.0.0 版本,而另一个项目使用它的 1.2.0 版本而没有冲突。
Edit-1 下面是我的库中用于生成 pom.xml 文件的代码:
publishing {
publications {
aar(MavenPublication) {
groupId libraryGroupId
version libraryVersion
artifactId libraryArtifactId
artifact androidJavadocsJar
artifact androidSourcesJar
artifact("$buildDir/outputs/aar/${artifactId}-release.aar")
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
for(int i = 1 ; i < configurations.implementation.allDependencies.size() ; i++){
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId',
configurations.implementation.allDependencies[i].group)
dependencyNode.appendNode('artifactId',
configurations.implementation.allDependencies[i].name)
dependencyNode.appendNode('version',
configurations.implementation.allDependencies[i].version)
}
}
}
}
}
Edit-2(附上pom.xml文件)
<dependencies>
<dependency>
<groupId>androidx.appcompat</groupId>
<artifactId>appcompat</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>androidx.constraintlayout</groupId>
<artifactId>constraintlayout</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>androidx.legacy</groupId>
<artifactId>legacy-support-v4</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>androidx.vectordrawable</groupId>
<artifactId>vectordrawable-animated</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>com.google.android.material</groupId>
<artifactId>material</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>com.google.android.exoplayer</groupId>
<artifactId>exoplayer</artifactId>
<version>2.11.5</version>
</dependency>
</dependencies>
【问题讨论】:
-
我建议使用
com.google.android.material:material:1.2.0来解决问题。 -
@khmarbaise:感谢您的重播,实际上问题有点复杂,库/SDK已经使用特定的依赖项内置,
implementation 'com.google.android.material:material:1.0.0'只是一个例子,我也没有了解其他开发人员将在他们的项目中使用的依赖项以及它们与我的不同之处。 (查看我的 edit-2 以获取完整的 pom.xml 文件) -
对此的简单回答:根据给出的版本,它表明这些库不遵循语义版本。而且我看不到真正的解决方案,要么您决定使用 1.2.0 版本,而且生成的
botter工件的结果版本应该更改为其他版本,如2.0.0因为它与以前的版本不兼容 @987654330 @ 从语义版本的角度来看只是一个补丁......但是将依赖项的 1.0.0 版本升级到 1.2.0 会产生失败...... -
如果其他项目将来使用更高版本的exo-player(即2.11.6)会发生问题,它会与我使用的版本(2.11.5)产生冲突。我说的对吗?
-
我怎么知道?如果是这样,exo-player 的版本处理完全搞砸了......以及......
标签: java android maven pom.xml