Ответ 1
Вам нужно извлечь оба файла JAR и восстановить его.
jar -xvf jar1.jar tmp
jar -xvf jar2.jar tmp
cd tmp
jar -cvf jar3.jar .
Можно ли объединить два файла jar, чтобы в теге апплета я мог просто сделать что-то вроде
archive="jarjar.jar/jar1.jar"... ...archive="jarjar.jar/jar2.jar"... instead of
archive="jar1.jar"... ...archive="jar2.jar"...
Мне нужно иметь только один файл jar, поэтому размещение двух файлов jar в папке не поможет мне.
Вам нужно извлечь оба файла JAR и восстановить его.
jar -xvf jar1.jar tmp
jar -xvf jar2.jar tmp
cd tmp
jar -cvf jar3.jar .
Конечно, просто извлеките два файла jar и заново создайте новый
$ mkdir tmp
$ (cd tmp; jar -xf ../jar1.jar)
$ (cd tmp; jar -xf ../jar2.jar)
$ jar -cvf combined.jar -C tmp .
Материал с tmp
гарантирует, что два существующих банка будут извлечены в чистый каталог, а затем новый, сделанный из этого.
Имейте в виду, что вам также может понадобиться объединить любые содержащиеся в нем файлы manifest.mf
, а также если в этой команде есть также опция -m.
Используйте zipgroupfileset с Ant Задача zip
<zip destfile="out.jar">
<zipgroupfileset dir="lib" includes="*.jar"/>
</zip>
Можете помочь вам.
Просто разархивируйте оба файла jar, затем запишите результаты в один zip файл и снова переименуйте его в jar.
Но как сказал adarshr: Лучше используйте команду jar для этого.
Существует также плагин fcljse fatjar.
Если вы используете gradle, просто добавьте следующее для build.gradle. Плагинов не требуется. Если вам нужны специальные опции, переходите к плагину Fatjar, как предлагает initialZero.
task superSimpleJar(type: Jar) {
baseName = project.name + '-all'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}
В Android-проекте добавьте это в приложение /build.gradle и запустите "gradlew superSimpleJar". Найти jar в файле build/libs/app-all.jar
task superSimpleJar(type: Jar) {
baseName = project.name + '-all'
from {
configurations.compile.findAll {
it.getName() != 'android.jar'
}.collect {
it.isDirectory() ? it : zipTree(it)
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<project name="zip-test" default="zip" basedir=".">
<target name="zip">
<zip destfile="out.jar">
<zipgroupfileset dir="." includes="*.jar"/>
</zip>
</target>
</project>
сохраните этот код в файле build.xml
и сохраните его в той же папке, где хранятся все файлы jar, которые нужно объединить. Откройте cmd
, укажите путь к папке и выполните команду: ant zip
.
Он будет генерировать out.jar
, который является комбинацией всех банок.