【发布时间】:2015-10-05 00:49:11
【问题描述】:
我正在尝试创建工件的本地缓存,以便可以离线构建我的 Maven 项目,但它无法为 Eclipse CDT 功能创建缓存工件,因此离线构建无法成功。
我通过运行 mvn -Dmaven.repo.local=/some/path/ -DgeneratePom=true clean install 创建本地存储库工件,构建成功。
然后我运行mvn -Dmaven.repo.local=/some/path/ -o clean install,它失败并显示此错误消息。
ERROR] 无法解析目标定义 /opt/git/myproject/my.package.target/my.package.target.target: 无法从位置加载 p2 元数据存储库 http://download.eclipse.org/tools/cdt/releases/8.6: 仓库系统 处于离线状态,没有可用的本地缓存 http://download.eclipse.org/tools/cdt/releases/8.6 -> [帮助1]
然后我尝试通过运行mvn -Dmaven.repo.local=/some/path/ dependency:go-offline 创建所需的工件。我在控制台上看到以下内容,这似乎表明它尝试查找 CDT 工件但未能找到,或者认为工件已被缓存。
INFO] 添加存储库 http://download.eclipse.org/tools/cdt/releases/8.6 [信息] 获取 p2.index 来自http://download.eclipse.org/tools/cdt/releases/8.6/r/ (0B/s 时为 0B)
我想知道这条消息的含义(即 0B 是否表示失败,或者工件已经存在?),以及如何使离线构建工作。 dependency:go-offline 构建最终失败,因为可能(?)与此无关的问题。之后,离线构建继续失败,因为它找不到 CDT 工件。
我创建了this SO question 和this Maven Jira Bug Report,用于处理上述关于从 CDT 更新站点下载的 0 字节的消息之后下游发生的问题。
我正在构建的项目是一个 Eclipse RCP 应用程序(基于 Mars),我正在使用 org.eclipse.tycho:target-platform-configuration Maven 插件从 RCP 目标文件加载依赖项。
【问题讨论】:
-
尝试删除您的 m2 存储库并运行
mvn -U -Dmaven.repo.local=/some/path/ dependency:go-offline。 -
我尝试使用 -U 选项。比没有它花费的时间要长得多,这是一个好兆头。但它仍然显示为 CDT 站点下载了 0B,并且由于我之前看到的(可能不相关的)google guava 错误,离线目标仍然失败。失败后,离线构建仍然报告 CDT 站点没有缓存的工件。我正在尝试解决番石榴错误,以便完成脱机目标。但我想知道为 CDT 站点下载的 0B 是否是预期行为。似乎克服 guava 错误无济于事,因为它已经完成了对 CDT 依赖项的处理。
-
在一次成功构建之后,使用
-o运行相同的构建应该可以使用 Tycho 开箱即用地成功。如果没有,这可能是一个错误,您应该报告here。确保附上一个演示问题的小项目。 -
我解决了阻止
dependency:go-offline完成的问题(记录在那个 SO 问题中),并且脱机构建失败并出现同样的问题,正如我所料。它现在抱怨没有http://download.eclipse.org/tm/terminal/marketplace的本地缓存,我猜是因为对 pom 文件进行了一些重新排列。我会按照建议创建一个 tycho 错误报告。 -
关于我正在尝试什么的另一个问题:我依靠 RCP 目标来解决我的依赖问题,使用插件
org.eclipse.tycho:target-platform-configuration。这应该在离线模式下工作吗?如果没有,当我的构建依赖 RCP 目标来解决依赖关系时,我还能做些什么来使我的构建在离线模式下工作?
标签: maven eclipse-cdt offline tycho target-platform