Scala和Clojure都在一个项目中

om-*_*nom 29 interop scala clojure jvm-languages

我正在寻找这两种语言的多语言编程指南.

我知道它们之间的互操作是可能的,因为它们都在同一个Java VM上运行,并且都被编译为相同的字节码.但有一些麻烦:

  • 我可以使用编译Clojure代码吗?
  • 我可以使用编译Scala代码吗?

(是的,是的,我知道我可以用一种语言插入jar来投射其他语言.)

所以问题是如何在Scala和Clojure中设置多语言开发?

Art*_*ldt 17

短的anser:使用Maven3

maven3与clojure和maven-scala-pluginzi插件将允许你有一个很好地集成的多语言项目,你可以使用任何你想要的语言,只要它的Java;)

Maven3的一个重大变化是推动多语言JVM编程,包括以多种语言编写POM的能力.虽然你获得了丰厚的回报,但是当你走这条路线时,你会失去莱宁根的光彩.


Pau*_*her 9

我没有用它,但Leiningen确实有scalac支持.


Tva*_*roh 6

就个人而言,尽管是公认的答案,我仍然不会直接使用Maven.以下是简单的Leiningen项目定义:

  • 从ANTLR4语法生成Java源代码(作为奖励);
  • 编译Java源代码;
  • 编译Scala源代码(我更喜欢在生成的ANTLR4 Java代码之上使用Scala,因为它更简洁,更舒适);
  • 继续Clojure的东西.
(defproject polyglot "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :plugins [[lein-antlr4 "0.1.0-SNAPSHOT"]
            [lein-scalac "0.1.0"]]
  :dependencies [[org.clojure/clojure "1.5.1"]
                 [org.antlr/antlr4 "4.0"]
                 [org.scala-lang/scala-library "2.10.1"]]
  :warn-on-reflection true
  :antlr4-source-paths ["antlr4"]
  :antlr4-options {:package "parser" :listener true}
  :antlr4-compile-path "target/antlr4/parser"
  :java-source-paths ["target/antlr4/parser" "src/java"]
  :scala-source-path "src/scala"
  :prep-tasks ["antlr4" "javac" "scalac" "compile"])

使用ANTLR4插件下载和'lein install'lein-antlr4插件.如果您不需要它,只需从项目定义中删除相关的行.

要使用Scala插件,我需要下载并更改

[org.scala-lang/scala-compiler "2.9.1"] 
Run Code Online (Sandbox Code Playgroud)

[org.scala-lang/scala-compiler "2.10.1"]
Run Code Online (Sandbox Code Playgroud)

在插件的project.clj中,然后在本地'lein install'.随着旧的依赖版本,我得到了

java.lang.Error: typeConstructor inapplicable for <none>
Run Code Online (Sandbox Code Playgroud)

来自Scala编译器.