我创建了一个指向java .class文件的符号链接。它可以工作,我可以通过符号链接将原始文件传递给Java解释器,并且它可以正常运行程序。但是,如果我将原始文件名以外的任何其他名称命名,则不起作用。
我不得不把它命名为原始文件名。
我不确定是否应该将其发布到Unix / Linux堆栈。
答案 0 :(得分:1)
这是一项要求,因为这是Java 找到类文件的方式。
当您说java App
时,App
不是文件名,而是完全限定的类名。
Java有一些规则如何从类名到文件名。这是在默认的类加载器中实现的。当类存储在.class文件(而不是.jar文件)中时,它会自动将.class
扩展名附加到类名。
在此之前,它将包分隔符(在Java源代码中看起来像一个点)转换为操作系统的路径分隔符(在Linux上,/
(斜杠),在Windows上{{1 (反斜杠)。
如果为类文件指定一个不同的名称,无论是使用真正的重命名还是使用符号链接,Java都无法找到它,因为它不遵循关于如何从中获取的Java规则类名到文件名。