Как запустить файл jar, содержащий файлы классов, скомпилированные с помощью clojure и java-кода. java-файл содержит основной метод

#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.

Для получения более подробной информации перейдите по ссылкам.