2016-10-04 2 views
0

Я уже нашел другое описание для слияния jar-файлов, таких как Fat-jar.Слияние Jar-файлов?

Однако я искал более простое решение, как в приведенном ниже примере.

баночка -cmvf ../manifest.m е myJar.jar Lib/*. Баночка

Может быть кто-нибудь знает правильный синтаксис для объединения двух или более банок в одну?

Он был объединен, но файл не может быть выполнен.


Добавление классов в Classpath флягу файла

Вам может понадобиться ссылаться на классы в других файлах JAR внутри файла JAR.

Например, в типичной ситуации апплет в JAR-файле, чей манифест ссылается на другой JAR-файл (или несколько разных JAR-файлов), который служит в качестве утилит для целей этого апплета.

Вы указываете классы для включения в поле заголовка Class-Path в файле манифеста апплета или приложения. Заголовок Class-Path имеет следующий вид:

Class-Path: jar1-name jar2-name directory-name/jar3-name 

С помощью заголовка Class-Path в манифесте, вы можете избежать необходимости указывать длинный флаг -classpath при вызове Java для запуска приложения. Примечание. Заголовок Class-Path указывает на классы или файлы JAR в локальной сети, а не на файлы JAR в файле JAR или классы, доступные через интернет-протоколы. Чтобы загружать классы в файлы JAR в JAR-файле в путь к классу, вы должны написать собственный код для загрузки этих классов. Например, если MyJar.jar содержит другой JAR-файл с именем MyUtils.jar, вы не можете использовать заголовок класса в манифесте MyJar.jar для загрузки классов в MyUtils.jar в путь класса. Пример

Мы хотим загрузить классы в MyUtils.jar в путь класса для использования в MyJar.jar. Эти два JAR-файла находятся в одном каталоге.

Сначала мы создаем текстовый файл с именем Manifest.txt со следующим содержанием:

Class-Path: MyUtils.jar 

Предупреждение: Текстовый файл должен заканчиваться новой строки или возврата каретки. Последняя строка не будет обрабатываться должным образом, если она не заканчивается новой строкой или возвратом каретки.

Затем мы создаем файл JAR с именем myJar.jar, введя следующую команду:.

банки CFM myJar.jar Manifest.txt MyPackage/* класс

Это создает файл JAR с манифестом с следующее содержание:

Manifest-Version: 1.0 
Class-Path: MyUtils.jar 
Created-By: 1.7.0_06 (Oracle Corporation) 

классы в MyUtils.jar теперь загружаются в путь к классу при запуске myJar.jar.


+0

Зачем даже пытаться объединить банки? Что это будет для вас? Почему вместо этого просто убедитесь, что оба отдельных файла jar можно использовать? –

+0

Я попытался объединить его, потому что я не заботился о папке с библиотеками, которая должна находиться в той же папке, что и главная банка. Спасибо –

ответ

0

Я не уверен, что вы пытаетесь объединить, но предположим, что есть некоторый код, ваш с основным классом и несколько простых библиотек, вы можете распаковать все другие файлы фляги в тот же каталог, добавьте свои классы, добавьте Manifest.mf с заголовком Main-Class:, указывающим на ваш основной класс, а затем jar (zip) все вместе. Таким образом, вы перезаписываете манифесты всех включенных файлов jar и, возможно, других файлов, имеющих одно и то же имя в нескольких банках, но вы можете попробовать.

Что вы получаете банку файл можно запустить с

java -jar myfile.jar 

и класс, определенный в заголовке Main-Class будет использоваться в качестве точки входа, он должен реализовать

метод.

Я не рекомендую такое решение, но есть и другие способы, которые помогут вам справиться с этой задачей. Я знаю, что даже это решение можно автоматизировать, но вы, вероятно, должны взглянуть на maven (например, spring-boot:repackage) или другие инструменты сборки.

+0

Я не знал, что писать для «classpath» в манифест-файле и где разместить изображения. Но почему-то я думал, что кто-то может знать правильный синтаксис, как описано в Oracle-doc. Однако я буду читать о maven-plugin или других инструментах сборки. благодаря –

Смежные вопросы