首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Concordion无法复制资源(突然)

Concordion无法复制资源(突然)
EN

Stack Overflow用户
提问于 2019-03-19 21:42:54
回答 2查看 147关注 0票数 0

有点奇怪,但当我开始在测试运行中复制资源时,突然间(比如,我的验收测试套件运行得很好,我正忙着做一些无关的*单元测试)。

代码语言:javascript
复制
Failed to copy /org/demo/foo/../../../concordion.css to target [Resource: /org/demo/foo/../../../concordion.css]
java.lang.RuntimeException: Failed to copy /org/demo/foo/../../../concordion.css to target [Resource: /org/demo/foo/../../../concordion.css]
    at org.concordion.internal.ConcordionBuilder.copyResources(ConcordionBuilder.java:354)
    at org.concordion.internal.ConcordionBuilder.build(ConcordionBuilder.java:307)
    at org.concordion.internal.FixtureRunner.<init>(FixtureRunner.java:21)
    at org.concordion.integration.junit4.ConcordionRunner.<init>(ConcordionRunner.java:62)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:78)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)
    at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:66)
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
    at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
    at com.sun.proxy.$Proxy1.processTestClass(Unknown Source)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:155)
    at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:137)
    at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.FileNotFoundException: /var/folders/wg/3nnv2yf90914pqpx69wmd9cc0000gn/T/concordion/org/demo/foo/../../../concordion.css (No such file or directory)
    at java.io.FileOutputStream.open0(Native Method)
    at java.io.FileOutputStream.open(FileOutputStream.java:270)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:162)
    at org.concordion.internal.FileTarget.createOutputStream(FileTarget.java:72)
    at org.concordion.internal.FileTarget.copyTo(FileTarget.java:35)
    at org.concordion.internal.ConcordionBuilder.copyResources(ConcordionBuilder.java:352)
    ... 43 more

我在IntelliJ IDEA和终端运行gradle中得到了这一点。

我的测试都是从类似的东西开始的:

代码语言:javascript
复制
@RunWith(ConcordionRunner.class)
@ConcordionResources(value = { "../../../concordion.css" })
public class Index {
}

...and .css文件总是在这里(在源树中)。在重建之前,我检查了一下打开的把手,清理了所有的东西。文件夹权限似乎很好。问题中的/var文件夹确实是空的。

有什么想法吗?

*我认为

UPDATE:在Mac和Linux上,如果分别删除/var/folders/../concordion/tmp/concordion,就会出现问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-27 05:24:58

问题是Concordion的FileTarget#createOutputStream(Resource)方法无法创建OutputStream来编写资源。

假设您的夹具在a.b.c包中,Concordion试图为文件"<concordion.output.dir>/a/b/c/../../../concordion.css"创建一个OutputStream (其中<concordion.output.dir>是concordion输出目录)。如果"<concordion.output.dir>/a/b/c/"文件夹还不存在,这就失败了--它似乎不会自动“正常化”删除“..”的路径。

解决方案是将路径规范化(可能使用Path.normalize())。

要解决这个问题,您可以更新到2.2.1版本,或者使用绝对路径(例如。@ConcordionResources("/concordion.css"))。

票数 0
EN

Stack Overflow用户

发布于 2019-03-25 19:10:56

您是否考虑过文件名或目录大写?Linux是严格的,而Mac是奇怪的文件名大写。

时间

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55250429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档