0

私はJava1.6、Eclipse、およびAntを使用しています。

以下は、jarファイルを作成して実行するための私のターゲットです。

    <!-- Settings -->
    <property file="build.properties" />
    <path id="classpath">
        <fileset dir="${lib.dir}" includes="**/*.jar" />
    </path>

    <!-- Compile -->
    <target name="compile">
        <mkdir dir="${classes.dir}" />
        <javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="false">
            <classpath refid="classpath" />
        </javac>
    </target>

    <!-- Package .jar -->
    <target name="jar">
        <mkdir dir="${jar.dir}" />
        <jar destfile="${jar.dir}/App.jar" basedir="${classes.dir}">
            <manifest>
                <attribute name="Main-Class" value="main.App" />
            </manifest>
        </jar>
    </target>

    <!-- Run .jar -->
    <target name="run">
        <java jar="${jar.dir}/App.jar" fork="true" />
    </target>

問題は、このjarを(Antまたはコマンドライン経由で)実行すると、次のエラーが発生することです。

Exception in thread "main" java.lang.NoClassDefFoundError: net/xeoh/plugins/base/impl/PluginManagerFactory
     [java]     at plugins.PluginLoader.<clinit>(Unknown Source)

知っておくと便利なことがいくつかあります。

  • クラスパスを印刷すると、必要なすべてのJARがそこにあることが示されます。また、EclipseのGUIバージョンのクラスパスも表示されます。

  • 私は(EclipseとAntの両方を介して)プロジェクトをクリーンアップしようとしましたが、役に立ちませんでした。

  • 欠落していると思われるライブラリ.jarは、.jar内の.jarではありません(これは一般的な問題のようです)。

  • これが唯一のエラーです。他のクラスはライブラリを大丈夫だと思っているようです...

4

1 に答える 1

2

コンパイルクラスパスを設定しましたが、App.jarにはライブラリ(コンパイルしたクラスのみ)またはマニフェストクラスパスが含まれていません。

次のことを行う必要があります。

<target name="jar">
    <mkdir dir="${jar.dir}" />
    <manifestclasspath property="manifest.classpath"
                       jarfile="${jar.dir}/App.jar">
      <classpath refid="classpath" />
    </manifestclasspath>
    <jar destfile="${jar.dir}/App.jar" basedir="${classes.dir}">
        <manifest>
            <attribute name="Main-Class" value="main.App" />
            <attribute name="Class-Path" value="${manifest.classpath}" />.
        </manifest>
    </jar>
</target>

antmanifestclasspathタスクも参照してください

于 2013-01-17T20:58:49.837 に答える