错误:无法找到或加载主类ExampleScenario

时间:2013-09-09 02:25:25

标签: java ant

我正在尝试创建一个Ant构建脚本,以便为我编写的小程序构建可执行JAR。特别是,这个小程序使用外部JAR selenium-server-standalone-2.35.0.jar,它存储在项目根目录的lib目录中,而源java文件ExampleScenario.javaExampleClass.java是在src/com/selenium/example中定义。

到目前为止,我已定义了以下build.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project name="SampleDemo" default="jar">

<property name="src.dir" value="src"/>
<property name="bin.dir" value="bin"/>
<property name="lib.dir" value="lib"/>
<property name="dist.dir" value="dist"/>
<property name="com.dir" value="com"/>
<property name="selenium.dir" value="${com.dir}/selenium"/>
<property name="example.dir" value="${selenium.dir}/example"/>

<target name="clean" description="Delete all generated files">
    <delete dir="${bin.dir}" failonerror="false"/>
    <delete dir="${dist.dir}" failonerror="false"/>
</target>

<target name="compile" description="">
    <mkdir dir="${bin.dir}/${example.dir}"/>
    <javac srcdir="${src.dir}/${example.dir}" destdir="${bin.dir}/${example.dir}" classpath="${lib.dir}/selenium-server-standalone-2.35.0.jar"/>
</target>

<target name="jar" description="JARS the Task" depends="compile">
    <mkdir dir="${dist.dir}"/>

    <jar destfile="${dist.dir}/${ant.project.name}.jar" basedir="${bin.dir}/${example.dir}">
        <manifest>
            <attribute name="Main-Class" value="ExampleScenario"/>
            <attribute name="Class-Path" value="${lib.dir}/selenium-server-standalone-2.35.0.jar; "/>
        </manifest>
    </jar>
</target>

main方法位于ExampleScenario类中。但是,当我尝试运行输出JAR文件时,出现以下错误:

Error: Could not find or load main class ExampleScenario

作为ANT脚本的初学者,我已经阅读了ANT文档,并在线阅读了一些教程。我也尝试在线查找有关此特定问题的答案,但我无法弄清楚导致此问题的原因。任何帮助将不胜感激。

编辑:问题已经解决,但我的外部JAR似乎无法识别:

错误日志:

Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/WebDriver
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at java.lang.Class.getMethod0(Unknown Source)
    at java.lang.Class.getMethod(Unknown Source)
    at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.WebDriver
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 6 more

编辑:通过将创建的JAR文件移动到项目的根目录,解决了上一个问题。清单文件中定义的目录似乎与您当前的目录相关。由于我的lib目录存在于项目的根目录中而不存在于dist目录中,因此为什么抛出上述错误是有道理的。更多信息请参见以下链接:

Java NoClassDefFoundError when running jar containing library jar

1 个答案:

答案 0 :(得分:1)

您的清单Main-Class也需要包信息,就像使用java运行的任何主要方法一样。试试下面的内容。

manifest>
        <attribute name="Main-Class" value="com.selenium.example.ExampleScenario"/>
        <attribute name="Class-Path" value="${lib.dir}/selenium-server-standalone-2.35.0.jar; "/>
</manifest>

更新 - 缺少selenium-java jars。请添加它们。 Download it from here