2

我有一个多模块 Maven 项目EAR和一个集成测试项目。现在我想让我的测试针对一些类似于 EAR 的档案运行。

自然,我的第一个直截了当的方法是这样的:

@Deployment
public static EnterpriseArchive createDeployment() {
    return ShrinkWrap.createFromZipFile(EnterpriseArchive.class,
            "../org.acme.project.ear/target/org.acme.project.ear-1.0.0.ear");
}

我发现我自己的想法有多糟糕(例如,我每次开始测试时都需要构建 EAR,代码中的版本号也不能很好)。

所以经过数周的工作,我终于想出了这样的事情:

@Deployment
public static Archive<?> createDeployment() {
    EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class, "org.acme.project.ear");
    ear.addAsModules(Maven.resolver().loadPomFromFile("../org.acme.project.ear/pom.xml")
            .importRuntimeDependencies().resolve().withTransitivity().asFile());
    return ear;
}

...开始时似乎根本没有结束。整个日志充满

    Jan 04, 2016 9:05:36 AM org.jboss.shrinkwrap.resolver.impl.maven.logging.LogTransferListener transferFailed
    WARNING: Failed downloading org.acme.foo/org.acme.foo/maven-metadata.xml from http://repo1.maven.org/maven2/. Reason: 
    org.eclipse.aether.transfer.MetadataNotFoundException: Could not find metadata org.acme.foo:org.acme.foo/maven-metadata.xml in central (http://repo1.maven.org/maven2)
    Jan 04, 2016 9:05:37 AM org.jboss.shrinkwrap.resolver.impl.maven.logging.LogTransferListener transferFailed
    WARNING: Failed downloading org.acme.foo/org.acme.foo/maven-metadata.xml from http://repo.maven.apache.org/maven2/. Reason: 
    org.eclipse.aether.transfer.MetadataNotFoundException: Could not find metadata org.acme.bar:org.acme.foo/maven-metadata.xml in central (http://repo.maven.apache.org/maven2)

如果他在多个存储库中搜索我们公司的工件,他将永远不会返回结果,这并不奇怪。

沿着这条线的某个地方,我想也许它会帮助一个一个地添加工件

ear.addAsModules(Maven.resolver().resolve("org.acme.foo:org.acme.foo.ejb:ejb:2.0.0").withTransitivity().as(JavaArchive.class)); 

但这会导致相同的错误消息(尽管不太常见),这样我就需要再次定义版本,这并不是我真正想要的。

我发现了一个错误(这是愚人节的玩笑,它必须如此),但这并不能帮助我找到我应该做些什么不同的事情来让它工作。

那么如果我已经有一个 Maven EAR 项目,那么在 Arquillian 中组装 EAR 的正确方法是什么?

4

0 回答 0