当前位置: 首页 > 知识库问答 >
问题:

InnerClass的Java NoClassDefFoundError

凌展
2023-03-14

我正在尝试从ant执行一个Java类。我首先为我的类创建一个jar文件,然后通过ant目标执行它。但是它给我抛出了这个错误:

线程“main”java中出现异常。lang.NoClassDefFoundError:com/abc/utils/ClassName$内部类

我正在构建文件中创建一个jar,如下所示:

<jar destfile="${dist.dir}/../lib/jarFile.jar" basedir="${basedir}/classes" includes="com/abc/utils/ClassName.class" />

如果我在创建jar期间删除“包含”,那么一切都很好,我可以执行jar文件,但我不想包含jar中的所有文件,因为我只需要这个类。

有没有办法解决这个问题?

共有3个答案

印嘉泽
2023-03-14

如果是内部类,则可能需要执行封闭类$className。类,因为您的内部类将在附加了$符号的单独文件中创建。

注意:如果另一个类依赖于该类,则在运行时您可能会看到问题。

公西天逸
2023-03-14

看起来您正在classClassName中使用内部类。这将生成一个单独的类文件。

因为您使用的是includes属性,所以jar任务只包含一个类文件:ClassName。类 。删除包含在内的所有类文件,所有类文件都将在jar中结束。

请注意,包含/排除也将接受逗号分隔或空格分隔的列表,例如:

<jar destfile="${dist.dir}/../lib/jarFile.jar" basedir="${basedir}/classes" includes="com/abc/utils/ClassName.class,com/abc/utils/ClassName$InnerClass.class" />

如果您只想在jar中包含ClassName和任何内部类或其他依赖项,则此或类似列表应该可以解决您的问题。

尹小云
2023-03-14

该内部类将是一个单独的文件(我认为称为ClassName$InnerClass.class),并且您在jar定义中明确排除了它。

内部类将在文件系统中表现为单独的类文件。因此,不幸的是,仅包含一个. class文件就会破坏您的可部署性,因为它缺少相应的内部类。

 类似资料:
  • //为什么这是强制性的??? 当我做一个类派生从一个innerclass(Innerclass.后来我才知道,它需要包括一个构造函数采取封闭类引用为什么是这样?

  • 问题内容: 此处给出的ThreadLocal的目的是,该变量对于任何访问包含ThreadLocal变量的对象的线程都是局部的。将ThreadLocal变量作为类的成员,然后使其成为Thread的局部变量,而不是使Thread本身具有局部变量,这有什么区别? 问题答案: 线程是执行的单元,因此多个线程可以同时执行相同的代码。如果多个线程同时在一个对象/实例上执行,它们将共享实例变量。每个线程都有其自

  • 问题内容: 对于我的项目,我必须创建一个代理AppDelegate,该代理将把调用转发到另一个AppDelegate。 UIApplicationDelegate有一个。我的问题是,为什么我不能这样做: 该代码的问题是。 有人知道为什么吗? 问题答案: 该物业的协议,声明如下: 这意味着它是一个 可选属性 (在某种意义上,“ 不需要请求 实现协议的类 来实现/具有此属性 ”,就像 在Objecti

  • 问题内容: 我正在使用下面的代码将数据发送到TCP服务器。我假设我需要使用正确地指示客户端已完成发送请求。我的假设正确吗?如果不行,请让我知道目的。也感谢我可以做的任何进一步的优化。 客户 服务器 问题答案: 表示客户端已完成通过TCP连接的所有数据发送。它将发送剩余的数据,然后发送终止序列,该序列将完全关闭其OUTGOING连接。无法发送任何进一步的数据,这也将向您的程序表明请求已完全完成。因此

  • 问题内容: 我可以想到的对于Python类的每次使用,我都可以想到另一个同样(可能更多)可接受的解决方案,以实现相同的效果。例如: 在任何情况下,这都是最合适的解决方案吗?如果是这样,在什么情况下? 问题答案: 该函数是惰性的;它仅使用一项所需的内存。另一方面,和惯用法在内存中创建对象的n个副本。对于五个项目,乘法习惯用法可能更好,但是如果必须重复一百万次,您可能会注意到资源问题。 不过,很难想象

  • 问题内容: 目的是什么 如果我们可以简单地写 ? 相同的 和 问题答案: 从JavaDoc方法: API注意:此方法已用作,