java.util.zip.ZipException:使用 SentenceModel 设置的代码长度无效

Els*_*Ali 2 java opennlp

我正在使用 OpenNLP 进行句法分析。我写了这些行来加载句子检测器模型:

    InputStream is = getClass().getClassLoader().getResourceAsStream("models/en-sent.bin") ;            
    SentenceModel sModel = new SentenceModel(is);
Run Code Online (Sandbox Code Playgroud)

上面的行抛出异常java.util.zip.ZipException::无效的代码长度设置。

"models/en-sent.bin"位于下"src/main/resources/models/en- token.bin"

当我尝试使用以下方法打印文件路径时:

   System.out.println(getClass().getClassLoader().getResource("models/en-sent.bin"));           
Run Code Online (Sandbox Code Playgroud)

路径显示为:"file:/C:/Users/aaa/workspace/qa/target/classes/models/en-sent.bin"。如果我使用以下方法加载模型:

    InputStream is =  new FileInputStream("src/main/resources/models/en-sent.bin") ;
    SentenceModel sModel = new SentenceModel(is);
Run Code Online (Sandbox Code Playgroud)

它工作正常,但是当我将文件构建到可运行的 jar 中时,此方法将不起作用。任何帮助为什么抛出这个异常?

完整的堆栈异常在这里:

java.util.zip.ZipException: invalid code lengths set
at java.util.zip.InflaterInputStream.read(Unknown Source)
at java.util.zip.ZipInputStream.read(Unknown Source)
at java.io.FilterInputStream.read(Unknown Source)
at java.util.Properties$LineReader.readLine(Unknown Source)
at java.util.Properties.load0(Unknown Source)
at java.util.Properties.load(Unknown Source)
at opennlp.tools.util.model.PropertiesSerializer.create(PropertiesSerializer.java:31)
at opennlp.tools.util.model.PropertiesSerializer.create(PropertiesSerializer.java:27)
at opennlp.tools.util.model.BaseModel.loadModel(BaseModel.java:224)
at opennlp.tools.util.model.BaseModel.<init>(BaseModel.java:173)
at opennlp.tools.sentdetect.SentenceModel.<init>(SentenceModel.java:91)
at com.elsevier.sherpath.syntactic_analysis.QuestionNLPAnalysis.<init>(QuestionNLPAnalysis.java:88)
at com.elsevier.sherpath.main.QuestionProcessing.syntacticAnalysis(QuestionProcessing.java:255)
at com.elsevier.sherpath.main.BatchProcess.main(BatchProcess.java:23)
Run Code Online (Sandbox Code Playgroud)

谢谢

Dul*_*laj 6

您可以设置resource filteringfalse 并包含该 bin 文件,这样它就不会在mvn install.

<resource>
    <directory>your resources directory</directory>
    <filtering>false</filtering>
        <includes>
            <include>your-bin.bin</include>
        </includes>
</resource>
Run Code Online (Sandbox Code Playgroud)

异常的原因是 maven 正在尝试使用pom.xml属性重新创建您的 bin 文件,因此,bin目标目录中的文件将与您的资源文件夹中的文件不同。因此resource filteringbin文件设置false 。