你如何 运行 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++;

            }

Source link

所以我检查了测试执行的命令行并确实找到了那个参数:

-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