Java 将GATE嵌入到JAR中与gateHome一起工作

Java 将GATE嵌入到JAR中与gateHome一起工作,java,gate,Java,Gate,我试图将GATE应用程序作为独立的JAR文件分发。我在项目中的类路径中将GATE插件作为资源,但是setGateHome()需要一个File对象,我无法从打包在JAR中的资源中获取该对象 我假设JavaIO将被充分抽象,API可以处理这种情况,但事实证明,文件对象只引用磁盘上的物理文件 有没有其他方法可以通过GateAPI实现这一点?或者在运行之前强制jar解压到一个临时文件夹 这是一个servlet,但在这种情况下,可以从servlet获取一个文件对象(我认为因为WAR文件是由servlet容

我试图将GATE应用程序作为独立的JAR文件分发。我在项目中的类路径中将GATE插件作为资源,但是
setGateHome()
需要一个File对象,我无法从打包在JAR中的资源中获取该对象

我假设JavaIO将被充分抽象,API可以处理这种情况,但事实证明,文件对象只引用磁盘上的物理文件

有没有其他方法可以通过GateAPI实现这一点?或者在运行之前强制jar解压到一个临时文件夹


这是一个servlet,但在这种情况下,可以从servlet获取一个文件对象(我认为因为WAR文件是由servlet容器解压缩的)。

根据我在GATE的经验,我可以建议在本地驱动器的某个地方解包jar所需的资源。通常我保留所有资源(ANNIE、Tokenizer、JAPEs、Gazetters)并使用这些资源的相对路径。
作为附加选项,您可以尝试使用:选项

根据我在GATE的经验,我可以建议在本地驱动器的某个地方解包jar所需的资源。通常我将所有资源(ANNIE、Tokenizer、JAPEs、Gazetters)保存在一个文件夹中,并使用这些资源的相对路径。
作为附加选项,您可以尝试使用:选项

根据ashingel的建议,如果gate资源是从JAR文件运行的,我决定在初始化时将其解压缩到一个临时文件夹中

有关如何解压缩文件夹的详细信息,请参见我的回答:

下面是我在初始化时所做工作的一个示例用法(注意:Apache Commons IO dependency):


根据ashingel的建议,我决定在初始化时将gate资源解包到一个临时文件夹中,如果它是从JAR文件运行的

有关如何解压缩文件夹的详细信息,请参见我的回答:

下面是我在初始化时所做工作的一个示例用法(注意:Apache Commons IO dependency):

//My GATE resources are in the "/gate" folder of the JAR
URI url = getClass().getResource("/gate").toURI();

File gateHome;
if (url.isOpaque()) {
    logger.info("Unpacking GATE resources from JAR");
    String tempDirectoryPath = FileUtils.getTempDirectoryPath();
    String gateResource = "gate";
    //Delete any existing temporary directory
    FileUtils.deleteDirectory(new File(FilenameUtils.concat(tempDirectoryPath, gateResource)));
    String gateHomePath = extractDirectoryFromClasspathJAR(getClass(), gateResource, tempDirectoryPath);
    gateHome = new File(gateHomePath);

} else {
    gateHome = new File(url);
}
Gate.setGateHome(gateHome);