Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OSGI/SPRING-将非源文件夹添加到运行时环境_Java_Spring_Eclipse Plugin_Osgi_Eclipse Rcp - Fatal编程技术网

Java OSGI/SPRING-将非源文件夹添加到运行时环境

Java OSGI/SPRING-将非源文件夹添加到运行时环境,java,spring,eclipse-plugin,osgi,eclipse-rcp,Java,Spring,Eclipse Plugin,Osgi,Eclipse Rcp,我正在运行一个基于包的项目(在EclipseRCP中)。在特定的包中,由于基于jar的库代码,我需要访问文件夹。所以在实践中,我的要求是在我的项目中有一个包含配置文件的特定文件夹。如果我将我的项目作为一个普通的java应用程序进行测试,那么一切都会顺利运行,但是当我尝试在osgi中运行它时,它会失败,因为它找不到文件夹。如何将文件夹添加到运行时环境?我试图添加到bundle的运行时类路径配置中,但这并不能解决我的问题 我的包裹清单。我正在尝试添加配置/文件夹 Manifest-Version:

我正在运行一个基于包的项目(在EclipseRCP中)。在特定的包中,由于基于jar的库代码,我需要访问文件夹。所以在实践中,我的要求是在我的项目中有一个包含配置文件的特定文件夹。如果我将我的项目作为一个普通的java应用程序进行测试,那么一切都会顺利运行,但是当我尝试在osgi中运行它时,它会失败,因为它找不到文件夹。如何将文件夹添加到运行时环境?我试图添加到bundle的运行时类路径配置中,但这并不能解决我的问题

我的包裹清单。我正在尝试添加配置/文件夹

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代码,它是如何知道包的文件路径的?