执行Apache Ant生成的可执行jar导致的错误

时间:2011-10-08 14:26:13

标签: java apache ant build

我创建了一个Java应用程序,它包含以下Apache Ant构建文件:

<?xml version="1.0" ?>

<project name="GUI" basedir=".">

<property name="version" value="0.2"/>
<property name="bin.dir"                        value="${basedir}/bin"/>
<property name="gui_bin.dir"                    value="${basedir}/gui_bin"/>
<property name="src.dir"                        value="${basedir}/src"/>
<property name="jar.dir"                        value="${basedir}/jar"/>
<property name="images.dir"                     value="${basedir}/images"/>
<property name="user.properties"                value="${basedir}/user.properties"/>


<!-- ============ Clean target =================== -->
<!-- Delete output files and directories -->

<target name="clean" description="Clean the directory: build, ${gen-src.dir}*, ${test.report.dir}">
    <delete dir="${jar.dir}"/>
</target>


<!-- 
============ Compile target =================== 
-->
<target name="compile">
    <mkdir dir="${gui_bin.dir}"/>
    <javac srcdir="${src.dir}" destdir="${gui_bin.dir}" classpath="${basedir}/EFCore-1.0.0.jar" fork="true">
    </javac>
</target>


<!-- 
============ Create Executable Jar target =================== 
-->
<target name="jar" depends="compile">
    <mkdir dir="${jar.dir}"/>
        <jar jarfile="jar/UPHECGui.jar" basedir="gui_bin" includes="**/*.class">
            <fileset dir="${basedir}">
                <include name="images/**/; EFCORE-1.0.0.jar" />
                </fileset>
                <manifest>
                    <attribute name="Main-Class" value="eu.keep.uphec.GUI"/>
                    <attribute name="Class-Path" value="EFCORE-1.0.0.jar"/>
                </manifest>
                <filelist dir="${basedir}" files="user.properties"/>
        </jar>
    </target>

<!-- 
    ============ Run target =================== 
    -->
<target name="run" depends="jar">
    <java classpath="jar/UPHECGui.jar;EFCORE-1.0.0.jar" classname="eu.keep.uphec.GUI" fork="true">      
    </java>
</target>

任务成功执行:jar任务创建jar,运行任务成功启动应用程序。当我尝试使用以下代码在命令行中执行jar时:

 C:\UPHECGUI\GUI-Project\ java -jar jar/UPHECGui.jar

应用程序抛出错误:

Exception in thread "main" java.class.NoClassDefFoundError: eu/keep/kernel/CoreObserver
at.............
...............
...............
Could not find the main class: eu.keep.uphec.GUI. Program will exit.

现在,带有main方法的GUI类正好在指定的文件夹中(运行任务使用此参数成功执行)。 以下是应用程序所基于的文件夹的屏幕截图:

enter image description here

有人可以告诉我它有什么问题吗?我花了好几个小时试图搞清楚,但还没有出来:-( 一个帮助将非常高兴,谢谢!!!!

1 个答案:

答案 0 :(得分:2)

-jar选项使用jar的清单来设置类路径。由于您的应用程序依赖于jar EFCORE-1.0.0.jar,因此该jar应位于UPHECGui.jar清单中指定的类路径中。

有关解释,请参阅http://download.oracle.com/javase/tutorial/deployment/jar/downman.html