在使用shrinkwrap创建时,战争中的属性没有得到解决

时间:2015-02-19 11:50:01

标签: maven jboss shrinkwrap

我正在尝试使用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.xmlpersistence.xml等中依赖于maven属性的变量无法解析。

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

1 个答案:

答案 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属性的麻烦和时间。