我有以下文件:
java_classes/TerrainMesh.class
java_classes/TerrainMesh$Vertex.class
它们是根据以下来源编制的:
class TerrainMesh {
static class Vertex {
// ...
}
}
}
我正在构建一个这样的JAR文件:
jar cf jar/cities.jar -C java_classes "cities/TerrainMesh.class" -C java_classes "cities/TerrainMesh$Vertex.class"
用jar tf jar/cities.jar
检查JAR内容给了我:
META-INF/
META-INF/MANIFEST.MF
cities/TerrainMesh.class
如您所见,JAR文件中缺少TerrainMesh$Vertex.class
。可以预见,当调用TerrainMesh
中使用内部Vertex
类的方法时,我得到java.lang.NoClassDefFoundError
。我很确定这是因为内部类没有包含在JAR中。
如何将内部类放入JAR文件中? jar cf
忽略它似乎很奇怪。
对于它的价值,我已经确认在其他人上制作的JAR文件上运行jar tf
会显示内部类。
答案 0 :(得分:5)
解决方法是在致电jar cf
时逃避美元符号:
jar cf jar/cities.jar -C java_classes "cities/TerrainMesh.class" -C java_classes "cities/TerrainMesh\$Vertex.class"