我正在尝试使用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文件中。
我猜,问题是
在WAR文件中,jboss-web.xml
,persistence.xml
等中依赖于maven属性的变量无法解析。
请告知为什么WAR文件中没有解决。提前谢谢。
答案 0 :(得分:1)
我知道对你来说可能有点晚了,但可以帮助别人,所以我们去了:
我有一个类似的问题,在我的glassfish-web.xml上声明我的上下文,该文件由maven-war-plugin解析,属性为$ {project.artifactId}。
因为我们将一些依赖项复制为persistence.xml,例如,在shrinkwap.create期间,maven过滤无法解决此问题。
我发现有两种方法可行:
1:将您的目录映射为resources / testResources并添加过滤。这仅适用于使用某些maven-plugin或maven进程,该进程通过安装归档文件的shrinkwap-resolver / Maven.resolver()解析。
2 :(我已经这样了)正如我们在Arquillian远程示例中看到的那样,persistence.xml被复制为test-persistence.xml并在shrinkwrap打包过程中替换原始的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属性的麻烦和时间。