Maven在构建过程中复制到Java Resource Dir时会损坏WAV文件



我有一个小的Maven Java项目,它需要播放WAV文件,因此,为简单起见,我更喜欢将文件放入src/main/resources/*文件夹中。但是,如果使用AudioSystem.getAudioInputStream(...)从磁盘上加载的同一WAV文件然后将其放入Maven Resources目录中,则该程序将抛出RiffinvalidDataeexception的实例:

com.sun.media.sound.RIFFInvalidDataException: Chunk size too big
    at com.sun.media.sound.RIFFReader.<init>(RIFFReader.java:82)
at com.sun.media.sound.WaveFloatFileReader.internal_getAudioFileFormat(WaveFloatFileReader.java:65)
    at com.sun.media.sound.WaveFloatFileReader.getAudioFileFormat(WaveFloatFileReader.java:55)
    at com.sun.media.sound.WaveFloatFileReader.getAudioInputStream(WaveFloatFileReader.java:117)
    at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1113)
    at se.kth.speech.coin.tangrams.TangramsClient.playSound(TangramsClient.java:276)
    at se.kth.speech.coin.tangrams.TangramsClient.signalGameStart(TangramsClient.java:335)
    ... 17 more

此外,如果我使用VLC尝试在$PROJECT/target/classes/org/coolproject/audio/上打开WAV文件,则该程序实际上会崩溃。原始文件是没有任何问题的

Maven到底在用我的音频文件做什么?我正在使用3.3.9/1.7.0.0.20160603-1931嵌入到Eclipse Neon.3 v4.6.3(构建20170314-1500(中,不幸的是,无法尝试使用Eclipse以外的"适当" Maven实例来构建该项目,因为建筑物取决于建筑物一个旧日食项目的噩梦混合物,包括Java来源和预编译DLL和仅Java的Maven项目。

您可能具有具有副作用的过滤。根据资源插件的文档,您可以这样禁用过滤:

<project>
...
<build>
    ...
    <resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>false</filtering>
    </resource>
    ...
    </resources>
    ...
</build>
...
</project>

要查看文档,请在这里查看

可能是Maven Resources插件在复制到目标目录时正在过滤您的.WAV文件。查看https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html。您可能需要添加排除以确保在该特定文件上没有进行过滤。

最新更新