Самый легкий способ объединить выпуск в один файл JAR

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

70
задан Yves M. 10 February 2015 в 16:36
поделиться

10 ответов

Eclipse 3.4 JDT's Выполнимый JAR экспортирует мастер.

В Eclipse 3.5, это было расширено. Теперь Вы можете, выбрал, как Вы хотите рассматривать свои файлы JAR, на которые ссылаются.

33
ответ дан Peter Mortensen 24 November 2019 в 13:19
поделиться

Походит , Муравей Apache - то, что Вы ищете.

-4
ответ дан PaulF 24 November 2019 в 13:19
поделиться

Или использование плагина блока Знатока (mvn assembly:assembly)

3
ответ дан Philip Helger 24 November 2019 в 13:19
поделиться

Существует инструмент, названный автобанка , который просканирует Ваш байт-код и скомпилирует .jar файл с классами, которые это находит, включая (импортированные) классы, на которые ссылаются.

не всегда работает с чем-то как Spring, тем не менее, где Вы определяете имена классов в конфигурации, и это загружается платформой.

3
ответ дан 24 November 2019 в 13:19
поделиться

Существует ProGuard, который не только упаковывает Ваши файлы JAR в один, но он может также оптимизировать, очистка или запутать Ваши файлы класса, делая получающийся файл JAR намного меньшим, чем сумма всех файлов JAR прежде.

я на самом деле попробовал ProGuard инструментом JRST, и это - как Вы сообщили. Я попытался разыскать проблему и нашел, что он коснулся ошибка в библиотеке ICU4J, на которую ссылается jrst. Проблема, что используемая версия ICU далеко устарела прямо сейчас. Таким образом, я заменил icu.jar файл с версией 3.2 ICU4J. Теперь ProGuard находит набор других ошибок/предупреждений о incosistencies с библиотеками JRST.

Мое предположение - то, что ProGuard работает как ожидалось, но библиотеки jrst просто не последовательны. Я не знаю, можно ли сделать намного больше, чем разговор с его разработчиками, так как они должны проверить и обновить зависимости проекта.

8
ответ дан Peter Mortensen 24 November 2019 в 13:19
поделиться

Можно использовать JarJar, который будет использовать затенение пакета, чтобы удостовериться, что файл JAR не конфликтует с другими.

8
ответ дан Peter Mortensen 24 November 2019 в 13:19
поделиться

Если Вы Знаток пользователь, обычно плагин блока делает то, что Вы хотите, или потенциально плагин оттенка, и в некоторых случаях комбинация.

С плагином блока Вы помещаете файл манифеста в свой проект с любыми необходимыми настройками, хотя значения по умолчанию обычно довольно хороши. Здание тогда сделано с

mvn assembly:assembly

Или если у Вас есть более специальные вещи иметь дело с, одна из других целей. Все файлы JAR для включения, взяты преобразователем зависимости Знатока. При использовании плагина оттенка это обычно - часть цели установки, и в одном конкретном проекте я делаю теперь, я делаю

mvn install
mvn assembly:single

assembly:single, цель состоит в том, чтобы работать вокруг пожизненных проблем, в этом случае в приложение Spring .

14
ответ дан Peter Mortensen 24 November 2019 в 13:19
поделиться

Попробовав несколько различных решений, я нашел один JAR самое легкое работать с и сумел суметь обойтись точно что: произведите единственный, исполняемый JAR, который содержит все, в чем я нуждаюсь.

один JAR использует пользовательский загрузчик класса, который может переместиться по вложенным ресурсам. Посмотрите на .bat файл в загрузке, он похож на org.codelutin.jrst. JRST в jrst-0.8.1.jar является основным классом, таким образом, Ваша декларация должна быть похожей на это:

Main-Class: com.simontuffs.onejar.Boot
One-Jar-Main-Class: org.codelutin.jrst.JRST

действительно прохладная вещь состоит в том, что один JAR обработает переходящий параметры командной строки для Вас. Путь к классу обрабатывается пользовательским загрузчиком класса, принимая все ресурсы, в которых Вы нуждаетесь, связываются в единственный JAR.

самый легкий способ использовать один JAR с муравьем; существует пользовательская задача Ant "с одной банкой", которая работает следующим образом (предполагающий, что Вашу декларацию называют "rst.mf"):

<target name="jar-rst">
    <one-jar destfile="rst.jar" manifest="rst.mf">
        <main jar="jrst-0.8.1.jar" />
        <lib>
            <fileset dir="${pathToJars}">
                <include name="batik-util-1.6-1.jar" />
                <include name="icu4j-2.6.1.jar" />
                <include name="commons-collections-3.1.jar" />
                <!-- Snip -->
            </fileset>
        </lib>
    </one-jar>
</target>
27
ответ дан Ashley Mercer 24 November 2019 в 13:19
поделиться

Муравей zipfileset делает задание

<jar id="files" jarfile="all.jar">
    <zipfileset src="first.jar" includes="**/*.java **/*.class"/>
    <zipfileset src="second.jar" includes="**/*.java **/*.class"/>
</jar>
62
ответ дан akuhn 24 November 2019 в 13:19
поделиться

One-JAR 0.97 только что был выпущен на http://one-jar.sourceforge.net , и он был расширен с поддержкой таких фреймворков, как ] Spring и Guice , которые могут создавать проблемы для других подходов. Он также обрабатывает инверсию загрузчика классов - где некоторые файлы JAR являются внешними по отношению к One-JAR (например, драйверы JDBC , которые могут не поставляться в комплекте).

One-JAR - это командная строка с плагинами Ant и Maven 2. Его также просто построить, просто используя инструмент «jar».

Я также могу порекомендовать Eclipse Jar Exporter (Runnable), о котором писал Ференс Хехлер: он проделал огромную работу, придумав простой подход к упаковке набора файлов JAR. Мы с ним работали над One-JAR, но Jar Exporter основан на другой кодовой базе.

5
ответ дан 24 November 2019 в 13:19
поделиться
Другие вопросы по тегам:

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