我最近遇到了编译内部应用程序的一个不寻常的问题,正如您从下面可以看到的那样,文件名混合使用短格式和长格式:
-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
命令行开关允许它识别文件,或相反,是否会阻止它首先发生?
答案 0 :(得分:2)
我不完全清楚这些是如何产生的(很明显在某个阶段涉及到FAT文件系统,但除此之外很难说)。
我怀疑你是否能够java
识别这些,并自动加载它们。您可能可以编写自己的类加载器来处理这个问题。但是,这样做需要付出非常大的努力,而且目前还不清楚它的效果如何。
我的建议是使用javap
来帮助您进行手动重命名。
假设您有一个名为SCHOLA~4.CLA
的文件。如果将其重命名为SCHOLA~4.class
并将其放在类路径上的某个位置,则执行以下命令:
javap SCHOLA~4
会打印出该类的名称。这应该有助于至少部分地自动化重命名文件的过程。
答案 1 :(得分:1)
如何防止javac输出中的短文件名(8.3格式)?
责任不是javac
。问题是在文件生命周期的某个地方,它们是使用不支持VFAT的FAT文件系统驱动程序复制的。这导致丢失包含完整文件名的扩展文件属性。
一旦发生这种情况,就无法解决这个问题。如果您想要防止它再次发生,您需要确定具有旧文件系统的计算机的位置,并避免使用它来保存或复制与Java相关的文件。