我创建了一个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类正好在指定的文件夹中(运行任务使用此参数成功执行)。 以下是应用程序所基于的文件夹的屏幕截图:
有人可以告诉我它有什么问题吗?我花了好几个小时试图搞清楚,但还没有出来:-( 一个帮助将非常高兴,谢谢!!!!
答案 0 :(得分:2)
-jar
选项使用jar的清单来设置类路径。由于您的应用程序依赖于jar EFCORE-1.0.0.jar
,因此该jar应位于UPHECGui.jar
清单中指定的类路径中。
有关解释,请参阅http://download.oracle.com/javase/tutorial/deployment/jar/downman.html。