簡體   English   中英

Maven 沒有將聲音資源打包到 JAR

[英]Maven not packing sound resources into JAR

我一直在試圖弄清楚這一點,但無濟於事:/

這是我的 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 運行時,它運行良好,而當我使用 package 時,它運行但沒有聲音,打印我的字符串“找不到 OST 文件。”...當我使用存檔管理器打開 JAR 時,資源文件夾不存在。

有誰知道為什么會這樣? 非常感謝!

Maven 是約定俗成的。 也就是說,您不需要在 pom.xml 中包含<resources>部分。 只需將 WAV 文件放在src/main/resources/YOUR_PACKAGE/下,然后使用 class 加載器加載它們。

如果

/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();
    }
}

如果您嘗試識別 a.jar 中的文件,則需要使用URL而不是File IDE 能夠使用File ,因為所有文件都位於可見目錄中。 但是一旦資源在 jar 內, File命令將不再起作用。

關於 Maven 的 IDK 足以評論為什么資源沒有被壓縮。 但是當我在 CLI 上編譯程序時,我必須手動添加一個將資源處理到編譯程序的文件系統中的步驟。 AFAIK, javac不會這樣做。 (可能有java的 CLI 選項可以提供此功能,但如果有的話,我還沒有學習過)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM