在自己的伪文件系统中运行Java应用程序



我正在设计一组Java程序,我希望有一天能把它们变成基于Java的操作系统。在我得到一个可以工作的内核之前,我只想在Linux系统上运行它们(如果有关系的话,我正在使用Ubuntu)。因此,我需要将所有文件系统调用定向到主文件夹中的不同目录,因此从Java中访问/实际上会访问/home/<user>/Thunderbolt/

我基本上需要和这个问题一样的东西,还有这个问题,但是对于Java。

我看过关于chroot的东西,我认为这可能工作,但我不知道如何让它与Java一起工作。我根本不需要担心安全性,我只需要不同的假文件系统。

同样,核心Java库需要被访问,而不必将它们复制到伪文件系统中。

这是可能的吗?如果是,我如何设置它?

不确定,但是如果您只想重现文件系统语义(可能用于测试),我建议您抽象您的文件系统后端。

一个好的替代方案是使用commons-vfs。它模仿虚拟文件系统,支持:

  • .zip文件/.jar文件
  • . gz文件
  • 内存文件系统
  • 基于类路径的文件系统
  • 基于url的

所以基本上,你的'thunderbolt'目录将是另一个实现的文件系统,你可以用来测试和设计。

你所有的应用程序都需要依赖于调用VFS,但我认为这不是一个大问题。

[Linux] Chroot是正确的(但不简单)。没有复制所有的库…你可以使用

mount——bind -o/source//destination/

(man mount获取更多信息)

系统库中没有那么多类将文件路径字符串作为参数。文件,可能是FileInputStream, FileReader, RandomAccessFile,可能是URL应该被审查,可能是其他一些-几天的审查应该揭示最多。

在您的具体情况下,考虑使用开源的OpenJDK来调整Java系统库可能是合理的,并且允许这样做。还有另外两个可供选择的自由/开源软件项目,GNU Classpath和Apache Harmony,它们可能更容易构建(我过去曾多次构建GNU Classpath),但这些项目目前不是很活跃。当研究或其他项目需要修改Java系统库时,它们已经启动。

如果您发现这些项目很难构建,您可以尝试单独构建并替换几个系统类。

这个解决方案还允许运行第三方Java程序,这些程序不能被修改为通过commonsfs API路由所有文件系统访问。

相关内容

  • 没有找到相关文章

最新更新