Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ant运行自定义java任务可以';找不到类文件_Java_Ant - Fatal编程技术网

使用ant运行自定义java任务可以';找不到类文件

使用ant运行自定义java任务可以';找不到类文件,java,ant,Java,Ant,我正在尝试使用ant运行自定义java任务,自定义任务已经成功地编译到.class文件中。这个自定义任务将调用应用程序中的另一个类,理论上是通过命令行运行该程序 <?xml version="1.0"?> <project default="main" name="myproject"> <property name="distDir" location=".\dist\" /> <property name="mainDir" locat

我正在尝试使用ant运行自定义java任务,自定义任务已经成功地编译到.class文件中。这个自定义任务将调用应用程序中的另一个类,理论上是通过命令行运行该程序

<?xml version="1.0"?>
   <project default="main" name="myproject">
    <property name="distDir" location=".\dist\" />
<property name="mainDir" location=".\" />
<property name="host" value=""/>
<property name="port" value=""/>
<property name="dir" value=""/>
<property name="startTest" value=""/>
<property name="endTest" value=""/>
<property name="testOnly" value=""/>
<property name="userName" value=""/>
<property name="passwd" value=""/>
    <taskdef name="mytask" classname="Classrunner">
        <classpath>  
            <fileset dir="${distDir}>
                <includes="*.jar">
            </fileset>
         </classpath>
    </taskdef>
    <target name="main">
        <mytask host="${host}" port="${port}" dir="${dir}" startTest="${startTest}" endTest="${endTest}" testOnly="${testOnly}" userName="${userName}" passwd="${passwd}"/>
    </target>
</project>


我认为您需要taskdef标记的classpath属性。

请参阅此处的文档:

工作中的某个人帮助我找到了解决此问题的方法

最好的方法是通过.bat文件设置环境变量classpath,如下所示:

set "CURRENT_DIR=%~dp0"
cd %CURRENT_DIR%
set "CLASSPATH=%CURRENT_DIR%\dist\bsf-2.3.0.jar;%CURRENT_DIR%\....   "

然后,您可以在这里为ant设置一个变量并运行ant文件。

问题不是查找我编写的自定义任务,而是查找自定义任务引用的类。我明白您的意思。你确定它在一个jar文件中吗?它在正确的包中吗${distDir}指向的目录包含所需的所有jar文件。我用WinZip手动进入,看了看,它就在那里。似乎有一些人遇到了这个问题,但没有真正的解决方案。您可以调试它,在任务类(正在加载的类)上设置断点,然后检查堆栈。然后您可能会看到类加载器配置在做什么。