Java 如何在Netbeans平台项目中使用ServiceLoader添加SPI
我正试图在Netbeans 8.0中将MP3功能添加到我的Netbeans平台项目中。我知道可以使用ServiceLoader和用于MP3编解码器的SPI轻松地将其添加到javax.sound.sampled库中 所以我下载并解压缩了它,然后在Netbeans中创建了一个Jar包装器模块,其中包含zip文件中的三个Jar(一个Jar位于zip的根目录下,两个Jar位于Java 如何在Netbeans平台项目中使用ServiceLoader添加SPI,java,netbeans,wrapper,netbeans-platform,netbeans-8,Java,Netbeans,Wrapper,Netbeans Platform,Netbeans 8,我正试图在Netbeans 8.0中将MP3功能添加到我的Netbeans平台项目中。我知道可以使用ServiceLoader和用于MP3编解码器的SPI轻松地将其添加到javax.sound.sampled库中 所以我下载并解压缩了它,然后在Netbeans中创建了一个Jar包装器模块,其中包含zip文件中的三个Jar(一个Jar位于zip的根目录下,两个Jar位于lib/下)。然后我让需要MP3功能的模块依赖于这个包装器模块。但是当我在这些模块中调用AudioSystem.getAudioF
lib/
下)。然后我让需要MP3功能的模块依赖于这个包装器模块。但是当我在这些模块中调用AudioSystem.getAudioFileTypes()时,“MP3”不是其中的一种类型(只有“WAVE”、“AU”和“AIFF”)
我错过了什么
我检查了主jar中的META-INF/services
下是否列出了正确的文件
我是否需要在包装器模块中重新创建lib/
结构?我对包装器模块使用的代码库是否有区别?我是否需要在代码中以某种方式通知ServiceLoader
以下是包装器模块的项目元数据:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://www.netbeans.org/ns/project/1">
<type>org.netbeans.modules.apisupport.project</type>
<configuration>
<data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
<code-name-base>org.sil.wrapper.mp3spi</code-name-base>
<suite-component/>
<module-dependencies/>
<public-packages>
<package>javazoom.jl.converter</package>
<package>javazoom.jl.decoder</package>
<package>javazoom.jl.player</package>
<package>javazoom.jl.player.advanced</package>
<package>javazoom.spi</package>
<package>javazoom.spi.mpeg.sampled.convert</package>
<package>javazoom.spi.mpeg.sampled.file</package>
<package>javazoom.spi.mpeg.sampled.file.tag</package>
<package>org.tritonus.share</package>
<package>org.tritonus.share.midi</package>
<package>org.tritonus.share.sampled</package>
<package>org.tritonus.share.sampled.convert</package>
<package>org.tritonus.share.sampled.file</package>
<package>org.tritonus.share.sampled.mixer</package>
</public-packages>
<class-path-extension>
<runtime-relative-path>ext/mp3spi1.9.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/mp3spi1.9.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/tritonus_share.jar</runtime-relative-path>
<binary-origin>release/modules/ext/tritonus_share.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/jl1.0.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jl1.0.1.jar</binary-origin>
</class-path-extension>
</data>
</configuration>
</project>
org.netbeans.modules.apisupport.project
org.sil.wrapper.mp3spi
javazoom.jl.converter
javazoom.jl.decoder
javazoom.jl.player
javazoom.jl.player.advanced
javazoom.spi
javazoom.spi.mpeg.sampled.convert
javazoom.spi.mpeg.sampled.file
javazoom.spi.mpeg.sampled.file.tag
org.tritonus.share
org.tritonus.share.midi
org.tritonus.share.sampled
org.tritonus.share.sampled.convert
org.tritonus.share.sampled.file
org.tritonus.share.sampled.mixer
ext/mp3spi1.9.5.jar
release/modules/ext/mp3spi1.9.5.jar
ext/tritonus\u share.jar
release/modules/ext/tritonus\u share.jar
ext/jl1.0.1.jar
release/modules/ext/jl1.0.1.jar
结果表明SPI工作正常。它可以读取和播放MP3文件。但是AudioSystem.getAudioFileTypes()
列出了可写的文件类型,SPI不提供编写MP3文件的功能。它不包括javax.sound.sampled.spi.AudioFileWriter的提供程序
也许我还应该提到我正在使用Ubuntu,如果这有什么不同的话,尽管我希望最终的可分发版本是跨平台的。