arquillian从主文件夹

时间:2016-08-12 12:08:39

标签: java-ee war jboss-arquillian shrinkwrap

我的JAVA EE应用服务器的业务代码中存在问题。 我们使用

访问src/main/resources文件夹中的一些文件
  InputStream inputStream = Thread
                .currentThread()
                .getContextClassLoader()
                .getResourceAsStream(filePath);

在生产中这是有效的,但我想在我的arquillian测试中测试一部分使用此功能的代码。

我们正在使用shrinkwrap生成test.war

 WebArchive testArchive = ShrinkWrap.create(WebArchive.class, "test.war")
                .addPackages(true, "ch.microtronic.evending")
                .addAsWebInfResource("wildfly-ds.xml")
                .setWebXML(new File("src/main/webapp/WEB-INF/web.xml"))
                .addAsResource("test-persistence.xml", "META-INF/persistence.xml");

我在将src/main/resources的资源添加到test.war时遇到了一些麻烦。

我只能添加src/test/resources中的文件。

我们的目录结构如下:

src
 |__main
 |   |__java
 |   |__resources
 |   |__webapp
 |   
 |__test
     |__java
     |__resources

我必须做什么?

3 个答案:

答案 0 :(得分:3)

如果您要添加不在src/test/resources中的文件,则只需使用重载版addAsResource(File, String)而不是addAsResource(String, String)。对于您的示例,如下所示:

.addAsResource(new File("src/main/resources/test-persistence.xml"),"META-INF/persistence.xml");

我刚刚在我的代码中解决了类似的问题,所以这种方法绝对有效。

答案 1 :(得分:1)

要包含子树,我使用以下内容。

假设您需要在类路径中将src/main/resources/db/migration下的所有文件设为db/migration/FILE_NAME

Path resources_dir = Paths.get("src", "main", "resources");
Path migrations_dir = resources_dir.resolve(Paths.get("db", "migration"));
Files.walk(migrations_dir)
  .forEach((p) -> jar.addAsResource(p.toFile(),
                                    resources_dir.relativize(p).toString()));

相对化

答案 2 :(得分:0)

这种一线式可从src递归添加所有主要资源:

testArchive.addAsResource(new File("src/main/resources/"), "");

这个由maven后处理的一些资源:

testArchive.addAsResource(new File("target/classes/META-INF/"), "META-INF/");