#java #clojure
#java #clojure
Вопрос:
java -cp clojure.jar clojure.main compile.clj это компиляция кода clojure. javac CalculateSum.java компиляция кода java. jar cvf sum.jar *.class получение jar-файла файлов классов.
java CalculateSum запускает main и выдает корректный вывод. Как запустить файл jar из среды Java? как java -cp clojure.jar ;sum.jar clojure.main CalculateSum где CalculateSum — основной класс.
пример кода _utils.clj_
(ns utils
(:gen-class :name Utils
:methods [#^{:static true} [sum [java.util.Collection] long]]))
(defn sumx [coll] (reduce coll))
(defn -sum [coll] (sumx coll))
compile.clj
(set! *compile-path* "./")
(compile 'utils)
CalculateSum.java
public class CalculateSum {
public static void main(String[] args) {
java.util.List<Integer> xs = new java.util.ArrayList<Integer>();
xs.add(10);
xs.add(5);
System.out.println(Utils.sum(xs));
}
}
Цель состоит в том, чтобы удалить файл jar из этого кода. и запустите файл jar
java должен вызвать код clojure, выполнить его и распечатать результат
Комментарии:
1. Неясно, все ли классы отсутствуют в файлах jar, а также содержат ли файлы jar манифесты с указанием основного класса, зависимостей classpath и т. Д. Был бы полезен некоторый пример кода.
2. @JonSkeet я отредактировал вопрос, теперь вы также можете увидеть код.
3. Но никаких признаков jar-файла manaifest. Также неясно, где заканчивается скомпилированный код clojure — вы тоже включаете его в файл jar?
4. скомпилированные файлы классов utils.clj и CalculateSum.java добавляются в jar-файл, у меня нет ничего похожего на манифест .
Ответ №1:
Итак, есть две вещи:
-
Чтобы запустить его только из файла jar, а не превращать его в исполняемый файл jar, вам должно быть достаточно просто:
java -cp sum.jar CalculateSum
или, возможно (если ему нужны классы из closure.jar во время выполнения)
java -cp closure.jar;sum.jar CalculateSum
-
Чтобы превратить его в исполняемый файл jar, который вы можете запускать с
java -jar sum.jar
вам понадобится файл манифеста, включающий атрибут Main-Class, позволяющий задать точку входа, и, возможно, атрибут Class-Path для добавления closure.jar файл в пути к классу jar.
Для получения более подробной информации перейдите по ссылкам.