Использование Lisp или Scheme для настройки программ Java во время выполнения

Я видел несколько проектов, заканчивающихся в точке, где фактическая конфигурация зависела от вещей, доступных только во время выполнения.

Типичный способ Для настройки программы Java необходимо прочитать один или несколько файлов свойств в соответствии с некоторыми правилами конкретного приложения, а затем предпринять действия в зависимости от их значений. В какой-то момент это выходит из строя, и вам нужна реальная программная логика в вашей конфигурации, которая затем может быть обозначена флагом и добавлением кода в ваше приложение, которое затем обрабатывает флаг.

Мне было интересно, может ли крошечный модуль чтения конфигурации Lisp быть лучшим вариантом, когда файл для чтения является не файлом свойств, а программой Lisp, которая затем оценивается для создания окончательной структуры данных, представляющей конфигурацию. Тогда минимальный набор функций в библиотеке времени выполнения позволит манипулировать строками и, возможно, даже вызывать JVM. Просто подумайте о «построении URL-адреса на основе текущего имени хоста».

Меня не интересует полноценный движок Lisp с прибамбасами, а просто небольшая библиотека для этой цели, которую можно включить даже в небольшие программы без большого jar-файла, содержащие движок Lisp.

Так существует ли такая библиотека?

  • Маленький размер
  • Просто нужно читать файл + eval и иметь возможность читать полученную структуру данных из основной программы Java
  • Небольшая библиотека времени выполнения Lisp
  • Скорость имеет меньшее значение.
  • Активно поддерживается.

Предложения?


Редактировать 2012-01-20: Сначала я нашел всех кандидатов нежелательными, но решил использовать это как упражнение Maven на стороне с выпуск 1998 jscheme 1.4 . Проект на https://github.com/ravn/jscheme-1998


Edit 2012-12-11: Оказалось, что уровень интеграции между программой, интерпретируемой в Scheme, и хост-программа Java была более важной, чем я изначально думал, и что мне нужно было в проекте, чтобы иметь возможность предоставлять классы с аннотациями JAX-WS во время выполнения, чего я не мог сделать с JScheme, но мог сделать с Groovy. Идея небольшой библиотеки конфигурации, которая позволяет использовать фрагменты кода в библиотеках, все еще актуальна, но в итоге мне понадобилось больше, чтобы она была полезной.

11
задан Community 23 May 2017 в 11:59
поделиться