1

私は Ant に問題があり、私を悩ませ続けていますが、解決に至っていないようです。私は完成した Java の RMI プロジェクトと、以下のファイルを持っています。

<project name="StockageRMI" default="compile">

    <target name="compile">
        <javac destdir="classes">
            <src path="src/db/"/>
            <classpath>
                <fileset dir="lib/">  
                    <include name="**/*.jar" />  
                </fileset>
                <fileset dir="classes/">  
                    <include name="**/*.class" />  
                </fileset>    
            </classpath>
        </javac>

        <javac destdir="classes">
            <src path="src/stockage"/>
            <classpath>
                <fileset dir="lib/">  
                    <include name="**/*.jar" />  
                </fileset>
                <fileset dir="classes/">  
                    <include name="**/*.class" />  
                </fileset>    
            </classpath>
        </javac>

        <javac destdir="classes">
            <src path="src/server"/>
            <classpath>
                <fileset dir="lib/">  
                    <include name="**/*.jar" />  
                </fileset>
                <fileset dir="classes/">  
                    <include name="**/*.class" />  
                </fileset>    
            </classpath>
        </javac>

        <javac destdir="classes">
            <src path="src/client"/>
            <classpath>
                <fileset dir="lib/">  
                    <include name="**/*.jar" />  
                </fileset>
                <fileset dir="classes/">  
                    <include name="**/*.class" />  
                </fileset>    
            </classpath>
        </javac>

    </target>

    <target name="rmic" depends="compile">
        <rmic classname="stockage.StockageImpl" base="classes/">
            <classpath>
                <fileset dir="lib/">  
                    <include name="**/*.jar" />  
                </fileset>
                <fileset dir="classes/">  
                    <include name="**/*.class" />  
                </fileset>    
            </classpath>
        </rmic>
    </target>

    <target name="runServer" depends="rmic,runStockage">
       <java classname="server.ServerImpl" fork="true" failonerror="true" >
            <classpath>
                <fileset dir="lib/">  
                    <include name="**/*.jar" />  
                </fileset>
                <fileset dir="classes/">  
                    <include name="**/*.class" />  
                </fileset>    
            </classpath>
       </java>
    </target>

    <target name="runStockage">
       <java classname="stockage.StockageImpl" fork="true" failonerror="true" >
            <classpath>
                <fileset dir="lib/">  
                    <include name="**/*.jar" />  
                </fileset>
                <fileset dir="classes/">  
                    <include name="**/*.class" />  
                </fileset>    
            </classpath>
       </java>
    </target>


</project>

ターゲットの "compile" と "rmic" は問題なく動作しますが、問題は "runStockage" を実行しようとしたときです。次のエラーが表示されます。

Exception in thread "main" java.lang.NoClassDefFoundError: stockage/StockageImpl
     [java] Caused by: java.lang.ClassNotFoundException: stockage.StockageImpl
     [java]  at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
     [java]  at java.security.AccessController.doPrivileged(Native Method)
     [java]  at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
     [java]  at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
     [java]  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
     [java]  at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
     [java] Java Result: 1

これは非常に奇妙です。ターミナルでこれを実行しようとすると、java コマンドは正常に動作し、同じ依存関係があるため、javac と同じクラスパスを持つためです。

javac -cp lib/mongo-java-driver-2.11.1.jar:lib/rmiio-2-1.0.0.jar:lib/commons-logging-1.1.3.jar:classes -d classes src/stockage/StockageImpl.java

rmic -classpath lib/mongo-java-driver-2.11.1.jar:lib/rmiio-2-1.0.0.jar:lib/commons-logging-1.1.3.jar:classes -d classes stockage.StockageImpl

java -classpath lib/mongo-java-driver-2.11.1.jar:lib/rmiio-2-1.0.0.jar:lib/commons-logging-1.1.3.jar:classes server.ServerImpl

上記の 3 つのコマンドはすべて問題なく動作しますが、問題は ant にあります。ご覧のとおり、javac、java、rmic は同じ依存関係と jar ファイルを使用するため、Ant で同じことを行いましたが、機能しません。途中で何かばかげていると確信していますが、この6時間は理解できないようです。手がかりを得た人はいますか?

4

1 に答える 1