路径|和 .project 文件说“再见”—— VS Code Java 1.1.0 背后的故事( 二 )
- Symbolic Link: https://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Symbolic_link
使用 Eclipse Linked Resources(放弃)
和 Symbolic Link 的思路类似地 , 我们还可以选择使用 Eclipse Linked Resources:
Linked Resources: Linked resources are files and folders that are stored in locations in the file system outside of the project's location.
上文是 Linked Resources 的一段官方定义 , 它可以作为项目的一部分 , 但又允许存储在项目路径之外的其他位置 。 在 VS Code Java 中 , 我们对于 Unmanaged Folder(无构建系统的项目) , 就是通过 Linked Resources 机制将这些元数据文件隐藏的 , 它的实现原理如下图所示:

文章图片
Unmanaged Folder 实现原理
可以看到项目的实际路径放在了 Language Server workspace storage 中 , 用户通常并不知晓这一路径 , 同时在 .project 文件里我们定义了 Linked Resources 的目标路径 , 也就是用户在 VS Code 打开的文件夹位置 , 它作为项目的一部分 , 会像其他项目一样参与到构建过程当中 , 其开发体验是类似的 。
相同的原理可以应用到 Maven 项目和 Gradle 项目的导入过程当中来解决这一问题 , 因此 , 我们在 M2E 模块上进行了一些实验 。 M2E 模块在 Java 语言服务中负责 Maven 项目的导入 , 通过改动模块中的相关代码 , 并利用 Linked Resources 机制就可以将元数据文件生成到项目路径之外的地方 。
最终的实验结果是可行的 , 但是这套方案的缺点也非常明显:
- 改动较大 :需要改动的代码散落在整个模块的不同文件中(大约十几处) , 同时因为代码规模较大 , 没有办法在短时间内确定这些改动是否是完备的 。
- 对下游模块不透明 :因为多了一层 Linked Folder , 这会让 Java 项目视图在展示项目结构时 , 多出一层代表了 Linked Folder 的目录结构 。 在 Java 项目视图 的实现中需要增加一些额外的控制逻辑 , 让项目结构的展示和正常项目一样 。
- 可行性未知 :对于 Maven 和 Gradle 构建系统的支持模块 M2E 和 Buildship 都是上游项目 , 这一概念能否被采纳接受是个未知数 。
- 扩展性差 :如果要支持一套新的构建系统 , 需要将类似的逻辑再实现一遍 。
- 项目视图: https://0x9.me/sMYkz
放弃第二套方案还有另一个原因:Eclipse 自发布至今二十载 , 在保证稳定运行的同时 , 可以不断地增加新的功能且提供了出色的拓展能力 , 在这背后一定蕴含了优秀的架构设计和可拓展性 。 直觉上让我们觉得应该还会有更优雅的解决办法 。
推荐阅读
- 星链|石豪:在太空,马斯克和美国当局是如何作恶的
- 下架|APK Installer 和 WSATools 同时躺枪:冒牌应用登陆微软应用商店
- 软件和应用|AcrylicMenus:让Windows 10右键菜单获得半透明效果
- 技术|使用云原生应用和开源技术的创新攻略
- 软件和应用|iOS/iPadOS端Telegram更新:引入隐藏文本、翻译等新功能
- 实力比|小米12对标苹果遭嘲讽?雷军:国产手机的实力比想象中强,有和苹果比较的勇气
- Apple|法官称苹果零售店搜包和解协议虽不完美,但可继续进行
- 部落|excel固定显示行列视频:应用冻结窗格同时固定标题行和列
- 最新消息|宝马LG和其他公司正考虑使用量子计算机解决具体问题
- 通信运营商|英国沃达丰、EE和Three将在2022年一同恢复欧盟漫游费用