晚上好,堆栈溢出!
我是几天前开始学习Java的,但是一旦我的计算机运行缓慢,就不使用IDE。因此,我决定使用Sublime Text,并在cmd上使用ant进行编译,因为这似乎是最合理的做法。
今天,我开始(至少尝试过)按照ThinMatrix进行一系列LWJGL教程(这确实很酷),但是我无法解决每次尝试编译“项目”时遇到的错误。
这是我的项目的结构:
W
src
com
游戏
测试
MainGameLoop.java
renderEngine
DisplayManager.java
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
我正在努力了解这是什么根本问题,我有点被性虐待的Google搜索试图在Java论坛,博客甚至这里找到答案。
我通常不喜欢在新手问题上填充Stack Overflow,但是我不得不承认我不知道该怎么办。
提前致谢!
最佳答案
您的代码取决于库。您已成功在类路径中添加了库来编译代码,从而成功创建了包含类的可执行jar文件。但是这些类依赖于库来运行。而且,当运行jar文件时,除了jar文件之外,您不会保护Java在库中查找类的任何地方。
请参见Generate manifest class-path from <classpath> in Ant,了解如何将Class-Path条目添加到executbale jar文件的清单中。当心:库的路径必须与jar的路径相关。
蚂蚁有点过时了。如果我是你,我会尝试使用gradle,它具有一个简洁的应用程序插件,可以为您完成所有这些工作,还有更多。