Skip to content

Codegeneration patterns and examples which can help maintain your code

Notifications You must be signed in to change notification settings

lanwen/heisenbug17

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Heisenbug 2017

Codegen полезняшки. Набор инструментов, которые пробовал в процессе работы над разными проектами. Некоторые сильно дублируют друг-друга.

JAXB & плагины

Annotation processors

Шаблонизаторы

  • Logic-less and semantic Mustache templates with Java Удобные, без логики, довольно куцые шаблоны. Очень легко воспринимаются. Отлично для старта. https://github.com/jknack/handlebars.java

  • Apache FreeMarker is a template engine: a Java library to generate text output Один из самых распространенных в java. Умеет очень много, довольно быстрый. Сильно полноценнее mustache, но и сложнее для освоения и восприятия. http://freemarker.org

  • StringTemplate is a java template engine (with ports for C#, Objective-C, JavaScript, Scala) for generating source code, web pages, emails, or any other formatted text output. Несколько маргинальная либа для шаблонизации, но много умеет и входит в состав ANTLR тулчейна (популярная либа для грамматик по обработке текста). Очень быстрая. http://www.stringtemplate.org

  • Velocity is a Java-based template engine. It permits anyone to use a simple yet powerful template language to reference objects defined in Java code. По возможностям близко к freemarker, но ооочень давно не обновляется и сильно устарела по api, удобству, скорости итд. Здесь чтобы просто быть. http://velocity.apache.org

Для тестирования

  • ! Testing tools for javac and annotation processors Самый удобный тул для тестирования кодогенераторов в вакууме https://github.com/google/compile-testing

  • Custom assertions generator По идее похож на генерацию матчеров. Только генерирует сразу ассерты. Не всегда удобно использовать с глубокой вложенностью https://github.com/joel-costigliola/assertj-assertions-generator

  • Rest-Assured RAML Codegen - Generates test http client, based on Rest-Assured with help of RAML spec Гибкий клиент для тестирования. rest-assured под капотом https://github.com/qameta/rarc

Бины, протоколы

  • Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler. Не только бины, но и протокол сериализации. Не всегда прозрачно ложится на текущую инфраструктуру. Внедрить подход через JAXB или jsonschema сильно проще, принцип но такой же как у протобуфов. Нечеловекочитаемый результат сериализации. Очень экономно передает данные. Используется, например, большинством браузеров для синхронизации данных с облаком. https://developers.google.com/protocol-buffers/

  • Maven Plugin that executes the Protocol Buffers (protoc) compiler Позволяет процессить схемы во время билда и не коммитить сотни тысяч строк сгенерированного кода. https://github.com/xolstice/protobuf-maven-plugin

  • jsonschema2pojo generates Java types from JSON Schema (or example JSON) and can annotate those types for data-binding with Jackson 1.x, Jackson 2.x or Gson. Похож на JAXB, только работает с json и json-схемой. Очень гибкий и простой для внедрения. Есть мавен, гредл и cli виды. https://github.com/joelittlejohn/jsonschema2pojo

  • swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs Генерирует клиента по сваггер схеме. Код получается уродливый. Кастомизируется тяжело. Зато очень много языков из коробки. Отличный пример как не надо работать с результатами кодогенерации. Ребята коммитят всё прямо рядом с исходниками кодогенератора. Из-за этого в репозитории каша, а каждый PR это месиво из тысяч строк. Возможно из-за этого и сам код кодогенератора - месиво. https://github.com/swagger-api/swagger-codegen

  • The Apache Thrift software framework, for scalable cross-language services development, combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml and Delphi and other languages. Как и протобуфы дает еще и протокол сериализации. Помимо этого еще и сервер и клиентов. http://thrift.apache.org

  • Maven plugin for generating Java client RESTful code based on RAML protocol. Несложные клиенты по raml схеме. Уступает swagger-генератору по поддержаным возможностям https://github.com/aureliano/cgraml-maven-plugin

Генерация сорцов, байткода

  • A Java API for generating .java source files. Лучшая на мой взгляд библиотека для императивного способа генерации сорцов https://github.com/square/javapoet

Ближе к байткоду

Общее

Golang

About

Codegeneration patterns and examples which can help maintain your code

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages