如何在Flatpak Eclipse中运行JUnit测试



我通过Flathaub将Eclipse安装为Flatpak。当我尝试运行一个定义为在项目中运行所有测试的JUnit4套件时,它失败了,出现了以下异常:

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的源代码,发现它正在尝试读取一个文件,该文件的路径已提供给运行程序:

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

异常消息没有说谎——该文件不存在。文件的名称在每次运行时都会更改,但从未创建该文件。

我从Eclipse内部的终端和Flatpak容器通过flatpak run --command=sh org.eclipse.Java验证了我可以在/tmp创建、修改和删除文件。

这就是我被卡住的地方。我不知道应该用什么创建这个带有测试名称的临时文件,也不知道为什么它没有这样做。我在Eclipse日志中没有看到写这个文件失败的证据。权限似乎不是问题。

我做的最后一个观察是,当我在Eclipse中打开一个终端并运行ls -al /tmp时,我会看到主机的/tmp目录中的所有文件。我认为Flatpak特别阻止了/tmp,即使文件权限设置为主机。但是,当我从终端(使用flatpak run(运行沙箱时,我会看到/tmp的沙箱版本与主机不匹配。在任何一种情况下,我都可以在/tmp中读取、写入和修改文件。

原来这是Flatpak权限中的错误,而不是配置问题。Eclipse Flatpak的维护团队很快就解决了这个问题。

对于感兴趣的用户,Flatpak需要请求对/tmp的读/写访问。

问题是:https://github.com/flathub/org.eclipse.Java/issues/42

以下是修复它的pull请求:https://github.com/flathub/org.eclipse.Java/pull/43

最新更新