我正在使用 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>
问题是,当我运行这个 jar (通过 Ant 或命令行)时,我收到错误:
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 是not.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 清单类路径任务 http://ant.apache.org/manual/Tasks/manifestclasspath.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)