Clojure и исходный код Java в одном проекте NetBeans - PullRequest
5 голосов
/ 09 июля 2011

Кто-нибудь успешно создал проект NetBeans, который сочетает в себе Clojure и исходный код Java?

У меня есть проекты, в которых программа драйвера (автозагрузка, графический интерфейс, пользовательские настройки и т. Д.) Находится на Java, но логика - на Clojure. В данный момент я компилирую код Clojure в jar-файл одного проекта и импортирую его как библиотеку в отдельный Java-проект. Было бы удобно, если бы все источники можно было объединить в одном проекте NetBeans.

Кто-нибудь придумал способ сделать это?

Ответы [ 2 ]

2 голосов
/ 14 июля 2011

Одним из возможных решений является изменение сценария Ant вашего Java-проекта NetBeans (build.xml в корневом каталоге), чтобы он был.

По умолчанию NetBeans создает несколько целевых Ant-заполнителей в корневом каталоге проекта build.xml, которые вы можете переопределить для автоматизации задач, выходящих за рамки стандартного процесса сборки (например, компиляция других языков для использования их библиотек в текущем проекте). Переопределив одну из целей-заполнителей в этом сценарии сборки, такую ​​как «-pre-compile», вы можете написать простую цель для вызова процесса компиляции Clojure с помощью задачи Ant «exec» и поместить все полученные файлы классов (или JAR) в соответствующий каталог сборки.

Если вы делаете это часто, вы можете определить расширение Ant (через макрос или плагин Ant), чтобы вам не приходилось каждый раз изменять build.xml.

1 голос
/ 27 февраля 2014

Я использую метод 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);
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...