【问题标题】:Java NoClassDefFoundError for the InnerClassInnerClass 的 Java NoClassDefFoundError
【发布时间】:2012-07-10 15:43:38
【问题描述】:

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

线程“主”java.lang.NoClassDefFoundError 中的异常:com/abc/utils/ClassName$InnerClass

我正在像这样在构建文件中创建一个 jar:

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

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

任何想法如何解决这个问题?

【问题讨论】:

    标签: java ant jar


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      因为您使用的是includes 属性,所以jar 任务专门只包含一个类文件:ClassName.class。删除includes,所有的类文件都会在你的jar中。

      请注意,includes/excludes 也将接受逗号分隔或空格分隔的列表,例如:

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

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

      【讨论】:

        【解决方案3】:

        如果它是内部类,可能你需要做enclosingclass$className.class,因为你的内部类将在单独的文件中创建,并附加 $ 符号。

        注意:如果另一个类依赖于这个类,运行时可能会出现问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-09-18
          • 1970-01-01
          • 1970-01-01
          • 2014-08-19
          • 2021-11-15
          • 1970-01-01
          相关资源
          最近更新 更多