2012-11-10 4 views
5

Co to są/są "dobre" biblioteki generujące kody java? Znalazłem pokolenie JaxMe, ale jest biedne i stare. Lubię generować kod java za pomocą kodu Java. Więc po prostu użyj lib, aby powiedzieć, że musi wygenerować konkretną klasę lub interfejs z polami X, metodami Y, itd., Które następnie są zapisywane w systemie plików. Wiem, że framework używają tego, ale nie może znajdź samodzielną bibliotekę .. - EdPoszukuje biblioteki generowania kodu java

+1

Jeśli twój program zna nazwę klasy, którą chce wygenerować, oraz nazwę i zawartość wszystkich członków, dlaczego do licha potrzebujesz generatora kodu? Czy nie wystarczy instrukcja print do strumienia wyjściowego? Interesujący generator kodu musi sam coś dodać, aby był przydatny. –

+0

Informacje, o których mówisz, nie są znane wcześniej, a nawet jeśli są znane, mówisz o masie informacji, która zmienia się co roku z powodu zmian prawnych ... Przykład: xbrl/xsd, którego chcesz użyć do wygenerowania kod i odpowiednie sprawdzenia poprawności ... – edbras

+0

Duplikat http://stackoverflow.com/questions/121324/a-java-api-to-generate-java-source-files –

Odpowiedz

1

Może powinieneś być zainteresowany cglib?

3

Istnieje kilka bibliotek z różnymi możliwościami i łatwością obsługi:

Prawdopodobnie będziesz musiał zapoznać się z API każdego z nich do określenia Który z nich jest bardziej odpowiedni do twoich celów.

+4

Wszystkie te (oprócz może cglib) wydają się być bajtami narzędzia do edycji kodu, a nie generatory kodu źródłowego ... –

+0

Dzięki za opinie, ale jak już wspomniano, są to generatory kodów bajtowych, a ja mówię o generatorach kodu źródłowego. Zauważam, że nie ma dojrzałego, samodzielnego projektu generatora kodu źródłowego, ale głównie podprojekt jak codemodel i apache JaxMe ... które często są "stare" – edbras

+0

@edbras: Myślałem, że pytasz o generowanie kodu bajtowego, ponieważ jest to, co większość ludzi ma na myśli mówiąc o generowaniu kodu w Javie. Generalnie generatory kodów mają na celu umożliwienie wykorzystania abstrakcji wyższego poziomu. Jaka byłaby abstrakcja w twoim przypadku, biorąc pod uwagę, że wyjście jest już źródłem kodu źródłowego Java *? – thkala

0

Najbardziej lubię ASM. Używa wzorca gości, który może być nieco mylący na początku, kiedy generujesz kod; ale kiedy go pojąć, to jest naprawdę czyste i łatwe.

0

Zajrzałem również do tego trochę po chwili i miałem problemy ze znalezieniem czegoś użytecznego. Najbardziej obiecującym kandydatem znalazłem faktycznie wbudowane w kompilator:

Java annotation processing (APT)

Niedawno zawarte APT z javac, więc jest zawsze dostępny.

Nie miałem zbyt wiele czasu, aby to sprawdzić, ale na pierwszy rzut oka wydaje się nieskończenie potężne (generowanie/modyfikowanie kodu źródłowego lub kodu bajtowego, błędy rzutowania, ostrzeżenia, ...), ale może być nieco skomplikowanym, aby owinąć głowę. Być może istnieją dobre tutoriale, ale nie mam w tej chwili konkretnego linku.

+0

Przetwarzanie adnotacji brzmi naprawdę niesamowicie, dopóki nie zaczniecie próbować go użyć. Ostatnim razem, gdy sprawdzałem, musieliście przeskoczyć przez niewiarygodną ilość obręczy do np. pobierz bieżący plik źródłowy, a Ty * nadal musisz zadzierać z systemem kompilacji, aby go użyć ... czasami brakuje mi preprocesora C ... – thkala