1

我正在尝试使用 shrinkwrap 构建 war 文件,如下所示用于使用Arquillian.

WebArchive war = ShrinkWrap.create(MavenImporter.class).loadPomFromFile("pom.xml").importBuildOutput().as(WebArchive.class);

在部署时,我收到类似的错误

address: ([("deployment" => "oss.war")]) - failure description: {"JBAS014771: Services with missing/unavailable dependencies" => ["jboss.persistenceunit.\"oss.war#primary\".__FIRST_PHASE__ is missing [jboss.naming.context.java.${datasource_JNDI_Name}]"]}

${datasource_JNDI_Name}是一个变量,其值存在于 pom 文件中。

jboss-web.xml我想,问题出在 WAR 文件中,persistence.xml依赖于 maven 属性的变量等没有得到解决。

请告知为什么 WAR 文件中没有得到解决。提前致谢。

4

1 回答 1

1

我知道这对您来说可能有点晚了,但可以帮助其他人,所以我们开始:

我在我的 glassfish-web.xml 上声明我的上下文时遇到了类似的问题,该问题由具有属性 ${project.artifactId} 的 maven-war-plugin 解决。

当我们将一些依赖项复制为 persistence.xml 时,例如,在 shrinkwap.create 期间,maven 过滤无法解决此问题。

我可以找到两种有效的方法:

1:将您的目录映射为 resources/testResources 并添加过滤。这仅在您使用通过安装您的存档的 shrinkwap-resolver/Maven.resolver() 解决的一些 maven-plugin 或 maven 进程时才有效。

2:(我已经这样做了)正如我们在 Arquillian 远程示例中看到的,persistence.xml 被复制为 test-persistence.xml,并在收缩包装过程中替换了原始的 persistence.xml。我已将 glassfish-web.xml 作为 test-grassfish-web.xml 复制到 src/test/resources-glassfish-remote 并使用为我的测试上下文定义了一个固定值

.addAsWebInfResource("test-glassfish-web.xml", "WEB-INF/glassfish-web.xml")

将其“手动解决”放入我的 WebArchive。猜猜这不是解决这个问题的最优雅的方法,但为我节省了很多时间并且工作得又快又好。

您可以在此处http://arquillian.org/guides/getting_started_rinse_and_repeat/和此处https://github.com/arquillian/arquillian-examples找到使用 test-persistence.xml 的完整示例

希望它可以帮助某人避免在收缩包装部署中研究这个未解决的 maven 属性的麻烦和时间。

于 2015-07-16T19:45:49.877 回答