2012-11-05 43 views
3

我有以下文件後:內部類不包含在JAR文件中運行「罐子CF」

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確實顯示內部類。

回答

4

的解決方案是爲了躲避美元符號調用時jar cf

jar cf jar/cities.jar -C java_classes "cities/TerrainMesh.class" -C java_classes "cities/TerrainMesh\$Vertex.class"