有没有可靠的方法来获取插件的JAR文件的名称?

时间:2012-09-06 15:38:40

标签: java jar minecraft bukkit

使用bukkit API,是否可以进行类似以下伪代码的调用:

Bukkit.getPluginManager().getPlugin("PluginName").getJarFile();

对于像MobBountyReloaded这样的插件,它会返回plugins/MobBountyReloaded_v235.jar

我尝试使用众所周知的命名方案来查找文件,例如只需将.jar<version>.jar附加到插件的名称,但这并不总能产生正确的结果。上述示例失败,因为plugin.yml文件中的版本号仅为235而不是_v235,而某些插件使用<PluginName>-<Version>-<buildnumber>.jar等方案。

有一种简单的方法可以实现这一目标吗?每个加载的插件的文件信息必须在内存中某处,不是吗?

2 个答案:

答案 0 :(得分:6)

如果您从插件加载了类,则可以使用代码源功能来获取加载类的jar。

Bukkit.getPluginManager().getPlugin("PluginName").getClass().getProtectionDomain().getCodeSource().getLocation();

答案 1 :(得分:1)

在你的org.bukkit.plugin.java.JavaPlugin子类中,

this.getFile().getAbsoluteFile();

返回包含路径的完整jar文件名 只有this.getFile()返回如下内容: “插件\ CLJ-的Minecraft-1.0.1-快照standalone.jar”

就我而言,我需要这个: “file:/ S:/cb/plugins/memorystone-2.0.0-SNAPSHOT.jar”作为URL(不是URI) 这是: 。this.getFile()toURI()的toURL();

在[org.bukkit / bukkit“1.4.5-R0.3-SNAPSHOT”中测试