Основная проблема заключается в том, что текущая версия 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.
Вы можете создать дополнительную цель сборки в файле 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>
Я согласен с Уэвериком. Самый простой способ сделать это с помощью 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"/>