Я ищу фреймворк для создания исходных файлов Java.
Что-то вроде следующего API:
X clazz = Something.createClass("package name", "class name");
clazz.addSuperInterface("interface name");
clazz.addMethod("method name", returnType, argumentTypes, ...);
File targetDir = ...;
clazz.generate(targetDir);
Затем в подкаталоге целевого каталога должен быть найден исходный файл java.
Кто-нибудь знает такой фреймворк?
ИЗМЕНИТЬ :
- Мне действительно нужны исходные файлы.
- Также хочу заполнить код методов.
- Я ищу абстракцию высокого уровня, а не прямую манипуляцию / генерацию байт-кода.
- Еще мне нужна «структура класса» в дереве объектов.
- Проблемная область является общей: создать большое количество очень разных классов без «общей структуры».
РЕШЕНИЯ
Я опубликовал 2 ответа на основе ваших ответов ... с помощью CodeModel и Eclipse JDT .
Я использовал CodeModel в своем решении :-)
java
eclipse
code-generation
Даниэль Фанжул
источник
источник
Ответы:
Sun предоставляет API под названием CodeModel для генерации исходных файлов Java с помощью API. Получить информацию не так-то просто, но она есть и работает очень хорошо.
Самый простой способ получить его - это часть JAXB 2 RI - генератор схемы XJC в java использует CodeModel для генерации своего источника java, и он является частью jar-файлов XJC. Вы можете использовать его только для CodeModel.
Возьмите его с http://codemodel.java.net/
источник
Решение найдено с помощью CodeModel
Спасибо, skaffman .
Например, с этим кодом:
Я могу получить такой результат:
источник
cm._class(...)
как аргумент возвращаемого типа дляdc.method(...)
.Решение найдено с помощью Eclipse JDT AST
Спасибо, Джайлс .
Например, с этим кодом:
Я могу получить такой результат:
источник
Вы можете использовать Roaster ( https://github.com/forge/roaster ) для генерации кода.
Вот пример:
отобразит следующий вывод:
источник
Другой альтернативой является AST Eclipse JDT, который хорош, если вам нужно переписать произвольный исходный код Java, а не просто генерировать исходный код. (и я считаю, что его можно использовать независимо от затмения).
источник
Проект Eclipse JET можно использовать для генерации исходного кода. Я не думаю, что это API в точности как тот, который вы описали, но каждый раз, когда я слышал о проекте, выполняющем генерацию исходного кода Java, они использовали JET или самодельный инструмент.
источник
Не знаю библиотеки, но общий шаблонизатор может быть всем, что вам нужно. Их много , у меня лично был хороший опыт работы с FreeMarker
источник
Я построил нечто, очень похожее на ваш теоретический DSL, названное "sourcegen", но технически вместо проекта утилиты для ORM, которое я написал. DSL выглядит так:
https://github.com/stephenh/joist/blob/master/util/src/test/java/joist/sourcegen/GClassTest.java
Он также делает некоторые изящные вещи, такие как «Автоматическая организация импорта» любых FQCN в параметрах / возвращаемых типах, автоматическая обрезка любых старых файлов, которые не были затронуты в этом прогоне кодогенератора, правильные отступы внутренних классов и т. Д.
Идея состоит в том, что сгенерированный код должен быть красивым, без предупреждений (неиспользованный импорт и т. Д.), Как и остальная часть вашего кода. Так много сгенерированного кода некрасиво читать ... это ужасно.
В любом случае, документации не так много, но я думаю, что API довольно прост / интуитивно понятен. Репозиторий Maven здесь, если кому-то интересно.
источник
Если вам ДЕЙСТВИТЕЛЬНО нужен источник, я не знаю ничего, что генерирует источник. Однако вы можете использовать ASM или CGLIB для непосредственного создания файлов .class.
Возможно, вы сможете сгенерировать исходный код из них, но я использовал их только для генерации байт-кода.
источник
Я сам делал это для инструмента генератора макетов. Это очень простая задача, даже если вам нужно следовать рекомендациям Sun по форматированию. Бьюсь об заклад, вы закончите код, который сделает это быстрее, чем вы найдете что-то, что соответствует вашей цели в Интернете.
Вы в основном сами обрисовали API. Просто заполните его настоящим кодом прямо сейчас!
источник
Также есть StringTemplate . Он разработан автором ANTLR и довольно мощный.
источник
Появился новый проект с однократной записью . Генератор кода на основе шаблонов. Вы пишете собственный шаблон с помощью Groovy и генерируете файл в зависимости от отражений Java. Это самый простой способ создать любой файл. Вы можете создавать getters / settest / toString, генерируя файлы AspectJ, SQL на основе аннотаций JPA, вставки / обновления на основе перечислений и так далее.
Пример шаблона:
источник
Это действительно зависит от того, что вы пытаетесь сделать. Генерация кода - это отдельная тема. Без конкретного случая использования я предлагаю взглянуть на библиотеку генерации кода скорости / шаблонов. Кроме того, если вы выполняете генерацию кода в автономном режиме, я бы предложил использовать что-то вроде ArgoUML для перехода от диаграммы / объектной модели UML к Java-коду.
источник
Пример: 1 /
2 /
источник
Вот интересный проект JSON-to-POJO:
http://www.jsonschema2pojo.org/
источник