无法找到或加载主类Java

时间:2015-09-25 22:18:05

标签: java ant

晚上好堆栈溢出!

我几天前开始学习Java,但是一旦我的计算机有点慢,就不会使用IDE。所以,我决定使用Sublime Text,并在cmd上使用 ant 编译,因为它似乎是最合理的事情。

今天我开始(至少尝试过)从ThinMatrix开始学习一系列LWJGL教程(非常酷),但我无法解决每次尝试编译时都会遇到的错误该项目'。

这是我项目的结构:

  • LWJGL

    • 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

我很难理解这是什么根本问题,我有点滥用谷歌搜索试图在Java论坛,博客上找到答案,甚至在这里......

我不喜欢用noob问题填充Stack Overflow,但我不得不承认我不知道该怎么做。

提前致谢!

3 个答案:

答案 0 :(得分:2)

您的代码取决于库。您已成功在类路径中添加库以编译代码,从而成功创建了包含类的可执行jar文件。但是这些类依赖于库来运行。在运行jar文件时,除了jar文件之外,你不会在Java中查找库中的类。

有关如何将类路径条目添加到executbale jar文件的清单中,请参阅Generate manifest class-path from <classpath> in Ant。注意:库的路径必须与jar的路径相关。

Ant有点过时了。如果我是你,我会尝试使用gradle,它有一个整洁的应用程序插件为你做所有这些,等等。

答案 1 :(得分:0)

我终于设法解决了这个问题,我在一个好朋友的帮助下正在努力解决这个问题。有两个棘手的问题:

  1. 首先,指定&#34; Main-Class&#34;在manifest部分中,只需使用以下格式&#34; packageName.className&#34;,并且不需要指定&#34; build&#34;或&#34;来源&#34;文件夹<!/ LI>
  2. 其次,尝试并压缩所有jar文件,你的&#34; jar&#34;文件将依赖于使用&#34; zipgroupfileset&#34;
  3. enter image description here

    此图显示了我如何评论&#34; Class-Path&#34;我将用于解决项目依赖项的属性,并将其替换为&#34; zipgroupfileset&#34;。我希望能帮助你。

答案 2 :(得分:0)

可能导致此问题的小问题是在文件扩展名中使用大写字母。例如,您无法使用MainGameLoop.Java,正确的扩展名应为全部小写,如下所示。

MainGameLoop.java

请先检查一下。