Java OSGI/SPRING-将非源文件夹添加到运行时环境
我正在运行一个基于包的项目(在EclipseRCP中)。在特定的包中,由于基于jar的库代码,我需要访问文件夹。所以在实践中,我的要求是在我的项目中有一个包含配置文件的特定文件夹。如果我将我的项目作为一个普通的java应用程序进行测试,那么一切都会顺利运行,但是当我尝试在osgi中运行它时,它会失败,因为它找不到文件夹。如何将文件夹添加到运行时环境?我试图添加到bundle的运行时类路径配置中,但这并不能解决我的问题 我的包裹清单。我正在尝试添加配置/文件夹Java OSGI/SPRING-将非源文件夹添加到运行时环境,java,spring,eclipse-plugin,osgi,eclipse-rcp,Java,Spring,Eclipse Plugin,Osgi,Eclipse Rcp,我正在运行一个基于包的项目(在EclipseRCP中)。在特定的包中,由于基于jar的库代码,我需要访问文件夹。所以在实践中,我的要求是在我的项目中有一个包含配置文件的特定文件夹。如果我将我的项目作为一个普通的java应用程序进行测试,那么一切都会顺利运行,但是当我尝试在osgi中运行它时,它会失败,因为它找不到文件夹。如何将文件夹添加到运行时环境?我试图添加到bundle的运行时类路径配置中,但这并不能解决我的问题 我的包裹清单。我正在尝试添加配置/文件夹 Manifest-Version:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: net.beaconcontroller.datastore
Bundle-SymbolicName: net.beaconcontroller.datastore
Bundle-Version: 1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Export-Package: net.beaconcontroller.datastore
Bundle-ClassPath: .,
lib/bft-smart-hashserver.jar,
config/
打开清单编辑器,选择build并检查binary build视图中的文件夹,以便在导出插件时包含该文件夹 然后,很可能您没有正确地加载捆绑包/插件资源,这需要以与常规java应用程序不同的方式来完成。下面是一个代码示例,请尝试一下,并让我知道它是否有效
public static String loadResourceAsString(String pluginId,
String resourcePath) throws IOException {
Bundle bundle = Platform.getBundle(pluginId);
URL url = bundle.getResource(resourcePath);
BufferedReader in = new BufferedReader(new InputStreamReader(
url.openStream()));
StringBuilder builder = new StringBuilder();
String inputLine;
while ((inputLine = in.readLine()) != null) {
builder.append(inputLine + System.getProperty("line.separator"));
}
in.close();
return builder.toString();
}
看看我在回答中添加的内容,然后复制/粘贴该方法以加载文件夹中的资源。例如,如果在插件的根目录中有一个名为resources的文件夹,并且该文件夹中的一个文件resource1.txt将是“resources/resource1.txt”,那么路径应该是这样的,但问题是该资源是由jar代码读取的。我无法修改代码,它将尝试读取foo(“./resource/resource1.txt”)。当它这样做的时候,它就失败了。然而,我在我的包袱里做不到这一点。我对正在发生的事情的看法有点不对劲。这听起来可能很愚蠢。但有没有可能因为“资源”文件夹名为config而无法工作?我看到在bundle的当前目录中有一个config文件夹,有或没有我导出我的config“resource”,如果资源是由jar代码读取的,您可能会遇到问题。你知道它是如何加载配置的吗,就像它在做类一样。getResourceAsStream()如果是外部jar代码,它是如何知道包的文件路径的?