我的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
我必须做什么?
答案 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/");