是否有人成功创建了一个NetBeans项目,结合了Clojure和Java源代码?
我有一些项目,其中驱动程序(启动,gui,用户偏好等)是在Java中,但逻辑是在Clojure。目前,我将Clojure代码编译到一个项目中的jar中,并将其作为库导入到另一个Java项目中。如果所有的源代码都可以合并到一个NetBeans项目中,那将是很方便的。
有没有人想出一个方法来做到这一点?
一种可能的解决方案是修改NetBeans Java项目的Ant脚本(根目录中的build.xml)来拥有它。
默认情况下,NetBeans在根项目目录的build.xml中创建几个占位符Ant目标,供您覆盖以自动执行超出标准构建过程的任务(例如编译其他语言以在当前项目中使用它们的库)。通过覆盖构建脚本中的一个占位符目标,例如"-pre-compile",您可以编写一个简单的目标,使用Ant"exec"任务调用Clojure编译过程,并将所有生成的类文件(或JAR)放在适当的构建目录中。
如果你经常这样做,你可以定义一个Ant扩展(通过一个宏或Ant插件),这样你就不必每次都修改build.xml了。
我使用RT方法。我将Clojure代码放入一个脚本文件中,并在启动时进行处理:
try {
RT.loadResourceScript("com/mydomain/app/clojure_scripts.clj"); // Initialize Clojure script processor with our script
} catch (Exception e) {
Util.logException(e, "Unable to run Clojure initialization script.");
}
然后,因为我的主要逻辑是在Java中,我只调用Clojure进行计算,我使用一些胶水代码为我映射调用:
/*
* Class to wrap Clojure scripts with Java friendly methods.
*/
public class Clojure {
private static final String ns="com.mydomain.app";
public static double calculate(final double size, final double otherVar) {
Var report=RT.var(ns, "calculate");
return (Double) report.invoke(size, otherVar);
}
};