Как совместить два файла Jar

Используйте функцию int с base в 2, чтобы читать двоичное значение как целое число.

n = int('01010101', 2)

Python 2 использует строки для обработки бинарные данные, поэтому вы должны использовать функцию chr() для преобразования целого в однобайтную строку.

data = chr(n)

Python 3 обрабатывает двоичный код и текст по-разному, поэтому вы необходимо использовать тип bytes . Это не имеет прямого эквивалента функции chr(), но конструктор bytes может принимать список байтовых значений. Мы помещаем n в массив из одного элемента и преобразуем его в объект bytes.

data = bytes([n])

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

with open('out.bin', 'wb') as f:
    f.write(data)

29
задан Dhanuka 15 June 2015 в 05:21
поделиться

9 ответов

Вам нужно извлечь оба файла JAR и восстановить их.

jar -xvf jar1.jar tmp
jar -xvf jar2.jar tmp

cd tmp
jar -cvf jar3.jar .

Пожалуйста, обратитесь к ниже ответу .

8
ответ дан adarshr 15 June 2015 в 05:21
поделиться

Используйте zipgroupfileset с заданием Ant Zip

<zip destfile="out.jar">
    <zipgroupfileset dir="lib" includes="*.jar"/>
</zip>

Может помочь вам.

5
ответ дан ykombinator 15 June 2015 в 05:21
поделиться

Конечно, просто извлеките два файла jar и воссоздайте новый

$ mkdir tmp
$ (cd tmp; unzip -uo ../jar1.jar)
$ (cd tmp; unzip -uo ../jar2.jar)
$ jar -cvf combined.jar -C tmp .

Материал с tmp гарантирует, что два существующих файла jar будут извлечены в чистый каталог, а затем новый из что.

Помните, что вам также может потребоваться объединить любые содержащиеся в нем manifest.mf файлы, и, если они есть, также включите опцию «-m» в эту файловую команду.

71
ответ дан Community 15 June 2015 в 05:21
поделиться

Если вы используете 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 добавьте это в app / 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)

    }
 }
}
2
ответ дан Charlie Dalsass 15 June 2015 в 05:21
поделиться

Просто распакуйте оба jar-файла, затем заархивируйте результаты в один zip-файл и переименуйте его в jar.

Но, как сказал адаршр: для этого лучше использовать команду jar.

1
ответ дан Daniel 15 June 2015 в 05:21
поделиться

Существует также плагин eclipse fatjar.

1
ответ дан initialZero 15 June 2015 в 05:21
поделиться

Извлеките обе банки и создайте новую. (Используйте команды jar, показанные выше). Одно предостережение о файле манифеста заключается в том, что вы хотите извлечь файл jar, файл манифеста которого вы хотите сохранить в последнем.

0
ответ дан sumanth.donthula 15 June 2015 в 05:21
поделиться
<?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, который является комбинацией всех банок.

1
ответ дан Allan 15 June 2015 в 05:21
поделиться

Я знаю, что это старый вопрос, и я просто хотел добавить свои два цента (пока нет комментариев, поэтому создаю новый ответ).

Я вижу значение в ответе sumanth.donthula, поскольку проблема для всех нас, сливающихся в jar, заключается в том, как обращаться с файлами манифеста. В моем случае я хотел объединить некоторые библиотечные файлы (в основном сгенерированный клиентский код веб-службы) в банку приложения, написанного мной. Это было нормально, чтобы заменить манифесты с моей собственной банке.

Самый простой способ сделать это - позаботиться о порядке, в котором вы распакуете исходные файлы (как отметили Alnitak и sumanth.donthula).

Я хотел использовать задание zip ant (спасибо, ykombinator, за идею). Оказалось, что единственный способ контролировать порядок сжатия / упаковки - это переименование файлов. См. Мою цель муравья ниже.

Выходной каталог в моем примере называется codemodule.dir (я создал модуль кода FileNet). Остальные имена говорят сами за себя. Важным шагом является переименование jar приложения в 0 _..., чтобы он стал первым по порядку. Таким образом, его манифест будет сохранен, так как для атрибута duplicate задачи zip ant установлено сохранение.

<target name="merge_jars">
    <delete dir="${codemodule.dir}" quiet="true" />
    <mkdir dir="${codemodule.dir}" />
    <copy todir="${codemodule.dir}">
        <fileset dir="${lib.dir}" includes="*.jar"/>
        <fileset dir="${basedir}" includes="${app-name}.jar"/>
    </copy>
    <move file="${codemodule.dir}/${app-name}.jar" tofile="${codemodule.dir}/0_${app-name}.jar"/>
    <zip destfile="${codemodule.dir}/${app-name}-fat.jar" duplicate="preserve">
      <zipgroupfileset dir="${codemodule.dir}">
        <include name="*.jar"/>
      </zipgroupfileset>
    </zip>

0
ответ дан booFar 15 June 2015 в 05:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: