如何防止javac输出中的短文件名(8.3格式)?

时间:2012-01-25 13:04:17

标签: java linux

我最近遇到了编译内部应用程序的一个不寻常的问题,正如您从下面可以看到的那样,文件名混合使用短格式和长格式:

-rwxrwxr-x 1 jenkins jenkins  472 Jan  5 15:32 BadDelimiterException.class
-rwxrwxr-x 1 jenkins jenkins  460 Jan  5 15:32 BadQuoteException.class
-rwxrwxr-x 1 jenkins jenkins 1711 Jan  5 15:32 SC7B38~1.CLA
-rwxrwxr-x 1 jenkins jenkins 1023 Jan  5 15:32 SCHOLA~4.CLA

不幸的是,这些文件位于JAR文件中,并且javac抱怨在Linux上进行构建时无法找到类,并且用作引用的JAR文件不太可能随时重建不久。目前我已经完成并手动将短格式文件名重命名为正确的名称,但这非常耗时,并且不能完全覆盖JAR中的文件。是否有javac命令行开关允许它识别文件,或相反,是否会阻止它首先发生?

2 个答案:

答案 0 :(得分:2)

我不完全清楚这些是如何产生的(很明显在某个阶段涉及到FAT文件系统,但除此之外很难说)。

我怀疑你是否能够java识别这些,并自动加载它们。您可能可以编写自己的类加载器来处理这个问题。但是,这样做需要付出非常大的努力,而且目前还不清楚它的效果如何。

我的建议是使用javap来帮助您进行手动重命名。

假设您有一个名为SCHOLA~4.CLA的文件。如果将其重命名为SCHOLA~4.class并将其放在类路径上的某个位置,则执行以下命令:

javap SCHOLA~4

会打印出该类的名称。这应该有助于至少部分地自动化重命名文件的过程。

答案 1 :(得分:1)

  

如何防止javac输出中的短文件名(8.3格式)?

责任不是javac。问题是在文件生命周期的某个地方,它们是使用不支持VFAT的FAT文件系统驱动程序复制的。这导致丢失包含完整文件名的扩展文件属性。

一旦发生这种情况,就无法解决这个问题。如果您想要防止它再次发生,您需要确定具有旧文件系统的计算机的位置,并避免使用它来保存或复制与Java相关的文件。