我试图用clair从命令行启动rascal,但是我不明白为什么会这样。
java -cp "rascal-0.18.0.jar;clair_0.1.0.202005281059.jar;org.eclipse.cdt.core_6.11.0.202003081657.jar" org.rascalmpl.shell.RascalShell
Version: 0.18.0
INFO: detected |lib://rascal| at |jar+file:///C:/ws/rascal-0.18.0.jar!/|
INFO: detected |lib://clair| at |jar+file:///C:/ws/clair_0.1.0.202005281059.jar!/|
rascal>
但是当改变jar的顺序时,就会失败。
java -cp "clair_0.1.0.202005281059.jar;rascal-0.18.0.jar;org.eclipse.cdt.core_6.11.0.202003081657.jar" org.rascalmpl.shell.RascalShell
Version: 0.18.0
INFO: detected |lib://clair| at |jar+file:///C:/ws/clair_0.1.0.202005281059.jar!/|
INFO: detected |lib://rascal| at |jar+file:///C:/ws/rascal-0.18.0.jar!/|
main function should either have one argument of type list[str], or keyword parameters
Usage: java -jar ...
这是classpaths的正常行为吗?
注意:clair jar不包含org.rascalmpl.shell.RascalShell类。
更新:从META-INFR中删除。从META-INFRASCAL.MF中删除这一行。
Main-Function: main
Main-Module: lang::cpp::IDE
解决了这个问题,所以这似乎是Rascal(和一个rascal函数)的问题,而不是Java(和一个Java函数)的问题。
如果有命令行参数,RascalShell的主函数会有不同的表现,并且根据它在classpath中找到的第一个RASCAL.MF文件而不同。
我怀疑是后者在起作用:classpath的顺序改变了找到哪个RASCAL.MF文件,因此REPL没有启动,而是加载了某个模块,但没有找到。但我不确定,因为我不能从这里设置一个断点;-)
我认为你在REPL中发现了两个bug。
Main-Function
定义 这是为ide插件准备的,也是在终端。我想问题在于我们在命令行中使用了和ide集成点一样的配置,我们可能需要添加一个单独的标签。