Теперь я видел несколько проектов, заканчивающихся в точке, где фактическая конфигурация зависела от вещей, доступных только во время выполнения.
Типичным способом настройки программы Java является чтение одного или нескольких файлов свойств в соответствии с некоторыми конкретными правилами приложения, а затем принятие действий в зависимости от их значений. В какой-то момент это прерывается, и вам нужна фактическая программная логика в вашей конфигурации, которая затем может быть указана с флагом и добавлением кода в ваше приложение, которое затем обрабатывает флаг.
Мне было интересно, может ли быть лучшим вариантом для модуля чтения конфигурации Lisp, где считываемый файл не является файлом свойств, а программой 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: Оказалось, что уровень интеграции между программой, интерпретируемой в Scheme, и основной программой Java, был более важным, чем я думал раньше, и что мне нужно было в проекте, чтобы иметь возможность предоставлять классы с аннотациями JAX-WS во время выполнения, что я не мог сделать с JScheme, но я мог бы сделать с Groovy. Идея небольшой библиотеки конфигурации, которая позволяет фрагменты кода в библиотеках, по-прежнему действительна, но мне все же нужно было больше, чтобы она была полезной.