1

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

我假设 Java IO 将被充分抽象,以至于 API 可以处理这种情况,但事实证明 File 对象仅引用磁盘上的物理文件。

有没有其他方法可以用 GATE API 做到这一点?或者强制 JAR 在运行之前将自己解压缩到临时文件夹的选项?

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

4

2 回答 2

1

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

于 2013-05-13T14:06:45.223 回答
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);
于 2013-05-20T23:05:51.787 回答