java - 当我尝试运行我的程序时出现 Ant 错误

标签 java ant rmi

我在 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

以上三个命令都工作正常,问题出在 ant 上。正如你所看到的,javac、java和rmic使用相同的依赖项和jar文件,所以我在Ant中做了同样的事情,但它不起作用。我确信这中间有些愚蠢的事情,但在过去的 6 个小时里我似乎无法弄清楚。有人知道吗?

最佳答案

我认为问题可能出在你的源路径上;尝试查看您的 classes文件夹并查看是否有 stockage包含 StockageImpl.class 的文件夹文件。

我认为您可能想要将编译目标的源路径更改为 src而不是src/stockage (这也将允许您有一个 <compile> 任务而不是两个),或者如果您出于任何原因仍然希望将它们分开,例如你只需要编译 stockage 中的文件和db而不是其他,您应该更改 destdirclasses/stockageclasses/db ,分别。

关于java - 当我尝试运行我的程序时出现 Ant 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16921949/

相关文章:

java - 当我使用 Ant 构建具有多个库的 Android 项目时,我的构建失败

java - 独立的 Java 应用程序在几天后死掉

java - 为什么hypot()函数这么慢?

java - 使用 Firebase 检查整个 JSON 文件中是否存在数字

java - 拆分功能无法正常工作

java - Mockito 在简单测试中抛出 OutOfMemoryError

java - 如何使用 ant 在类路径中包含多个 jar?

java - 使用 Java 构建工具

java - 当通过 RMI 在 Java5 和 Java6 之间进行通信时,我是否应该预料到会出现问题?

JAVA RMI,定义离线方法,所以当方法调用时不会去服务器