我用Ceylon Eclipse插件编写了一个简单的Hello World程序:


如果有人想快速重现此问题,请使用以下源代码:

shared void main() {
    String omg = (process.arguments.first else "nothing");
    print("You wrote ``omg``, you silly programmer!");
}


现在,我可以在Eclipse中正常运行该程序。但是如何从终端运行它?

我没有安装Ceylon命令行工具,我希望它保持这种状态。当我将程序提供给其他人时,我也不希望他们也必须安装Ceylon。

似乎只有一个类文件:

~/workspace/saloon $ find . -type f -name "*.class"
./.exploded/main_.class


如果我尝试运行该命令,则会得到:

~/workspace/saloon/.exploded $ java main_
Exception in thread "main" java.lang.NoClassDefFoundError: ceylon/language/process_
    at main_.main(main.ceylon)
Caused by: java.lang.ClassNotFoundException: ceylon.language.process_
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more


Eclipse项目似乎并不依赖于任何.jar文件,仅依赖于一个.car文件,但是java不适用于.car文件。通过提供适当的.jar文件,可以很容易地从终端运行Scala Eclipse项目。

那么如何从终端通过java运行Ceylon Eclipse项目?还是这不可能?

最佳答案

嗯,根据您愿意做多少工作,有两种可能的答案。

我的第一个答案是:不能,您需要安装锡兰。因为Ceylon不仅仅是关于一种具有在JVM上运行的新语法的程序。这是一个平台,它具有自己的库和模块系统,该模块系统将即时下载相关性。为此,您需要的不仅仅是编译的代码。

安装CLI工具后,您可以使用以下命令运行程序:ceylon run <name-of-your-module>

我的第二个答案是:如果您真的想能够独立于Ceylon平台运行,并且愿意放弃工具和模块系统等,并且愿意解决收集必要依赖项并与之一起分发的麻烦。您可以自己编写程序,然后可以使用ceylon classpath <name-of-your-module>命令获取程序正在使用的所有依赖项的列表。

然后可以使用com.redhat.ceylon.compiler.java.runtime.Main入口点运行它。

有关详细说明,请参见以下网站:http://www.ceylon-lang.org/documentation/1.1/reference/interoperability/ceylon-on-jvm/

09-05 04:39