5

我在我们的 JAVA EE 应用程序服务器的业务代码中有问题。我们访问文件src/main/resources夹中的一些文件

  InputStream inputStream = Thread
                .currentThread()
                .getContextClassLoader()
                .getResourceAsStream(filePath);

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

我们正在使用收缩包装来生成我们的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/resourcestest.war.

我只能从src/test/resources.

我们的目录结构如下:

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

我必须做什么?

4

3 回答 3

4

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

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

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

于 2016-12-26T09:47:54.113 回答
3

这个单行添加了来自 src 的递归所有主要资源:

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

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

testArchive.addAsResource(new File("target/classes/META-INF/"), "META-INF/");
于 2019-09-03T12:48:27.667 回答
1

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

假设您需要在类路径中的所有文件src/main/resources/db/migrationdb/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()));

相对化

于 2017-10-28T14:06:08.600 回答