Repository navigation
fix(macos): #1495 工具链选择只把导出变量算作构建 provider 的贡献环境 - #1792
Merged
Merged
Conversation
#1791 把 MacBuildToolResolver 的 JAVA_HOME 特判换成通用 contributed 集合时, 工具链候选的 choice environment 取了调用方整份环境,contributed 因而包含进程 里所有变量,Core provider_hints 以“环境无效或过大”拒绝,Maven 后端启动前失败。 ResolvedDefinedToolchain 新增 exports,只装这次选择新加的变量(定义导出项与 pathPrepend 后的 PATH);构建解析器用它作为 choice environment,执行环境不变, provider 只收到 PATH、导出项和与宿主进程不同的变量。补回归测试。
Collaborator
Author
|
本地验证结果:
修复前同一测试得到 端到端验证(preview 构建安装 Maven 插件、打开三模块 reactor 项目)在重建 app 后进行,结果会补在这里。 |
xiaoyumuxi
marked this pull request as ready for review
November 7, 2026 11:11
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
关联 Issue / Linked issue
PR 类型 / Type
改动说明 / What changes
背景 / Why
#1791 合入后,在 preview 构建上安装 Maven 插件并打开 Maven 项目,构建后端启动前就失败,
run.log记录run.preparation.failed error="The resolved tool environment is invalid or too large.",Maven 插件的host.log记录
host.planFailed operation=lithe/build/model。所有依赖工具定义(toolDefinitions)选出运行时的构建插件都受影响。原因是
MacBuildToolResolver把工具链选择结果的environment(调用方整份进程环境叠加导出变量之后的结果)当成"这个工具链贡献的变量",于是
providerEnvironment变成了整份进程环境。Core 的provider_hints对 provider环境限制 64 个变量、变量名只允许
[A-Z_][A-Z0-9_]*,整份环境必然被拒。#1791 之前这里是按JAVA_HOME名字特判的,拆分时换成了通用的
contributed集合,但集合的来源取错了。改动 / Changes
macos/Sources/Lithe/Core/Ports/DefinedToolchains.swift:ResolvedDefinedToolchain新增带默认值的exports: [String: String],只装这次选择新加到调用方环境里的变量(定义的
environment导出项,以及有pathPrepend时的PATH);environment仍是调用方环境叠加这些导出后的完整结果,供直接启动进程的消费者使用。
macos/Sources/Lithe/Platform/MacOS/Runtime/MacToolchainDiscovery+Resolution.swift:从 Coretoolchains.resolve的selection.environment和pathPrepend填充exports。macos/Sources/Lithe/Platform/MacOS/Build/MacBuildToolResolver.swift:工具链候选的 choice environment 改为selected.exports。合并回调用方环境后得到的执行环境不变,但
contributed只记录工具链真正导出的变量,provider 收到的是PATH+ 导出项 + 与宿主进程不同的变量。macos/Tests/LitheTests/MacBuildToolResolverTests.swift:新增回归测试,工具链候选解析后providerEnvironment的键只有PATH和导出项,宿主进程原有的其他变量不出现;执行环境仍包含它们。不在本 PR 范围内 / Out of scope
languageImport字段:fix(manifest): 移除宿主已删除的 buildSystems.languageImport 字段 Lithe-IDEA/lithe-plugin-maven#13、清单 languageImport 字段已被宿主契约拒绝,需删除并改走 pluginFunctions 中继 Lithe-IDEA/lithe-plugin-gradle#7。pluginFunctions导出languageImport.settings:通过 pluginFunctions 导出 languageImport.settings,替代已删除的 languageImport 清单字段 Lithe-IDEA/lithe-plugin-maven#14、清单 languageImport 字段已被宿主契约拒绝,需删除并改走 pluginFunctions 中继 Lithe-IDEA/lithe-plugin-gradle#7。lithe-legacy-tooling,不走这条宿主路径。类型专属:fix
复现与根因
0b7a2b5f1)安装 Java Support 1.1.0 与 Maven 插件,打开 Maven 项目,触发构建模型加载。实际结果:run.preparation.failed,错误文案 "The resolved tool environment is invalid or too large.",构建窗口无模型。期望结果:Maven 后端以选中 JDK 的
JAVA_HOME、PATH启动。185222d8b)把MacBuildToolResolver的JAVA_HOME特判换成通用contributed集合时,工具链 choice 的environment取了完整环境而不是导出项,contributed因而包含进程里所有变量。检查项
MacBuildToolResolverTests/toolchainSelectionContributesOnlyItsExportsToTheProvider,修复前providerEnvironment.keys为["PATH","FIXTURE_HOME","FIXTURE_SECRET","SHELL"]ResolvedDefinedToolchain的三个构造点(发现、打包运行时、测试)和消费environment的MacPluginBackendLaunchPreparer、MacDefinedToolchainResolver行为不变.agents/notes/implemented/bug-fix/记录:约束已写在ResolvedDefinedToolchain.exports的类型注释和回归测试里,没有新的架构取舍范围检查 / Scope checks
功能矩阵 / Feature matrix
N/A:恢复 #1791 之前的既有行为,没有新增能力或改变跨平台行为。
统一日志系统 / Structured logging
N/A:没有新增或改动日志事件。
界面文案 / i18n
N/A:没有新增用户可见文字。
逻辑归属 / Logic placement
provider_hints;本 PR 只修正 Swift 层把哪些变量交给 Core 的 I/O 接线性能与内存 / Performance and memory
N/A:没有新增后台功能、子进程、缓存或依赖。
设置 / Settings
N/A:不涉及设置项。
插件与共享契约 / Plugin and shared contracts
N/A:没有改动
shared/contracts/、capabilities 或宿主方法。发行包与资源 / Bundle and resources
N/A:没有新增运行时资源。
无用代码与重构 / Dead code and refactoring
验证 / Verification
swift test --triple arm64-apple-macosx --filter MacBuildToolResolverTestsscripts/macos/test/test-macos.sh --filter 'MacBuildToolResolverTests|BuildToolProviderResolutionTests|PluginBackendLaunchTests|RunLaunchEnvironmentTests|BuildSystemServiceTests'未能执行的检查和原因: Windows 构建与测试未在本机执行;Windows 不走本路径。
提交前确认 / Final checks
preview创建;目标分支:preview.build/、target/、dist/、.artifacts/等产物,没有凭据、个人路径和未脱敏的日志或截图