Я видел несколько проектов, заканчивающихся в тот момент, когда фактическая конфигурация зависела от вещей, доступных только во время выполнения.
Типичным способом настройки Java-программы является чтение одного или нескольких файлов свойств в соответствии с некоторыми конкретными правилами приложения, а затем выполнение действий в зависимости от их значений. В тот или иной момент это выходит из строя, и вам нужна актуальная логика программы в вашей конфигурации, которая затем может быть обозначена флагом и добавлением кода в ваше приложение, которое затем обрабатывает флаг.
Мне было интересно, может ли крошечный модуль чтения конфигурации Lisp быть лучшим вариантом, когда файл для чтения - это не файл свойств, а программа на Лиспе, которая затем оценивается для создания окончательной структуры данных, представляющей конфигурацию. Минимальный набор функций в библиотеке времени выполнения позволил бы манипулировать строками и, возможно, даже вызывать JVM. Просто подумайте о «создании URL на основе текущего имени хоста».
Я не заинтересован в полном движке Lisp с наворотами, а просто в маленькой библиотеке для этой цели, которая может быть вложена даже в небольшие программы без большой банки, содержащей движок Lisp.
Так существует ли такая библиотека?
- Малый размер
- Просто нужно прочитать файл + eval и возможность прочитать полученную структуру данных из основной программы Java
- Небольшая библиотека времени выполнения Lisp
- Скорость имеет меньшее значение.
- Активно поддерживается.
Предложения
Редактировать 2012-01-20: Первоначально я счел всех кандидатов нежелательными, но решил использовать это как упражнение Maven на стороне с выпуском jscheme 1.4 1998 года . Проект на https://github.com/ravn/jscheme-1998
Edit 2012-12-11: Оказалось, что уровень интеграции 1035 * между программой, интерпретируемой в Scheme, и программой Java на хосте был более важным, чем я изначально думал, и что мне нужно в проекте чтобы иметь возможность предоставлять классы с аннотациями JAX-WS во время выполнения, что я не мог сделать с JScheme, но я мог сделать с Groovy. Идея небольшой библиотеки конфигурации, которая позволяет фрагменты кода в библиотеках, все еще остается в силе, но в итоге мне понадобилось больше, чтобы она была полезной.