一、背景
最近一个管理一个旧项目,结果有两个依赖在sync中报以下错误:
[Fatal Error] xxxxxx.pom:7:3: 元素类型 "hr" 必须由匹配的结束标记 "</hr>" 终止
xxxxx是我的项目报错的依赖包名。通过百度也没查到原因是啥,最后用谷歌在stackoverflow上找到了一个答案并解决问题。
二、原因
该问题的原因在于项目Maven地址,从Maven 3.8.1开始,Maven不再支持http的存储库。 这是因为https比http更加安全,可以更好地保护用户的数据和隐私。 然而,由于一些历史原因,有些依赖项的存储库仍然只支持http,这就导致了在构建项目时出现错误。 我的build.gradle (Project:)文件中刚好还有这么一个http类型的maven地址。
maven {url "http://dl.bintray.com/glomadrian/maven"}
二、解决办法
1. 解决方案1
最简单的方法是降低Maven的版本到3.6.3或更低。在setting中搜索maven,把maven home path地址改成机器上的3.6.3版本即可。
2. 解决方案2(推荐)
事情总要往前发展,因此我们还是推荐对于出问题的依赖项,先把htttp的maven地址删掉,然后将找不到的依赖包去发布网站上(比如github)寻找最新的仓库地址。这可能要升级依赖包的版本。下面建议把国内常用的https maven镜像都加进repositories 中(包括buildscript和repositories),这样至少90%以上的依赖包都能找到。下面是阿里云镜像示例。
buildscript {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/gradle-plugin' }
}
dependencies {
}
}
allprojects {
repositories {
google()
jcenter()
maven { url "https://www.jitpack.io" }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/gradle-plugin' }
}