Java 异常:缺少manifest.properties

Java 异常:缺少manifest.properties,java,exception,opennlp,Java,Exception,Opennlp,我是opennlp的新手,我越来越缺少manifest.properties异常当我执行以下代码时,请告诉我避免这种情况的建议 public class PrePostProcessing_Peregrine { public Map<String,Set<String>> btntMap; public Map<String, String> fishMap; public SentenceModel sModel; public Sentenc

我是opennlp的新手,我越来越缺少manifest.properties异常当我执行以下代码时,请告诉我避免这种情况的建议

   public class PrePostProcessing_Peregrine  {


public Map<String,Set<String>> btntMap;
public Map<String, String> fishMap;
public SentenceModel sModel;
public SentenceDetectorME sentDet;
public Map<String,Set<String>> topBottomTermSet;

public PrePostProcessing_Peregrine() throws IOException {


    FileInputStream str=new FileInputStream("/home/rajendraprasad.yk/Desktop/data/en-sent.bin");
    System.out.println(str+"===================>");
     SentenceModel sModel = new SentenceModel(str);
     System.out.println("===================model =================>"+sModel);
    sentDet = new SentenceDetectorME(sModel);
    System.out.println("===================>sentDet "+sentDet);
    System.err.println("Sentence Detector Initialized");
public类预处理\u Peregrine{
公共地图;
公共地图;
公共句子模型;
公开宣判;
公共地图术语集;
公共预处理_Peregrine()引发IOException{
FileInputStream str=newfileinputstream(“/home/rajendraprasad.yk/Desktop/data/en sent.bin”);
System.out.println(str+“===============================>”;
SentenceModel sModel=新SentenceModel(str);
System.out.println(“==========================================================>”+sModel);
sentDet=新的句子检测器(sModel);
System.out.println(“======================>sentDet”+sentDet);
System.err.println(“句子检测器已初始化”);
例外情况是:

opennlp.tools.util.InvalidFormatException: Missing the manifest.properties!
    at opennlp.tools.util.model.BaseModel.validateArtifactMap(BaseModel.java:217)
    at opennlp.tools.sentdetect.SentenceModel.validateArtifactMap(SentenceModel.java:78)
    at opennlp.tools.util.model.BaseModel.<init>(BaseModel.java:142)
    at opennlp.tools.sentdetect.SentenceModel.<init>(SentenceModel.java:73)
    at com.molcon.Text_Mining.PrePostProcessing_Peregrine.<init>(PrePostProcessing_Peregrine.java:66)
    at com.molcon.Text_Mining.TextMining.peregrineRun(TextMining.java:207)
    at com.molcon.Text_Mining.TextMining.process_journals_for_Mining(TextMining.java:108)
opennlp.tools.util.InvalidFormatException:缺少manifest.properties!
在opennlp.tools.util.model.BaseModel.validateArtifactMap(BaseModel.java:217)上
在opennlp.tools.sentdetect.SentenceModel.validateArtifactMap(SentenceModel.java:78)上
在opennlp.tools.util.model.BaseModel.(BaseModel.java:142)
在opennlp.tools.sentdetect.SentenceModel上(SentenceModel.java:73)
在com.molcon.Text_Mining.PrePostProcessing_Peregrine.(PrePostProcessing_Peregrine.java:66)
位于com.molcon.Text_Mining.TextMining.peregrineRun(TextMining.java:207)
位于com.molcon.Text\u Mining.TextMining.process\u journals\u for\u Mining(TextMining.java:108)
我在
FileInputStream modelIn=newfileinputstream(“/home/rajendraprasad.yk/Desktop/data/en sent.bin”);
上犯了错误;现在我改为
InputStream modelIn=newfileinputstream(“/home/rajendraprasad.yk/Desktop/data/en sent.bin”);
从这些更改中,我没有得到任何异常,但无法从SentenceModel加载文件


当我执行这一行时,
SentenceModel sModel=new-SentenceModel(modelIn);
没有得到任何响应,请帮助我了解两个可能的原因:

  • 您使用的模型已损坏,请再次尝试下载
  • 模型的版本与您使用的OpenNLP库的版本不匹配。正如我从官方网站上看到的,模型是特定于版本的,因此您应该尝试了解这是否是您的情况,并采取相应的行动
如果您检查,您将看到
清单.properties
不是一个文件,而是一组硬编码属性:

Properties manifest = new Properties();
manifest.setProperty(MANIFEST_VERSION_PROPERTY, "1.0");
...
artifactMap.put("manifest.properties", manifest);
当您将其与进行比较时,您可以看到,
manifest.properties
找不到,只有
loadModel(in)
可以得出结论,
manifest.properties
应该在模型文件中

为什么它在独立应用程序中工作而不是在Tomcat中工作需要一些调试


正如@5agado所建议的,您的模型的版本可能与库的版本不同。

使用main方法执行时工作正常,但在tomcat服务器的情况下工作正常。那么问题与tomcat/webapp配置有关。您应该提供MANIFEST.MF文件,或者至少检查各种路径是否正确。我已经将完整的代码放在re和我在执行以下代码时没有得到任何响应:SentenceModel sModel=new SentenceModel(str);即使是异常也不出现我不知道MANIFEST.MF文件。您能告诉我应该将该文件放在我的应用程序中的何处吗?提前谢谢。我在FileInputStream modelIn=new FileInputStream时出错了(“/home/rajendraprasad.yk/Desktop/data/en sent.bin”);现在我改为InputStream modelIn=new FileInputStream(“/home/rajendraprasad.yk/Desktop/data/en sent.bin”);从这些更改中,我没有得到任何异常,但无法从SentenceModel加载文件。如果知道您正在使用的OpenNLP的确切版本,这会有所帮助。检查指向序列化问题的点—
manifest.properties
没有序列化到文件中,它是在一个构造函数中创建的,但不是在使用
InputStream
。我在这里使用的版本是1.5 OpenNlpIt,您似乎没有使用OpenNLP 1.5.0,调试行号不匹配。抱歉……该版本是OpenNLP 1.5.2,在eclipse中工作正常,但在tomcat服务器的情况下,我在FileInputStream modelIn=new FileInputStream(“/home/rajendraprasad.yk/Desktop/data/en sent.bin”)时出错了;现在我更改为InputStream modelIn=new FileInputStream(“/home/rajendraprasad.yk/Desktop/data/en sent.bin”);通过此更改,我没有收到任何异常,但无法从SentenceModel加载文件。当我执行SentenceModel sModel=new SentenceModel(modelIn)时;我没有从服务器上得到任何响应。正如@5agado所说,现在是进行一些真正调试的时候了:查看如何在独立模式下加载模型,并将其与Tomcat中的加载方式进行比较。