Как включить Java-файлы в файлы .jar? - PullRequest
3 голосов
/ 23 января 2010

Хорошо. Итак, вот мой вопрос: я делаю анализатор данных в Clojure. Одна часть моей программы заключается в том, что она должна иметь возможность графически представлять данные. Я полагаю, я буду использовать jFreeChart. Тем не менее, у меня нет абсолютно никакой идеи, как включить вещи в JAR-файлы. Я имею в виду следующее: если в моем classpath-файле есть файл app.jar, мне кажется, что я не могу:

import app.thing.thing2

без изменения пути к классу, чтобы он находился внутри файла JAR.

Идея в том, что я не думаю, что могу изменить свой путь к классу, поскольку мне нужно настроить его на запуск Clojure (или я?). Глобальный путь к классам в настоящее время /usr/share/java.

И, пожалуйста, не просите меня использовать Maven, Ant или любой другой инструмент для создания проекта, если только это не единственный способ сделать это. Это скрипт для личного использования, который не требует или не требует много накладных расходов.

Интересно, должен ли я просто распаковать каждый файл JAR, чтобы я мог ссылаться на структуру каталогов? Это плохо?

Дайте мне знать, если вам нужны какие-либо разъяснения!

Ответы [ 4 ]

6 голосов
/ 23 января 2010

Содержимое переменной среды (Java) CLASSPATH доступно для Clojure, поэтому, если вы добавите свой jar в глобальный путь к классам перед запуском Clojure, вы его «увидите»:

export CLASSPATH=/path/to/jfreechart.jar:$CLASSPATH

Но, на мой взгляд, это не «чистый» способ добавить jar в classpath Clojure (потому что это делает библиотеку видимой для любой Java-программы и может быть нежелательной). Вместо этого вы должны использовать переменную окружения CLOJURE_EXT. Вот как задокументирована эта переменная:

# CLOJURE_EXT The path to a directory containing (either directly or as
# symbolic links) jar files and/or directories whose paths
# should be in Clojure's classpath. The value of the
# CLASSPATH environment variable for Clojure will be a list
# of these paths followed by the previous value of CLASSPATH
# (if any).

В моей системе это определяется следующим образом:

export CLOJURE_EXT=~/.clojure

Итак, чтобы добавить jfreechart.jar (или любую другую библиотеку) в путь к классам Clojures, скопируйте его (или добавьте символическую ссылку, указывающую на него) в каталог, определенный в переменной CLOJURE_EXT.

И, кстати (извините, но ваш вопрос не так понятен), если вы хотите связать некоторые классы Java в jar, команда будет выглядеть примерно так:

$ jar cf myjarfile *.class 

Документацию по jar - инструменту архивирования Java - здесь .

2 голосов
/ 28 января 2010

Я полностью уважаю ваше желание не использовать инструмент управления проектами, хотя я потратил больше времени на ввод этого предложения, чем на настройку leiningen.Для вашего одноразового скрипта любой инструмент будет излишним, и ответ Паскаля Тивента это очень хорошо описывает.Для людей, читающих этот вопрос, которые, возможно, захотят создать jar-файл или легко загрузить свои Clojure в emacs / slime-swank, я не могу рекомендовать leiningen слишком сильно.

1 голос
/ 23 января 2010

Если вы пойдете к основам, вы можете встроить свой путь к классу, чтобы включить жестко запрограммированное местоположение ваших банок, поэтому если вы на окнах, это будет выглядеть примерно так:

java -cp .;%CLASSPATH%;C:/here/it/is/foo.jar com.foo.MyClass

0 голосов
/ 23 января 2010

Не знаете, как работает clojure, но вы просто не добавляете файл jar в путь к классам?

т.е.

/usr/share/java:/home/user/myjarfile.jar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...