java -jar jarname не распаковывает все файлы ресурсов - PullRequest
0 голосов
/ 18 сентября 2011

Я создаю исполняемый jar с maven и добавил следующее в мой pom.xml в разделе сборки

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

И я использую maven-shade-plugin для сборки jar с зависимостями.

Когда я запускаю команду после сборки

java -jar jarName

Она не распаковывает все файлы в каталоге src / main / snmp, по какой-то причине она всегда распаковывает один файл (тот же файл) каждый развремя.Но если я сделаю

jar -xf jarName

, это все правильно разархивирует.

Любая другая вещь, которая мне нужна для использования ресурсов из исполняемого файла jar?

Ответы [ 3 ]

2 голосов
/ 18 сентября 2011

Java -jar не должен ничего извлекать, он должен запускать любой основной метод, который вы объявили в своем манифесте.

Что вы подразумеваете под «использованием ресурсов из исполняемого файла jar»? Если вы имеете в виду доступ к ресурсам на пути к классам из приложения, если вы все делаете правильно, он должен работать нормально, но извлечения нет.

1 голос
/ 18 сентября 2011

Вы определенно не хотите извлекать JAR для его запуска.Это должно быть автономным.Поместите ваши ресурсы в src / main / resources, и они будут встроены в ваш jar-каталог в корневом каталоге.Затем используйте Class.getResource () или Class.getResourceAsStream () , чтобы получить его в качестве ресурса classpath.

Редактировать: На основе вашегокомментарии, первое, о чем я думаю, это пойти вперед и упаковать файлы в ваш JAR, затем во время выполнения использовать File.createTempFile () , чтобы записать их во временный каталог по умолчанию, а затем дать этот каталогв стороннюю библиотеку для использования.Вы можете использовать File.deleteOnExit () для последующей очистки.

1 голос
/ 18 сентября 2011

Команда java -jar jarName.jar пытается выполнить класс, найденный в банке, имя которой дается атрибутом Main-Class в манифесте. Ни в коем случае он не должен разархивировать файл. С другой стороны, команда jar xf jarname.jar должна делать именно это.

Если при запуске программы с java -jar происходит распаковка чего-либо из архива, то это потому, что программа, найденная в архиве, предназначена для этого.

...