3

我有以下文件:

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 内容jar tf jar/cities.jar给了我:

META-INF/
META-INF/MANIFEST.MF
cities/TerrainMesh.class

如您所见,TerrainMesh$Vertex.classJAR 文件中缺少 。可以预见的是,当调用TerrainMesh使用内部Vertex类的方法时,我得到java.lang.NoClassDefFoundError. 我很确定这是因为内部类不包含在 JAR 中。

如何将内部类放入 JAR 文件中?jar cf忽略它似乎真的很奇怪。

对于它的价值,我已经验证jar tf在其他人制作的 JAR 文件上运行确实显示了内部类。

4

1 回答 1

5

解决方案是在调用时避开美元符号jar cf

jar cf jar/cities.jar -C java_classes "cities/TerrainMesh.class" -C java_classes "cities/TerrainMesh\$Vertex.class"
于 2012-11-05T00:33:40.873 回答