【发布时间】:2012-06-26 20:01:45
【问题描述】:
我正在开发一个项目,该项目需要获取任意数量的 java 文件,对其进行编译、打包,然后运行它们。我面临的问题是:我们跑哪个班?是否可以在一组类中找到入口点?
我愿意假设给定文件只有一个入口点。
这是我目前所考虑的:
- 为每个使用反射查找带有 main() 的类的 jar 添加一个帮助类。要运行 jar,请调用该帮助程序类。
- 将用户名设为他们的 main() 类“Main”,或类似的名称。
有什么好的方法可以解决这个问题吗?这个软件是为学生和新手程序员设计的,所以我愿意为了简单而牺牲健壮性。
谢谢!
【问题讨论】:
-
你能让他们在 JAR 文件中提供清单吗?
-
我想我可以。我只是犹豫要不要给系统增加任何复杂性。想想中学生。如果没有好的选择,我肯定会这样做。
-
啊,我明白了。 Manifest 绝对是最好的方法,但是您在关于以某种方式命名他们的主类的问题中的建议也可能有助于您教他们约定与配置,这是一个有用的知识。
-
这可能是很多工作,但很有趣。我会看看 Spring 如何进行组件扫描(从
org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider#findCandidateComponents开始),但我会寻找方法 main 而不是注释。他们使用 ASM 进行类解析。