Eclipse setClassLoader()Java

Eclipse setClassLoader()Java,eclipse,junit,eclipse-plugin,classloader,Eclipse,Junit,Eclipse Plugin,Classloader,我有一个带有一个JUnit测试的JavaProject,该测试有以下代码: ClassLoader sysClassLoader = ClassLoader.getSystemClassLoader(); //Get the URLs URL[] urls = ((URLClassLoader)sysClassLoader).getURLs(); for(int i=0; i< urls.length; i++) { System.out.println(urls[i].getFi

我有一个带有一个JUnit测试的JavaProject,该测试有以下代码:

ClassLoader sysClassLoader = ClassLoader.getSystemClassLoader();
//Get the URLs
URL[] urls = ((URLClassLoader)sysClassLoader).getURLs();
for(int i=0; i< urls.length; i++) {
    System.out.println(urls[i].getFile());
}
但是当我运行我的Eclipse插件(我的插件有JUnitCore,并从项目中运行一些(不是全部)JUnit测试)时,输出仅为:

/usr/lib/eclipse/plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar
我需要ClassLoader中的Bin目录,那么,如何设置ClassLoader的URL

-- 干杯
ZéCarlos

您不能更改类加载器使用的URL。我真的不知道你想在这里做什么,但我怀疑以下其中一项会有所帮助:

1) 您可以使用所需的URL构造自己的
URLClassLoader
,并使用它来加载类

2) Eclipse提供了在插件中查找资源的特定机制:例如,请参阅

从我们下面的讨论中,听起来您希望能够使用运行时动态确定的另一个插件的
ClassLoader
。我不能说我曾经做过这项特定的任务——Eclipse有一些扩展点,您通常会使用这些扩展点来完成这类任务——但我会尝试以下内容。您将需要在另一个插件中定义的类的名称——也许开发人员会以某种方式将其提供给您的工具。那么你可以说

Bundle b = Bundle.getBundle(pluginIdOfOtherPlugin);
Class c = b.loadClass(nameOfTheOneKnownClass);
ClassLoader loader = c.getClassLoader();

然后,您可以使用
loader
做任何您想做的事情(包括创建您自己的委托给它的URLClassLoader)。

如果您贡献了一个eclipse插件,并且希望在您的工作区中使用一个java项目,您需要查看。作为一个eclipse插件,Nano类路径对运行时插件实例不可用

要获取类路径信息,请签出


你如何发布Nano会很重要吗?在同一个JVM中还是在不同的JVM中?

嗨,欧内斯特。我不想从插件内部加载文件/文件夹。我想将ClassLoader设置为指向JavaProject的Bin目录。正如我上面所说的,我想要类加载器中的“/home/ubfeup/workspace/Nano/bin/”,因此您需要创建自己的URLClassLoader,为它提供该目录的文件URL,然后通过该类加载器加载您的类。如果我有一个目录“/home/ubfeup/workspace/Nano/data/”,并为JUnit测试提供一些输入,如何为该目录创建URLClassLoader?(这是一个简单的例子,如何动态查找数据目录?)我需要在使用插件执行的项目的同一类路径中运行Eclipse插件。但是我不能将插件的类路径设置为在同一类路径中运行!例如,我的插件是EPlugin,在Java项目(在工作区中)XPTO上执行JUnit测试,因此我的插件“EPlugin”需要在XPTO项目的同一类路径中运行,以获得所有需要的目录……这非常简单:使XPTO导出其清单中需要的任何内容,并使XPTO成为EPlugin清单中EPlugin的依赖项。然后,如果您需要在EPlugin中加载更多的类,请使用新的URL创建一个URLClassLoader,并将其委托给EPlugin的应用程序类加载器。看起来你把这件事做得比实际困难多了。你的Nano项目是纯java项目吗?您的eclipse插件需要理解Nanon类路径吗?
Bundle b = Bundle.getBundle(pluginIdOfOtherPlugin);
Class c = b.loadClass(nameOfTheOneKnownClass);
ClassLoader loader = c.getClassLoader();