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