运行ant时出现java.lang.NoClassDefFoundError

标签 java ant build.xml build-tools

我在程序中使用了一些外部 jar 文件。这个 jar 之一是我创建的。当我在 Eclipse 项目中使用这个 jar 文件时,它工作正常。但是当我尝试使用 ant 执行相同操作时,它显示 NoClassDefFoundError。它无法获取我的 jar 文件中的类。

我的主要方法是这样的:

import pckg.harness.SomeClass;

public class Main {
    public static void main(String[] args) 
{
        SomeClass someClass=new SomeClass();
        someClass.runSomeMethod();
    }
}

我的 build.xml 是这样的:

<project basedir="." default="run" name="project">
  <property name="src" location="src" />
  <property name="libs" location="lib" />
  <path id="class.path">
      <pathelement location="${libs}/ExtJarOne.jar" />
      <pathelement location="${libs}/ExtJarTwo.jar" />
      <pathelement location="${libs}/ExtJarThree.jar" />
      <pathelement location="bin" />
  </path>

 <target name="compile">
    <javac classpathref="class.path" srcdir="${src}" destdir="./bin"/>
  </target> 

  <target name="jar"  depends="compile">
       <mkdir dir="jar"/>
    <jar destfile="./jar/Class.jar" basedir="./bin">
        <manifest>
            <attribute name="Main-Class" value="pckg.main.Main"/>
    </manifest>
        </jar>
    </target>

    <target name="run"  depends="jar">
        <java jar="./jar/Class.jar" fork="true"/>
    </target>

</project>

现在,当我运行 ant 时,出现以下错误:

run:
     [java] Exception in thread "main" java.lang.NoClassDefFoundError: pckg/harn
ess/SomeClass
     [java]     at pckg.main.Main.main(Unknown Source)
     [java] Caused by: java.lang.ClassNotFoundException: pckg.harness.SomeClass
     [java]     at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
     [java]     at java.security.AccessController.doPrivileged(Native Method)
     [java]     at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
     [java]     at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
     [java]     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)

     [java]     at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
     [java]     ... 1 more
     [java] Java Result: 1

最佳答案

由于 SomeClass 不是 Class.jar 的一部分,因此您需要为 java 目标定义类路径:

<java jar="./jar/Class.jar" classpath="class.path" fork="true"/>

关于运行ant时出现java.lang.NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24931340/

相关文章:

java - 如何在 Vaadin 中设置图像组件的大小并保持纵横比

java - 在正则表达式中使用命名组会导致 "Lookbehind doesn' t 有明显的最大长度“错误

java - Join 上的谓词不起作用

Jenkins 上的 Android 单元测试

java - 使用文件集和路径元素在 build.xml 中设置类路径的区别

java - 填充数组的随机整数不只产生整数

android - 两个 Android 库重复同一个 jar - Ant 构建错误

maven-2 - 是否可以挑出并运行绑定(bind)到 Maven 阶段的特定目标?

java - 如何动态添加Ivy到Ant

java - ANT Build - 签名 APK 签名问题