让GATE嵌入在JAR中使用gateHome

时间:2013-05-12 23:43:11

标签: java gate

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

我认为Java IO可以充分抽象,API可以处理这种情况,但事实证明File对象只引用磁盘上的物理文件。

有没有其他方法可以使用GATE API执行此操作?或者一些选项强制JAR在运行之前将自己解压缩到临时文件夹?

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

2 个答案:

答案 0 :(得分:1)

根据我对GATE的经验,我可以建议使用本地驱动器所需的资源解压缩jar。通常我将所有资源(ANNIE,Tokenizer,JAPE,Gazetteers)保存在一个文件夹中,并使用相对路径来访问这些资源。 作为附加选项,您可以尝试使用:http://jenkins.gate.ac.uk/job/GATE-Nightly/javadoc/gate/Gate.html#runInSandbox(boolean)选项。

答案 1 :(得分:0)

根据ashingel的建议,如果从JAR文件运行,我决定将门资源解压缩到临时文件夹中。

有关如何解压缩文件夹的详细信息,请参阅我的答案:https://stackoverflow.com/a/16659655/281469

以下是我在初始化时所做的示例用法(注意:Apache Commons IO依赖):

//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);