我正在尝试从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中的所有文件,因为我只需要这个类。
有没有办法解决这个问题?
如果是内部类,则可能需要执行封闭类$className。类,因为您的内部类将在附加了$符号的单独文件中创建。
注意:如果另一个类依赖于该类,则在运行时您可能会看到问题。
看起来您正在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
和任何内部类或其他依赖项,则此或类似列表应该可以解决您的问题。
该内部类将是一个单独的文件(我认为称为ClassName$InnerClass.class
),并且您在jar定义中明确排除了它。
内部类将在文件系统中表现为单独的类文件。因此,不幸的是,仅包含一个. class文件就会破坏您的可部署性,因为它缺少相应的内部类。
//为什么这是强制性的??? 当我做一个类派生从一个innerclass(Innerclass.后来我才知道,它需要包括一个构造函数采取封闭类引用为什么是这样?
问题内容: 此处给出的ThreadLocal的目的是,该变量对于任何访问包含ThreadLocal变量的对象的线程都是局部的。将ThreadLocal变量作为类的成员,然后使其成为Thread的局部变量,而不是使Thread本身具有局部变量,这有什么区别? 问题答案: 线程是执行的单元,因此多个线程可以同时执行相同的代码。如果多个线程同时在一个对象/实例上执行,它们将共享实例变量。每个线程都有其自
问题内容: 对于我的项目,我必须创建一个代理AppDelegate,该代理将把调用转发到另一个AppDelegate。 UIApplicationDelegate有一个。我的问题是,为什么我不能这样做: 该代码的问题是。 有人知道为什么吗? 问题答案: 该物业的协议,声明如下: 这意味着它是一个 可选属性 (在某种意义上,“ 不需要请求 实现协议的类 来实现/具有此属性 ”,就像 在Objecti
问题内容: 我正在使用下面的代码将数据发送到TCP服务器。我假设我需要使用正确地指示客户端已完成发送请求。我的假设正确吗?如果不行,请让我知道目的。也感谢我可以做的任何进一步的优化。 客户 服务器 问题答案: 表示客户端已完成通过TCP连接的所有数据发送。它将发送剩余的数据,然后发送终止序列,该序列将完全关闭其OUTGOING连接。无法发送任何进一步的数据,这也将向您的程序表明请求已完全完成。因此
问题内容: 我可以想到的对于Python类的每次使用,我都可以想到另一个同样(可能更多)可接受的解决方案,以实现相同的效果。例如: 在任何情况下,这都是最合适的解决方案吗?如果是这样,在什么情况下? 问题答案: 该函数是惰性的;它仅使用一项所需的内存。另一方面,和惯用法在内存中创建对象的n个副本。对于五个项目,乘法习惯用法可能更好,但是如果必须重复一百万次,您可能会注意到资源问题。 不过,很难想象
问题内容: 目的是什么 如果我们可以简单地写 ? 相同的 和 问题答案: 从JavaDoc方法: API注意:此方法已用作,