2012-07-10 103 views
0

我想從螞蟻執行一個Java類。我首先爲我的類創建一個jar文件,然後通過ant target執行它。但它扔我這個錯誤:InnerClass的Java NoClassDefFoundError

Exception in thread "main" 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中,因爲我只需要這一個類。

任何想法如何解決這個問題?

回答

3

這個內部類將是一個單獨的文件(稱爲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" /> 

這或類似的名單應該解決您的問題,如果你想只包括ClassName任何內部類或jar中的其他依賴關係。

1

如果是內部類,可能需要執行enclosingclass$className.class,因爲您的內部類將在單獨的文件中創建,並附加$符號。

注意:如果另一個類依賴於此類,則運行時您可能會看到問題。