Arquillian - 一些外部jar问题

时间:2016-08-03 15:00:13

标签: eclipse ant classnotfoundexception jboss-arquillian

我第一次进行除简单JUnit测试以外的任何测试。我在一个非常古老的EJB2.0 Ant项目上设置了Arquillian,我在这里遇到了死路。

使用Arquillian设置:

@Deployment
public static Archive<?> createDeployment() {
    JavaArchive jar = ShrinkWrap.create(JavaArchive.class)
            .addPackages(true, "com.admin", "com.framework", "com.pharmacy")
            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");

    EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class)
            .as(ZipImporter.class)
            .importFrom(new File("C:\\jboss-4.2.3.GA\\server\\default\\administration.ear"))
            .as(EnterpriseArchive.class);

    ear.addAsLibrary(jar);
    return ear;
}

我能够点击容器,获取数据源并查询表。但是,如果我正在运行使用依赖于其他JAR的代码的测试,或者测试代码本身依赖于其他JAR,那么我将获得ClassNotFoundException。

例如,在我的测试用例中,我正在尝试使用httpclient-4.5.2.jarhttpcore-4.4.4.jar发出HTTP请求,然后我在Eclipse junit测试控制台中获得Caused by: java.lang.ClassNotFoundException: No ClassLoaders found for: org.apache.http.protocol.HttpContext。我在Eclipse类路径中有这些jar,当我使用Codehaus Cargo框架运行相同的HTTP测试时,它正在工作。

另一个例子,我正在初始化一个类实例,这个类实例使用apache的vfs2 jar进行sftp调用。然后我在jboss server.log中发现了这个错误:Caused by: java.lang.ClassNotFoundException: No ClassLoaders found for: org.apache.commons.vfs2.FileSelector

我做错了什么?

1 个答案:

答案 0 :(得分:0)

由于Arquillian是一种隔离,我想你需要在Java档案中包含外部类。

JavaArchive jar = ShrinkWrap.create(JavaArchive.class)
        .addPackages(true, "com.admin", "com.framework", "com.pharmacy")
        .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")
        //
        // You need to include to external classes used
        // in your Java archive using addClass / addClasses
        //
        .addClasses(ExtA.class, ExtB.class)
        //
        // or the entire package if needed
        //
        .addPackage(true, "my.ext.package");

然后部署应该有效。