我有一个带有EAR
的多模块Maven项目和一个集成测试项目。现在我希望我的测试针对一些类似于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));
但是这会导致相同的错误消息(虽然不常见),这样我需要第二次定义版本,这不是我想要的。
我找到了一个a bug(这是一个愚人节的笑话,它必须是这样),但它并没有帮助我找到我应该做的不同的事情让它发挥作用。
如果我已经有一个Maven EAR项目,那么在Arquillian中组装EAR的正确方法是什么?