为一罐正确设置Classpath

时间:2019-04-04 11:38:20

标签: java ant executable-jar onejar sbt-onejar

我有一个Java应用程序,我想使用ant构建文件将所有依赖项打包到一个.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

我一直在尝试使其与One-jar网站中的this示例一起使用。 这是我的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>

0 个答案:

没有答案