Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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
Java 从Ant运行JUnit测试时getPackage()返回null_Java_Ant_Junit_Classloader - Fatal编程技术网

Java 从Ant运行JUnit测试时getPackage()返回null

Java 从Ant运行JUnit测试时getPackage()返回null,java,ant,junit,classloader,Java,Ant,Junit,Classloader,我在运行JUnit测试时遇到问题 它在Eclipse中运行良好,但现在我尝试使用Ant从命令行运行它。问题是以下代码返回null:getClass().getPackage() 我正在运行JUnit测试,如下所示: <junit fork="no" printsummary="yes" haltonfailure="no"> <classpath refid="junit.classpath" /> <batchtest fo

我在运行JUnit测试时遇到问题

它在Eclipse中运行良好,但现在我尝试使用Ant从命令行运行它。问题是以下代码返回null:
getClass().getPackage()

我正在运行JUnit测试,如下所示:

    <junit fork="no" printsummary="yes" haltonfailure="no">
        <classpath refid="junit.classpath" />
        <batchtest fork="yes" todir="${reports.junit}">
            <fileset dir="${junit.classdir}">
                <include name="**/FileHttpServerTest.class" />
                <exclude name="**/*$*" />
            </fileset>
        </batchtest>
        <formatter type="xml" />
        ...

...
我在谷歌上搜索了这类错误,并找到了大量关于类加载器错误行为的参考资料。但我发现没有任何东西能给我足够的信息来解决我的问题

我确实需要
getClass().getPackage()
不返回null。有人能帮我吗

谢谢,
Phil

我不确定您要在哪个对象上执行getClass().getPackage()? 看看API Javadoc对此方法所说的话,我猜问题在于,当您从命令行运行引导类加载器时,JUnit正在由引导类加载器加载,而您正在执行getPackage()操作的对象是由一个子类加载器加载的

不确定这是否有意义,但由于getPackage正在尝试使用引导类装入器查找包,并且标准类装入器行为不查看其子级,因此它返回null


如果您能对正在执行此操作的对象有更多的了解,我可以更具体一些

尝试使用junit fork=“yes”运行您的测试,这将非常合理地隔离类加载,并可能解决您的问题。

如果是类加载程序的错误,您始终可以使用不同的类加载器加载相同的类:

URLClassLoader cld = new URLClassLoader(new URL[] { urlsToClasses });
Class.forName(getClass().getName(), true, cld).getPackage();

这里的问题是如何找到类路径URL(
urlsToClasses
)。我不熟悉JUnit类加载器,所以您可以尝试将
Thread.currentThread().getContextClassLoader()
转换为
URLClassLoader
,看看它是否可以帮助您获得这些URL。

您能发布正在执行getClass()的代码吗?getPackage调用?嗨,Fazal,我最初在第三方Jetty类org.mortbay.Jetty.Server中观察到这个问题,它调用getClass().getPackage().getImplementationVersion(),这会导致NullPointerException。然后,我将以下行添加到测试类本身(
FileHttpServerTest
):
System.out.println(“包是”+getClass().getPackage())此打印“package is null”。@philharvey,您自己的FileHttpServerTest类或Jetty类,或者两者都有什么区别?不幸的是,这两个类中调用getObject().getPackage()的结果都没有区别