NetBeans - развертывание всех в одной банке [дубликат]

14
задан Community 23 May 2017 в 12:32
поделиться

3 ответа

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

Рекомендуемое решение - использовать строку Class-Path в файле MANIFEST.MF внутри вашего jar-файла, чтобы указать на необходимые библиотеки (относительные пути разрешены), а затем развернуть все файлы вместе и вызвать его с помощью "java -jar your. jar "

Если вы действительно хотите иметь решение" jar-inside-jar ", мы использовали one-jar в течение нескольких лет, но отказались от него, поскольку наша целевая JVM лучше работала с решением, описанным выше.

http://one-jar.sourceforge.net/

Я использовал его с плагином fatjar в Eclipse. У меня нет опыта встраивания его в Netbeans, но его просто встроить в скрипт ant, который, как мне кажется, в любом случае используют NEtbeans.

13
ответ дан 1 December 2019 в 06:53
поделиться

Вы можете создать дополнительную цель сборки в файле build.xml. И использовать zipfileset и zipgroupfileset , чтобы создать одну большую банку например

<target name="YourBigJar" depends="-post-jar">
  <jar destfile="BigJar.jar">
    <zipfileset src="dist/Project1.jar"/>
    <zipfileset src="../OtherProject/dist/project2.jar"/>
    <zipgroupfileset dir="../libs/."/>
  </jar>
</target>
12
ответ дан 1 December 2019 в 06:53
поделиться

Я согласен с Уэвериком. Самый простой способ сделать это с помощью NetBeans - добавить настраиваемую цель в файл build.xml. (Между прочим, в силу использования NetBeans вы используете Ant, поскольку NetBeans использует Ant для создания файла jar.)

Целевой объект Ant от Waverick, по-видимому, предназначен для слияния скомпилированного кода из другого проекта NetBeans в текущий файл jar проекта. Мои цели ниже делают именно то, что вы ищете.

<target name="-unjar-and-copy-lib-jars">
    <unjar dest="${build.classes.dir}">
        <fileset dir="lib">
            <include name="**/*.jar"/>
        </fileset>
        <patternset>
            <exclude name="META-INF/**"/>
            <exclude name="/*"/>
        </patternset>
    </unjar>
</target>

<target depends="init,compile,-pre-pre-jar,-pre-jar,-unjar-and-copy-lib-jars" name="fat-jar">
    <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
    <jar destfile="${dist.jar}">
        <fileset dir="${build.classes.dir}"/>
        <manifest>
            <attribute name="Main-Class" value="${main.class}"/>
        </manifest>
    </jar>
    <echo>To run this application from the command line without Ant, try:</echo>
    <property location="${dist.jar}" name="dist.jar.resolved"/>
    <echo>java -jar "${dist.jar.resolved}"</echo>
</target>

<target depends="clean,fat-jar" name="clean-and-fat-jar"/>
12
ответ дан 1 December 2019 в 06:53
поделиться
Другие вопросы по тегам:

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