无法找到或加载主类 - 我无法运行从Ant创建的.jar文件

时间:2014-11-17 06:19:24

标签: java eclipse ant manifest.mf

我这两天一直在努力奋斗。我创建了一个非常简单的HelloWorld类来测试我是否可以使用它,但我无法做到。 我收到错误 - 无法找到或加载主类... 它适用于Eclipse或从脚本运行任务。但是双击.jar或从CMD运行它会给我错误。出现此错误的原因有哪些?类路径?环境变量?目录结构?请帮忙!

package com.hellojava;

public class HelloWorld {

 public static void main(String[] args)
 {
    System.out.println("Hello World!");
 }

}

我的build.xml

<project name="TestProject" 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="jar.dir"     value="${build.dir}/jar"/>
<property name="main-class"  value="com.hellojava.HelloWorld"/>

<target name="clean">
    <delete dir="${build.dir}"/>
</target>

<target name="compile">
    <mkdir dir="${classes.dir}"/>
    <javac srcdir="${src.dir}" destdir="${classes.dir}"/>
</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"/>
</target>

<target name="clean-build" depends="clean,jar"/>

<target name="main" depends="clean,run"/>

run:
 [java] Hello World!
main:
BUILD SUCCESSFUL
Total time: 5 seconds

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.2
Created-By: 1.7.0_11-b21 (Oracle Corporation)
Main-Class: com.hellojava.HelloWorld

**编辑: java -jar TestProject.jar有效但javaw -jar TestProject.jar没有。但是,我解决了问题 - 请参阅我发布的答案。

3 个答案:

答案 0 :(得分:1)

运行jar文件的常用语法是 java -jar TestPractice.jar 。 如果失败,则需要进行一些分析。

  1. 使用WinZip打开您的jar文件,并解压缩到临时目录。
  2. 检查HelloWorld.class文件是否存在,并在正确的目录中。
  3. 检查是否有META-INF / MANIFEST.MF文件,它包含行读数 Main-Class:com.hellojava.HelloWorld 我在Ant脚本中看不到会生成此文件的任何内容。
  4. 如果一切正常,您的程序将会运行。

    有关详细信息,请查看how to create a bundled runnable jar using Ant

答案 1 :(得分:0)

解决了问题!

我不得不将注册表更改为我正在使用的正确Java版本。它被设置为我的comp中的旧版Java。

I can run .jar files through cmd, but I cannot double click them

另外,我注意到java -jar file.jar工作时,javaw -jar file.jar对我不起作用。 我通过“打开方式”更改了打开.jar文件的程序,并选择了java而不是javaw。这现在解决了问题 - 我确实有一个问题。我想知道为什么javaw不起作用,但现在我很高兴这是有效的:)

答案 2 :(得分:0)

我遇到了同样的问题。应用程序在我的PC上工作正常,但在某些PC上我得到了同样的错误。尝试在应用程序无法运行的计算机上更新Java运行时。例如,我在JRE7和PC上工作,其中app安装了Java 1.6。