Как использовать ServiceLoader в проекте платформы Netbeans для добавления SPI

Я пытаюсь добавить возможности MP3 в свой проект платформы Netbeans в Netbeans 8.0. Я понимаю, что это можно легко добавить в библиотеки javax.sound.sampled с помощью ServiceLoader и SPI для кодеков MP3.

Поэтому я загрузил MP3 SPI и разархивировал его, а затем в Netbeans создал модуль-оболочку Jar с три jar-файла, которые были в zip-файле (один jar был в корне zip-файла, а два — под lib/). Затем я сделал модули, которым нужна функциональность MP3, зависимыми от этого модуля-оболочки. Но когда я вызываю AudioSystem.getAudioFileTypes() в этих модулях, «MP3» не является одним из типов (только «WAVE», «AU» и «AIFF»)

Что мне не хватает?

Я проверил, что правильные файлы перечислены под 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>

person Toby 1 Kenobi    schedule 28.11.2014    source источник
comment
Возможно, мне следует также упомянуть, что я использую Ubuntu, если это имеет значение, хотя я хочу, чтобы окончательный дистрибутив был кроссплатформенным.   -  person Toby 1 Kenobi    schedule 05.12.2014


Ответы (1)


Получается, что SPI работает нормально. Он может читать и воспроизводить файлы MP3. Однако AudioSystem.getAudioFileTypes() перечисляет типы файлов, доступные для записи, а SPI не дает возможности записывать файлы MP3. Он не включает поставщика для javax.sound.sampled.spi.AudioFileWriter

person Toby 1 Kenobi    schedule 07.12.2014