android - 使用multiply `exclude`时如何修复`POM file is invalid`?
问题描述
dependencies {
...
api ("com.jakewharton:butterknife:${rootProject.ext.butterKnifeVersion}"){
exclude group: 'com.android.support', module: 'support-compat'
exclude group: 'com.android.support', module: 'support-annotations'
}
...
}
发布看起来像这样:
publishing {
publications {
bintrayMavenPublication(MavenPublication) {
groupId theGroupId
artifactId theArtifactId
version theVersion
artifact androidJavadocsJar
artifact androidSourcesJar
artifact bundleRelease
pom.withXml {
final dependenciesNode = asNode().appendNode('dependencies')
ext.addDependency = { Dependency dep, String scope ->
final dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', dep.group)
dependencyNode.appendNode('artifactId', dep.group == theGroupId ? dep.name.substring(9) : dep.name)
dependencyNode.appendNode('version', dep.version)
dependencyNode.appendNode('scope', scope)
if (!dep.transitive) {
final exclusionNode = dependencyNode.appendNode('exclusions').appendNode('exclusion')
exclusionNode.appendNode('groupId', '*')
exclusionNode.appendNode('artifactId', '*')
} else if (!dep.properties.excludeRules.empty) {
final exclusionNode = dependencyNode.appendNode('exclusions').appendNode('exclusion')
dep.properties.excludeRules.each { ExcludeRule rule ->
exclusionNode.appendNode('groupId', rule.group ?: '*')
exclusionNode.appendNode('artifactId', rule.module ?: '*')
}
}
}
configurations.api.getAllDependencies().each { dep -> addDependency(dep, "compile") }
configurations.implementation.getAllDependencies().each { dep -> addDependency(dep, "runtime") }
}
}
}
}
结果 pom 文件有这个:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>library-example</artifactId>
<version>1.0.0</version>
<packaging>aar</packaging>
<dependencies>
<dependency>
<groupId>com.jakewharton</groupId>
<artifactId>butterknife</artifactId>
<version>8.8.1</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>com.android.support</groupId>
<artifactId>support-annotations</artifactId>
<groupId>com.android.support</groupId>
<artifactId>support-compat</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
正如您现在在<exclusion>
标签中看到的那样,有两个<artifactId>
和两个<groupId>
。如何修复它并将其拆分为两个单独的标签<exclusion>
?
错误是:
FAILURE:构建失败并出现异常。
什么地方出了错:
任务 ':mvpr:publishBintrayMavenPublicationPublicationToMavenCustomRepository' 的执行失败。
无法将发布“bintrayMavenPublication”发布到存储库“mavenCustom”无效发布“bintrayMavenPublication”:POM 文件无效。检查您对 POM 文件所做的任何修改。
尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。
在https://help.gradle.org获得更多帮助
解决方案
修复者:
...
} else if (!dep.properties.excludeRules.empty) {
// Otherwise add specified exclude rules
final exclusionsNode = dependencyNode.appendNode('exclusions')
dep.properties.excludeRules.each { ExcludeRule rule ->
def exclusion = exclusionsNode.appendNode('exclusion')
exclusion.appendNode('groupId', rule.group ?: '*')
exclusion.appendNode('artifactId', rule.module ?: '*')
}
}
...
推荐阅读
- gcc - 为什么我在 C++ 中出现此错误,请帮助我解决此问题
- rust - 当我在 RefCell<> 上内联借用时,Rust 出现恐慌
- node.js - 将 SSL 证书连接到前端后,请求不会发送到后端
- bluetooth-lowenergy - hcitool 找不到 ble 设备,但 blueman 找到了,bettercap 和 bluetoothctl 也找到了
- ethereum - 如何用其他合约为 Chainlink 智能合约注资?
- java - 带有 Jersey、Oauth ResourceServer 和 EnableGlobalMethodSecurity 的 Spring Boot 不起作用
- android - 在 Livedata 上多次调用 postValue() 将导致仅调度最后一个。有没有其他解决方案?
- php - 具有自定义请求正文的 API 平台自定义资源
- javascript - 如何更改我的代码以从 JSON 中获取可用于 InnerHTML div 或作为图像 src 的特定数据?
- flutter - 取消来自 Provider Multiprovider 的流