Java - 编译并引用一个未知名称的类

标签 java linux jar javac

因此,我和我的同事一直在努力解决一个问题,我们一直在涉足“基准测试”类程序。我们想从用户那里接收一个 .java 文件,编译它并从我们自己的主类中调用它。

所以我们不知道文件的名称是什么,但它们有一个我们可以调用的通用方法,例如 main(),例如,我们希望将它们编译为类文件,例如 Test1.class、Test2 .class 等。但是我们看到类文件的名称需要与其中的类相对应。

是否有另一种方法可以让它发挥作用?比如把它编译成.jar文件,我们是否可以通过这个方法隐式引用它? (不确定那是可能的)

最坏的情况,我们可以将输入文件限制为已知文件名,我们只是想吸引更勤奋的头脑,如果我们可以使用更优雅的解决方案。

最佳答案

简单:使用类似 JavaParser 的工具处理您的输入。然后:将传入的类重命名为您知道的名称。

你看:很可能你想检查你得到的源代码。或者您是否真的希望允许用户将任意 代码上传到您的系统并在那里执行?因此 - 当您仔分割析该输入是否存在安全问题时 - 即时重命名收到的代码应该是“花生”。

如果这不起作用:为什么不要求您的用户向您提供所有这些信息呢?意思是:你正在处理一个复杂的问题,因为你允许用户有很多自由度。但是,当您要求他们提供他们打算在上传中使用的类/文件名时,他们的体验真的会受到影响吗?

关于Java - 编译并引用一个未知名称的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45939211/

相关文章:

java - 将 gnuplot 与 java 结合使用

java - Spring数据JPA |从 @ManyToMany 关系中的 @JoinTable 中删除 MyGroup 时仅删除条目

java - 字符串池——字符串总是存在于常量池中吗?

mysql - 使用 Linux 终端登录 MySql 没有响应

java - 在循环定义的 jpanel 中重绘 jlabel 并在循环中声明 jpanels

linux - 比较 shell 脚本和 delta 中的文件

linux - 为什么 "echo [#10]"等于 1?

java - 如何从 JAR 库中了解 android 语言

java - 在 jar 中加载文件

java - 使用SBT构建scala以制作具有依赖项的JAR和文件夹