我正在使用Java 1.6,Eclipse和Ant。
以下是我创建和运行jar文件的目标:
<!-- Settings --> <property file="build.properties" /> <path id="classpath"> <fileset dir="${lib.dir}" includes="**/*.jar" /> </path> <!-- Compile --> <target name="compile"> <mkdir dir="${classes.dir}" /> <javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="false"> <classpath refid="classpath" /> </javac> </target> <!-- Package .jar --> <target name="jar"> <mkdir dir="${jar.dir}" /> <jar destfile="${jar.dir}/App.jar" basedir="${classes.dir}"> <manifest> <attribute name="Main-Class" value="main.App" /> </manifest> </jar> </target> <!-- Run .jar --> <target name="run"> <java jar="${jar.dir}/App.jar" fork="true" /> </target>
问题是,当我(通过Ant或命令行)运行此jar时,收到错误消息:
Exception in thread "main" java.lang.NoClassDefFoundError: net/xeoh/plugins/base/impl/PluginManagerFactory [java] at plugins.PluginLoader.<clinit>(Unknown Source)
一些可能有用的知识:
当我打印我的类路径时,它表明所有必需的JAR都在其中。它还显示了类路径的Eclipse GUI版本。
我尝试清理项目(通过Eclipse和Ant)都无济于事。
似乎缺少的库.jar 不是 .jar中的.jar(这似乎是一个常见问题)。
这是唯一的错误。其他班级似乎都觉得图书馆不错…
您已经设置了编译类路径,但是App.jar不包括您的库(仅包含您编译的类)或清单类路径。
您需要执行以下操作:
<target name="jar"> <mkdir dir="${jar.dir}" /> <manifestclasspath property="manifest.classpath" jarfile="${jar.dir}/App.jar"> <classpath refid="classpath" /> </manifestclasspath> <jar destfile="${jar.dir}/App.jar" basedir="${classes.dir}"> <manifest> <attribute name="Main-Class" value="main.App" /> <attribute name="Class-Path" value="${manifest.classpath}" />. </manifest> </jar> </target>
另请参见ant manifestclasspath任务