我想要创建一个jar文件,它可以在任务标签之间找到相似之处。出于这个原因,我使用了WordNet字典的两个java库:JWNL-1.4-rc3和JWI-2.3.3。我还在myProject的myProject文件夹中放置了JWNL库需要的properties.xml文件以进行初始化,以及WordNet字典:
src/main/resources/
properties.xml
WordNet-3.0/dict (dict has 24 files inside)properties.xml文件具有具有以下值的字典路径:
<param name="dictionary_path" value="WordNet-3.0\dict"/>在我的代码中,有两个代码片段如下所示。
此代码初始化JWNL库:
try {
JWNL.initialize(similarities.class.getClassLoader().getResourceAsStream("/properties.xml"));
}
catch (JWNLException e) {
e.printStackTrace();
}similarities是我的主修课。
这是JWI字典的构造函数:
try {
//String path = similarities.class.getProtectionDomain().getCodeSource().getLocation().getPath();
dict=new Dictionary(this.getClass().getClassLoader().getResource("WordNet-3.0\\dict"));
dict.open();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}但是,当我导出一个可执行jar并在控制台中运行它时,我会得到以下错误:
net.didion.jwnl.JWNLException: Properties file invalid or not found
at net.didion.jwnl.JWNL.initialize(JWNL.java:103)
at com.iteforth.annotationToBPM.similarities.main(similarities.java:576)
Exception in thread "main" java.lang.NullPointerException
at edu.mit.jwi.data.FileProvider.<init>(FileProvider.java:191)
at edu.mit.jwi.data.FileProvider.<init>(FileProvider.java:166)
at edu.mit.jwi.data.FileProvider.<init>(FileProvider.java:148)
at edu.mit.jwi.Dictionary.<init>(Dictionary.java:41)
at com.iteforth.annotationToBPM.similarities.<init>(similarities.java:92)
at com.iteforth.annotationToBPM.similarities.main(similarities.java:627)我已经打开了jar文件,并检查了resources文件夹中是否有一个包含properties.xml和WordNet字典的文件夹。我还打开了MANIFEST,我看到了类路径是:. (句号)
关于这个问题,我已经读了三天的许多帖子,但是没有解决我的问题。我会感谢你的帮助。
告诉我是否必须发送其他内容,例如POM.xml或properties.xml文件。
发布于 2016-03-23 10:43:52
您所犯的错误与属性文件的加载有关,但我认为您将得到另一个带有双值加载的错误。
确保您的文件位于jar的根目录。如果源文件位于src/main/resources中,则应该是这种情况,因为它是默认的maven配置。如您所说,如果属性文件位于jar中的"resources“文件夹中,则如下所示:
JWNL.initialize(ClassLoader.getSystemResourceAsStream("resources/properties.xml"));注意:当然,在代码中添加硬编码的绝对路径是个坏主意。
如果您的jar总是从这个目录运行的话,您可以将字典目录放在与jar相同的目录中,并按照上面的代码中的一个相对文件路径访问它(请参阅How does Java resolve a relative path in new File()?)
或者让用户使用命令行参数(https://docs.oracle.com/javase/tutorial/essential/environment/cmdLineArgs.html)或环境变量(https://docs.oracle.com/javase/tutorial/essential/environment/env.html)配置目录路径。
使用环境变量的示例:
https://stackoverflow.com/questions/36174897
复制相似问题