当遇到 google guava url with invalid character 时,Maven 离线构建失败

Maven offline build fails when it encouners google guava url with invalid character

我需要让我的 Tycho-Maven 构建在离线模式下工作,这样我就可以将它部署到没有 Internet 连接的环境中,并让人们 运行 从先前下载的第三方代码工件中构建我的应用程序取决于。正在构建的产品是 Eclipse RCP 产品,使用 org.eclipse.tycho:target-platform-configuration 插件从 RCP 目标文件加载依赖项。

首先我 运行 mvn -Dmaven.repo.local=/some/path/ -DgeneratePom=true clean install 创建工件,然后构建成功。然后当我 运行 mvn -Dmaven.repo.local=/some/path/ -o clean install 它失败了,因为它处于离线模式 运行ning 并且没有本地缓存​​可用于 http://download.eclipse.org/tools/cdt/releases/8.6

然后我 运行 mvn -Dmaven.repo.local=/some/path/ dependency:go-offline 让它下载构建所需的所有工件,但失败并显示此消息:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.8:resolve-plugins (resolve-plugins) on project : Nested: Could not transfer artifact com.google.guava:guava:jar:[10.0.1,14.0.1] from/to central (https://repo.maven.apache.org/maven2): Illegal character in path at index 60: https://repo.maven.apache.org/maven2/com/google/guava/guava/[10.0.1,14.0.1]/guava-[10.0.1,14.0.1].jar

索引 60 是 guava jar 版本范围说明符中的“[”字符。我不知道 URL 是在哪里创建的,也不知道为什么它没有被 URL 编码。获得完成执行的 dependency:go-离线目标会很好,但我不认为这是我问题的根源。

我这么说的原因是当我 运行 这个目标时,我在输出中看到了这个

[INFO] Adding repository http://download.eclipse.org/tools/cdt/releases/8.6 [INFO] Fetching p2.index from http://download.eclipse.org/tools/cdt/releases/8.6/r/ (0B at 0B/s)

我不知道为什么它下载 0 字节,但我想这就是为什么我在尝试进行离线构建时找不到 CDT 包的缓存。

如果有人知道如何解决此故障,或者有任何其他方法可以使离线构建工作,那将非常有帮助。

我在问题跟踪器中创建了这个Maven bug report

在创建一个精简项目来演示问题的过程中,我发现了原因。 pom 中 org.eclipse.xtend:xtend-maven-plugin 的存在导致了问题。根据我在构建输出中看到的消息,该插件未被使用,并且可能配置错误。