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

rlk*_*024 3 java jar

我有以下文件:

java_classes/TerrainMesh.class
java_classes/TerrainMesh$Vertex.class
Run Code Online (Sandbox Code Playgroud)

它们是从以下来源编译的:

class TerrainMesh {
  static class Vertex {
      // ...
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在构建一个这样的JAR文件:

jar cf jar/cities.jar -C java_classes "cities/TerrainMesh.class" -C java_classes "cities/TerrainMesh$Vertex.class"
Run Code Online (Sandbox Code Playgroud)

检查JAR内容jar tf jar/cities.jar给了我:

META-INF/
META-INF/MANIFEST.MF
cities/TerrainMesh.class
Run Code Online (Sandbox Code Playgroud)

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

如何将内部类放入JAR文件中?jar cf忽视它似乎很奇怪.

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

rlk*_*024 5

解决方案是在呼叫时逃避美元符号jar cf:

jar cf jar/cities.jar -C java_classes "cities/TerrainMesh.class" -C java_classes "cities/TerrainMesh\$Vertex.class"
Run Code Online (Sandbox Code Playgroud)