Установите Classpath правильно для одной банки - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть Java-приложение, которое я хочу упаковать в .jar-файл со всеми его зависимостями, используя файлы сборки ant.

Для этого я использую инструмент One-Jar, чтобы собрать все вместе. К сожалению, я не могу правильно определить путь к классам, так как файл .jar отображается в правой папке конечного файла .jar, но как только я запускаю его, классы не могут быть найдены. Java бросает:

Exception in thread "main" java.lang.reflect.InvocationTargetException
...
Caused by: java.lang.NoClassDefFoundError: class/from/external/library
...
Caused by: java.lang.ClassNotFoundException: class.from.external.library

Я пытался заставить его работать с этим примером с сайта jar. Вот моя цель build.xml:

<target name="dist" depends="compile" >
    <mkdir dir="${build}/lib/classes"/>
    <unzip dest="${build}/lib/classes">
        <fileset dir="lib">
            <include name="*.jar"/>
        </fileset>
    </unzip>

    <jar destfile="${build}/lib/lib.jar" >
        <fileset dir="${build}/lib/classes"/>
    </jar>
    <one-jar destfile="${build}/release/my-tool.jar" basedir="${build}/bin">
        <manifest>
            <attribute name="One-Jar-Main-Class" value="my.main.Class"/>
            <attribute name="Class-Path" value="./"/>
        </manifest>
        <main>
            <fileset dir="${build}/bin"/>
        </main>
        <lib>
            <fileset dir="${build}/lib">
                <include name="*.jar"/>
            </fileset>
        </lib>
    </one-jar>
    <delete dir="${build}/lib/classes"/>
</target>
...