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

时间:2013-01-05 21:07:21

标签: java linux file

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

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

我见过关于chroot的内容,我认为这可能有用,但我不知道如何使用Java。我根本不需要担心安全性,我只需要不同的假文件系统。

此外,需要访问核心Java库,而无需将它们复制到伪文件系统中。

这可能,如果可以,我该如何设置?

3 个答案:

答案 0 :(得分:4)

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

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

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

基本上,你的'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 ClasspathApache Harmony,这些可能更容易构建(我过去曾多次构建GNU Classpath)但这些项目目前还不是非常活跃。它们已经完全适用于研究或其他项目需要修改Java系统库的情况。

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

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