从里面的Class中找到一个jar的路径?

插件xyz应该在Java项目之上运行并生成一些Java代码。 这段代码需要在构建和运行时在插件的jar中提供的类。 因此,插件的jar(或安装目录)应该出现在构建类路径中。

一个插件如何找到它自己的jar /安装目录的确切路径,或者,就此而言,以便携方式找到一些相关插件jar的路径?

背景是我想制作一个用户可以运行的向导来启用项目的xyz特性。 应为用户提供有意义的默认值,以便在何处查找所需的运行时function,并将给定的库添加到构建路径中。

我们用它来查找类的位置:

public static URL getLocation(final Class cls) { final ProtectionDomain pd = cls.getProtectionDomain(); final CodeSource cs = pd.getCodeSource(); return cs.getLocation(); } 

不知道它来自哪里。

提供插件时最可靠的方法是使用org.osgi.framework.Bundle.getEntry(String)获取jar文件的URL,并使用org.eclipse.core.runtime.FileLocator.toFileURL(URL)返回文件系统中jar的绝对路径。

然后您可以选择将该位置用于java项目类路径,或将jar复制到java项目工作区。

有关其他示例,请参阅https://stackoverflow.com/a/8337766/713646 。

PW