我正在尝试创建一个 Ant 构建脚本,以便为我编写的小程序构建一个可执行的 JAR。特别是这个小程序使用了一个外部的JAR selenium-server-standalone-2.35.0.jar
,它存储在我项目根目录的lib
目录中,而源java文件ExampleScenario.java
和ExampleClass.java
是在src/com/selenium/example
中定义的。
到目前为止,我已经定义了以下构建.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 时运行包含库 jar 的 jar
您的清单主类也需要包信息,就像使用 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>
更新 - 硒爪哇罐子丢失。请添加它们。从这里下载