【问题标题】:Cannot find test-persistence.xml using ShrinkWrap使用 ShrinkWrap 找不到 test-persistence.xml
【发布时间】:2016-06-25 09:37:47
【问题描述】:

我正在使用 ShrinkWrap 构建一个集成测试,我希望使用测试文件 test-persistence.xml 来测试持久性。根据 Arquillian Guides Testing Java Persistence,我需要像这样 write the test

@Deployment
public static Archive<?> createDeployment() {
    return ShrinkWrap.create(WebArchive.class, "test.war")
        .addPackage(Game.class.getPackage())
        .addAsResource("test-persistence.xml", "META-INF/persistence.xml")
        .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
}

这是我自己的实现:

@Deployment
public static WebArchive createDeployment() {
    WebArchive war = ShrinkWrap.create(WebArchive.class)
        .addPackages(true, "org.hibernate.search.jsr352")
        .addPackages(true, "javax.persistence")
        .addPackages(true, "org.hibernate.search.annotations")
        .addClass(Serializable.class)
        .addClass(Date.class)
        .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml")
//      .addAsResource("META-INF/persistence.xml")
        .addAsResource("test-persistence.xml", "META-INF/persistence.xml")
        .addAsResource("META-INF/batch-jobs/mass-index.xml");
    return war;
}

你可以看到我已经评论了.addAsResource("META-INF/persistence.xml")这行,它的目的是搜索src/main/resources/META-INF/persistence.xml并添加到存档文件中。它工作正常。 但是,当我将其替换为 test-persistence.xml 时,maven 构建失败并出现错误:

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 6.715 sec <<< FAILURE! - in org.hibernate.search.jsr352.DeploymentIT
org.hibernate.search.jsr352.DeploymentIT  Time elapsed: 6.714 sec  <<< ERROR!
java.lang.RuntimeException: Could not invoke deployment method: public static org.jboss.shrinkwrap.api.spec.WebArchive org.hibernate.search.jsr352.DeploymentIT.createDeployment()
    at org.jboss.shrinkwrap.impl.base.Validate.notNull(Validate.java:43)
    at org.jboss.shrinkwrap.impl.base.container.ContainerBase.fileFromResource(ContainerBase.java:1990)
    at org.jboss.shrinkwrap.impl.base.container.ContainerBase.addAsResource(ContainerBase.java:1056)
    at org.hibernate.search.jsr352.DeploymentIT.createDeployment(DeploymentIT.java:67)

请注意:

  • 测试持久性文件位于src/test/resources/test-persistence.xml
  • 测试资源src/test/resources文件夹应该已经包含在maven pom文件中(见附件)。

关于如何解决此错误的任何想法?


附件

pom.xml

<testResources>
  <testResource>
    <filtering>true</filtering>
    <directory>src/test/resources</directory>
    <includes>
      <include>**/arquillian.xml</include>
      <include>**/arquillian.launch</include>
    </includes>
  </testResource>
</testResources>

【问题讨论】:

  • 好吧,当我添加 &lt;include&gt;test-persistence.xml&lt;/include&gt; 时,它可以工作......但是为什么我需要包含这个,maven 不应该自动包含文件夹 src/test/resources 中的所有文件吗?

标签: java maven persistence jboss-arquillian shrinkwrap


【解决方案1】:

Maven 文档Including and excluding files and directories 非常清楚地描述了用法:

当指定资源目录时,该目录中的每个文件都可能不会被使用。 因此,我们可能只需要指定要包含的文件或指定要排除的文件。

要包含一个资源,我们只需要添加一个&lt;includes&gt; 元素。

<project>
  ...
  <name>My Resources Plugin Practice Project</name>
  ...
  <build>
    ...
    <resources>
      <resource>
        <directory>[your directory]</directory>
        <includes>
          <include>[resource file #1]</include>
          <include>[resource file #2]</include>
          <include>[resource file #3]</include>
          ...
          <include>[resource file #n]</include>
        </includes>
      </resource>
      ...
    </resources>
    ...
  </build>
  ...
</project>

【讨论】:

    猜你喜欢
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    相关资源
    最近更新 更多