我正在设计一组Java程序,我希望有一天能够转变为基于Java的操作系统。在我获得内核工作之前,我想在Linux系统上运行它们(我正在使用Ubuntu,如果这很重要)。因此,我需要将所有文件系统调用定向到我的主文件夹中的不同目录,因此从Java中访问/
实际上将访问/home/<user>/Thunderbolt/
。
我基本上需要与this question和also this question相同的东西,但对于Java。
我见过关于chroot
的内容,我认为这可能有用,但我不知道如何使用Java。我根本不需要担心安全性,我只需要不同的假文件系统。
此外,需要访问核心Java库,而无需将它们复制到伪文件系统中。
这可能,如果可以,我该如何设置?
答案 0 :(得分:4)
不确定,但如果您只想重现文件系统语义(可能用于测试),我建议您抽象文件系统后端。
一个好的选择是使用commons-vfs。它模仿虚拟文件系统,支持:
基本上,你的'thunderbolt'目录将是另一个实现的文件系统,你可以用它进行测试和设计。
我认为你所有的应用程序都需要依赖于调用VFS,但这不是一个大问题。
答案 1 :(得分:0)
[Linux] Chroot是正确的(但不简单)。对于NOT重新复制所有库...您可以使用
mount --bind -o ro / source / / destination /
( man mount 了解更多信息)
答案 2 :(得分:0)
系统库中没有那么多类将文件路径字符串作为参数。文件确实可能,FileInputStream,FileReader,RandomAccessFile,可能是URL应该被审查,它可能是其他一些 - 几天的审查应该揭示最多。
我的具体情况考虑使用开源的OpenJDK来调整Java系统库并允许这样做是合理的。还有另外两个替代FOSS项目GNU Classpath和Apache Harmony,这些可能更容易构建(我过去曾多次构建GNU Classpath)但这些项目目前还不是非常活跃。它们已经完全适用于研究或其他项目需要修改Java系统库的情况。
如果您发现这些项目难以构建,您可以尝试单独构建并替换几个系统类。
此解决方案还允许运行无法修改的第三方Java程序,以通过commonsfs API路由所有文件系统访问。