0

antからJavaクラスを実行しようとしています。最初にクラスのjarファイルを作成し、次にantターゲットを介して実行します。しかし、それは私にこのエラーを投げています:

スレッド「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の作成中に「includes」を削除すると、すべてが正常になり、jarファイルを実行できますが、必要なのはこの1つのクラスだけなので、jarにすべてのファイルを含めたくありません。 。

これを修正する方法はありますか?

4

3 に答える 3

3

その内部クラスは別のファイル(と呼ばれるClassName$InnerClass.classと思います)になり、jar定義で明示的に除外します。

内部クラスは、ファイルシステム内の個別のクラスファイルとして現れます。したがって、その1つの.classファイルを含めるだけでは、対応する内部クラスが欠落しているため、残念ながらデプロイ可能ファイルが破損します。

于 2012-07-10T15:45:58.953 に答える
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" />

ClassNamejarに内部クラスまたは追加の依存関係のみを含めたい場合は、このリストまたは同様のリストで問題に対処する必要があります。

于 2012-07-10T15:46:10.900 に答える
1

enclosingclass$className.class内部クラスの場合、内部クラスは$記号が追加された別のファイルで作成されるため、実行する必要がある場合があります。

注:別のクラスがこのクラスに依存している場合、実行時に問題が発生する可能性があります。

于 2012-07-10T15:46:46.787 に答える