2013-01-05 31 views
2

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

我基本上需要与this questionalso this question中相同的东西,但是对于Java。

我看到的东西有关chroot,我想这可能工作,但我不知道如何得到它与J​​ava运行。我根本不需要担心安全问题,我只需要不同的假文件系统。

此外,核心Java库需要被访问而不必将其复制到假文件系统中。

这是可能的,如果是这样,我怎么设置?

+0

你可能会感兴趣http://fuse.sourceforge.net/ –

回答

4

不知道,但如果你只是想复制的文件系统的语义(可能用于测试),我建议你抽象的文件系统后端。

一个很好的选择是使用commons-vfs。它模拟了一个虚拟文件系统,支持:

  • .zip文件/ .jar文件
  • .gz文件解
  • 一个在内存中的文件系统
  • 基于类路径的文件系统
  • 基于URL

所以基本上,你的“霹雳”目录将是另一个实现文件系统,你可以使用测试和设计。

所有的应用程序都需要依靠呼吁VFS,但这不是一个巨大的问题,我想。

+0

我的目标是能够使用正常的文件系统访问API(File,FileInputStream等),就像我一旦进入一个单独的系统一样它自己的内核等等,但是在Linux上运行时,只需将调用重定向到一个特殊的目录。我不确定commons-vfs,但它看起来不是这样吗? – iBelieve

+0

不,它不。 当然,你可以重写整个JVM。或者甚至想出一个更好的。 做我的客人:) – aldrinleal

0

[Linux] Chroot是正确的(但并不简单)。不重新复制所有库...您可以使用

安装--bind -o RO /源/ /目的/

人安装获取更多信息)

+0

所以你说如果我设置了Chroot,我可以将Java库绑定到我的Chroot中? – iBelieve

+0

正确!您可以将chroot外部的子目录绑定到chroot内部。所以你节省了空间,而不必单独更新版本 – ggrandes

+0

感谢您的帮助!我用chroot得到了我想要的工作;到目前为止,我只复制了大部分我想要的库,但我确实将Java安装绑定到了我的chroot中。以下是我所做的工作:http://askubuntu.com/a/236821/109543。 – iBelieve

0

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

它可能是合理的我你的具体情况考虑调整使用OpenJDK这是开源的,允许该Java系统库。还有另外两种自由和开放源码软件项目,GNU ClasspathApache Harmony,这些可能更容易建立(我过去曾多次构建GNU Classpath),但这些项目目前并不是非常活跃。当研究或其他项目需要修改Java系统库时,它们已经开始正确处理。

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

此解决方案还允许运行无法修改的第三方Java程序,以通过commonsfs API路由所有文件系统访问。

相关问题