晚上好堆栈溢出!
我几天前开始学习Java,但是一旦我的计算机有点慢,就不会使用IDE。所以,我决定使用Sublime Text,并在cmd上使用 ant 编译,因为它似乎是最合理的事情。
今天我开始(至少尝试过)从ThinMatrix开始学习一系列LWJGL教程(非常酷),但我无法解决每次尝试编译时都会遇到的错误该项目'。
这是我项目的结构:
LWJGL
的build.xml
女士们,先生们...... build.xml(遵循Ant的官方HelloWorld教程):
<project name="LWJGL" basedir="." default="main">
<property name="src.dir" value="src"/>
<property name="build.dir" value="build"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="lib.dir" value="lib"/>
<property name="jar.dir" value="${build.dir}/jar"/>
<property name="main-class" value="com.game.test.MainGameLoop"/>
<path id="classpath">
<fileset dir="${lib.dir}" includes="**/*.jar" />
</path>
<target name="clean">
<delete dir="${build.dir}"/>
</target>
<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="false" classpathref="classpath" />
</target>
<target name="jar" depends="compile">
<mkdir dir="${jar.dir}"/>
<jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="${main-class}"/>
</manifest>
</jar>
</target>
<target name="run" depends="jar">
<java jar="${jar.dir}/${ant.project.name}.jar" fork="true">
<jvmarg value="-Djava.library.path=lib/natives-win" />
</java>
</target>
<target name="clean-build" depends="clean,jar"/>
<target name="main" depends="clean,run"/>
每次我在命令行上运行 ant ,在项目的根文件夹中,我都会这样:
[java] Error: Could not find or load main class com.game.test.MainGameLoop
[java] Java Result: 1
我很难理解这是什么根本问题,我有点滥用谷歌搜索试图在Java论坛,博客上找到答案,甚至在这里......
我不喜欢用noob问题填充Stack Overflow,但我不得不承认我不知道该怎么做。
提前致谢!
答案 0 :(得分:2)
您的代码取决于库。您已成功在类路径中添加库以编译代码,从而成功创建了包含类的可执行jar文件。但是这些类依赖于库来运行。在运行jar文件时,除了jar文件之外,你不会在Java中查找库中的类。
有关如何将类路径条目添加到executbale jar文件的清单中,请参阅Generate manifest class-path from <classpath> in Ant。注意:库的路径必须与jar的路径相关。
Ant有点过时了。如果我是你,我会尝试使用gradle,它有一个整洁的应用程序插件为你做所有这些,等等。
答案 1 :(得分:0)
我终于设法解决了这个问题,我在一个好朋友的帮助下正在努力解决这个问题。有两个棘手的问题:
答案 2 :(得分:0)
可能导致此问题的小问题是在文件扩展名中使用大写字母。例如,您无法使用MainGameLoop.Java
,正确的扩展名应为全部小写,如下所示。
MainGameLoop.java
请先检查一下。