运行“jar cf”后,内部类未包含在JAR文件中

时间:2012-11-05 00:29:05

标签: java jar

我有以下文件:

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 会显示内部类。

1 个答案:

答案 0 :(得分:5)

解决方法是在致电jar cf时逃避美元符号:

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