你如何 运行 Flatpak Eclipse 中的 JUnit 测试?
How do you run JUnit tests in Flatpak Eclipse?
我通过 Flathub 将 Eclipse 安装为 Flatpak。当我尝试 运行 定义为 运行 项目中所有测试的 JUnit 4 套件时,它失败并出现以下异常:
java.lang.IllegalArgumentException: Cannot read testname file.
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:266)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.init(RemoteTestRunner.java:225)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
我查看了 RemoteTestRunner
的源代码,发现它正在尝试读取一个文件,该文件的路径已提供给 运行ner:
else if("-testnamefile".equals(args[i].toLowerCase())) { //$NON-NLS-1$
String testNameFile= args[i+1];
try {
readTestNames(testNameFile);
} catch (IOException e) {
throw new IllegalArgumentException("Cannot read testname file."); //$NON-NLS-1$
}
i++;
}
所以我检查了测试执行的命令行并确实找到了那个参数:
-testNameFile /tmp/testNames8297875472451881369.txt
异常消息没有说谎 - 该文件不存在。每次 运行 时文件名都会更改,但文件永远不会创建。
我通过 flatpak run --command=sh org.eclipse.Java
从 Eclipse 内的终端和 Flatpak 容器验证我可以在 /tmp
.
创建、修改和删除文件
这就是我卡住的地方。我不确定应该用什么来创建这个包含测试名称的临时文件,或者为什么它没有这样做。我在 Eclipse 日志中没有看到写入此文件失败的证据。权限似乎不是问题。
我做的最后一个观察是,当我在 Eclipse 和 运行 ls -al /tmp
中打开一个终端时,我看到了主机 /tmp
目录中的所有文件。我以为 Flatpak 专门屏蔽了 /tmp
even when file permissions are set to host。但是,当我从终端 运行 沙盒时(使用 flatpak run
),我看到 /tmp
的沙盒版本与主机不匹配。无论哪种情况,我都可以读取、写入和修改 /tmp
.
中的文件
事实证明这是 Flatpak 权限中的错误,而不是配置问题。维护 Eclipse Flatpak 的团队很快解决了这个问题。
对于那些感兴趣的人,Flatpak 需要请求 read/write 访问 /tmp
。
这是问题所在:https://github.com/flathub/org.eclipse.Java/issues/42
这是修复它的拉取请求:https://github.com/flathub/org.eclipse.Java/pull/43
我通过 Flathub 将 Eclipse 安装为 Flatpak。当我尝试 运行 定义为 运行 项目中所有测试的 JUnit 4 套件时,它失败并出现以下异常:
java.lang.IllegalArgumentException: Cannot read testname file.
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:266)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.init(RemoteTestRunner.java:225)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
我查看了 RemoteTestRunner
的源代码,发现它正在尝试读取一个文件,该文件的路径已提供给 运行ner:
else if("-testnamefile".equals(args[i].toLowerCase())) { //$NON-NLS-1$
String testNameFile= args[i+1];
try {
readTestNames(testNameFile);
} catch (IOException e) {
throw new IllegalArgumentException("Cannot read testname file."); //$NON-NLS-1$
}
i++;
}
所以我检查了测试执行的命令行并确实找到了那个参数:
-testNameFile /tmp/testNames8297875472451881369.txt
异常消息没有说谎 - 该文件不存在。每次 运行 时文件名都会更改,但文件永远不会创建。
我通过 flatpak run --command=sh org.eclipse.Java
从 Eclipse 内的终端和 Flatpak 容器验证我可以在 /tmp
.
这就是我卡住的地方。我不确定应该用什么来创建这个包含测试名称的临时文件,或者为什么它没有这样做。我在 Eclipse 日志中没有看到写入此文件失败的证据。权限似乎不是问题。
我做的最后一个观察是,当我在 Eclipse 和 运行 ls -al /tmp
中打开一个终端时,我看到了主机 /tmp
目录中的所有文件。我以为 Flatpak 专门屏蔽了 /tmp
even when file permissions are set to host。但是,当我从终端 运行 沙盒时(使用 flatpak run
),我看到 /tmp
的沙盒版本与主机不匹配。无论哪种情况,我都可以读取、写入和修改 /tmp
.
事实证明这是 Flatpak 权限中的错误,而不是配置问题。维护 Eclipse Flatpak 的团队很快解决了这个问题。
对于那些感兴趣的人,Flatpak 需要请求 read/write 访问 /tmp
。
这是问题所在:https://github.com/flathub/org.eclipse.Java/issues/42
这是修复它的拉取请求:https://github.com/flathub/org.eclipse.Java/pull/43