【问题标题】:Export a Rascal project to a JAR file将 Rascal 项目导出到 JAR 文件
【发布时间】:2018-05-20 13:47:38
【问题描述】:

我有一个 Rascal 项目,我想导出到一个 JAR 文件以像终端应用程序一样运行,因此用户可以简单地从命令行运行 JAR,而不是从 Eclipse 运行它。有没有办法做到这一点?我尝试像常规 Java 项目一样导出它,但我不确定如何指定 JAR 的入口点等内容。

【问题讨论】:

    标签: rascal


    【解决方案1】:

    这是当前 Rascal 0.18.2 的更新答案,以更类似于食谱的方式。 @davy-landman 帮我把它放在一起。

    假设你有一个非常简单的 Rascal 模块,你想将它部署到命令行,比如 HelloWorldMain.rsc

    module HelloWorldMain
    import IO;
    int main(int arg=1) {
        println("Hello, World!");
        return 0;
    }
    

    将其放入具有以下结构的HelloWorldMain.jar 文件中:

    |- src
       |- HelloWorldMain.rsc
    |- META-INF
       |- RASCAL.MF
    

    包含的 RASCAL.MF 文件如下所示:

    Manifest-Version: 0.0.1
    Project-Name: MyRascalProject
    Source: src
    Main-Module: HelloWorldMain
    Main-Function: main
    

    然后你可以调用它

    java  -Xmx1G -Xss32m -cp "HelloWorldMain.jar;rascal-0.18.2.jar" org.rascalmpl.shell.RascalShell
    

    假设您的自定义和 Rascal jar 都在当前目录中。类路径中文件的顺序很重要。确保您调用的 Java 二进制文件来自 JDK(而不是 JRE)。这将直接从您的 HelloWorldMain 模块运行 main() 方法。

    【讨论】:

    • 你可以在命令行中提供-arg 32来覆盖默认的int arg=1绑定,
    【解决方案2】:

    这在一定程度上取决于您使用的 API。

    1. 如果它们是 eclipse 特定的(m3 的 jdt 子模块)或者如果它们使用 eclipse 语言服务,则必须创建一个插件和一个功能项目。这不适合胆小的人,但它有效。我会试着找一个例子。
    2. 如果您想要一个类似终端的应用程序,您可以从网站上获取现有的不稳定/稳定 jar,然后将您的文件复制到那里,然后更新 rascal.mf 文件以在搜索路径中也包含您的子目录。 shell 应该会自动工作。
    3. 如果您想从 Java 代码链接 rascal 函数,您必须做一些工作才能正确连接评估程序。 (然后执行第 1 点或第 2 点)

    所以,如果您可以让您的问题更具体,我会针对您的情况做出具体的回答,包括示例。

    (这个答案有点半评论/半答案,抱歉)。

    【讨论】:

    • 您好,感谢您的回答,我相应地更新了我的问题。我的用例是您的第二个选择。
    猜你喜欢
    • 2014-10-20
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多