java - Maven 未将声音资源打包到 JAR 中

标签 java maven audio resources pom.xml

我花了一段时间试图解决这个问题,但没有成功:/

这是我的 POM 部分

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>11</source>
                <target>11</target>
            </configuration>
        </plugin>

        <plugin>
            <!-- Build an executable JAR -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2-beta-5</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>ATComApp.Main</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id> <!-- this is used for inheritance merges -->
                    <phase>package</phase> <!-- bind to the packaging phase -->
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>

    <resources>
        <resource>
            <directory>"src/main/resources"</directory>
            <includes>
                <include>"*/*.wav"</include>
            </includes>
        </resource>
    </resources>
</build>

<dependencies>
    <dependency>
        <groupId>com.googlecode.lanterna</groupId>
        <artifactId>lanterna</artifactId>
        <version>3.0.3</version>
    </dependency>
</dependencies>

当我构建项目时,它运行但没有发现声音:

声音部分的代码是:

@Override
public void run() {
    try {
        File ostFile = new File(Constants.OST_PATH);

        if (!ostFile.exists()) {
            System.out.println("OST File not found.");
            return;
        }

        AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(ostFile);
        Clip clip = AudioSystem.getClip();
        clip.open(audioInputStream);
        clip.loop(Clip.LOOP_CONTINUOUSLY);

    } catch (Exception ex) {
        System.out.println("Sound error.");
        ex.printStackTrace();

当我使用 IDE 运行时,它运行良好,当我打包时,它运行但没有声音,打印我的字符串“OST 文件未找到”。 ...当我使用存档管理器打开 JAR 时,资源文件夹不存在。

有人知道为什么会发生这种情况吗? 非常感谢!

最佳答案

Maven 是约定驱动的。即,您不需要包含 <resources> pom 中的部分。只需将 WAV 文件放在 src/main/resources/YOUR_PACKAGE/ 下即可并使用类加载器加载它们。

如果

/src/main/java/com/yourorg/MyClass.java
         |
         /resources/com/yourorg/sounds.wav

然后你可以写(未经测试):

package com.yourorg;

import ...

public class MyClass {

    @Override
    public void run() {
        try {
            // look up resource in the class path, which resides in the same package
            URL ostFile = MyClass.class.getResource("sounds.wav");

            if (ostFile == null) {
                System.out.println("OST File not found.");
                return;
            }

            AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(ostFile);
            Clip clip = AudioSystem.getClip();
            clip.open(audioInputStream);
            clip.loop(Clip.LOOP_CONTINUOUSLY);

        } catch (Exception ex) {
            System.out.println("Sound error.");
            ex.printStackTrace();
    }
}

关于java - Maven 未将声音资源打包到 JAR 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62473335/

相关文章:

java - Maven编译错误: (use -source 7 or higher to enable diamond operator)

audio - 如何使用 ffmpeg 播放音频文件(.mp3、.flac、.wav)然后循环播放(每隔几秒混合一次)另一个音频文件(wav)

java - Junit + getResourceAsStream 返回 Null

java - Wildfly 8 和焊接 CDI 通过提供程序方法注入(inject)不注入(inject)依赖项

java - @Transaction - 如何在同一个事务中提交另一个方法

java - 仅接受用户对 ArrayList 的唯一输入

tomcat - 如何向 'mvn tomcat:run'命令指定Tomcat实例?

java - 使用 java -classpath 命令执行主类时出现 NoClassDefFoundError

java - track.add、MidiEvent 和 ShortMessage(音量控制)

audio - 用神经网络找到千分之一的 gem ?还有什么吗