我有一个多模块 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 的正确方法是什么?