修改非开源Minecraft插件JAR包后重新打包遇主类错误求助
问题根源
你遇到的Cannot find main class不是打包命令jar cvf本身的问题——这个命令仅负责打包文件,不会检查主类。大概率是你打包后误尝试用java -jar运行插件jar导致的,而Minecraft插件是由服务端加载的,根本不需要可执行主类。但如果打包的目录结构不对,也会导致服务端无法识别插件,下面是正确的打包步骤:
正确打包流程
严格保留原文件结构
反编译后的.class文件必须和原插件的包结构完全一致,比如原插件的类在me/myplugin/包下,那你的.class文件就得放在me/myplugin/目录里,不能直接丢根目录。同时必须保留原插件的plugin.yml(这是插件被服务端识别的核心配置,丢了肯定加载失败),还有其他资源文件(比如配置文件夹、语言文件等)也要原封不动保留。精准执行打包命令
进入到所有插件文件的根目录(比如plugin.yml在当前目录,.class文件在./me/下),执行:jar cvf my-modified-plugin.jar ./me ./plugin.yml ./config这里只打包插件需要的内容,别用
.打包所有文件,避免把IntelliJ的缓存、临时编译文件也打包进去,反而引发问题。保留原插件的MANIFEST(如果有特殊配置)
有些插件的META-INF/MANIFEST.MF里有依赖声明或其他配置,你可以从原jar里导出这个文件:jar xf original-plugin.jar META-INF/MANIFEST.MF然后打包时指定这个MANIFEST:
jar cvfm my-modified-plugin.jar META-INF/MANIFEST.MF ./me ./plugin.yml
验证方式
打包完别用java -jar测试,直接把jar扔到Minecraft服务端的plugins文件夹里,启动服务端看日志有没有加载成功的提示。如果服务端报错,先检查plugin.yml的格式是否正确,再确认包结构和原插件完全一致。
内容的提问来源于stack exchange,提问作者Colors

