2010-04-12 19 views
6

Qualcuno conosce uno strumento per Java (qualcosa come la codifica per C#) che fornisce un modo per generare codice Java in un file .java?Generazione codice Java (Metaprogramming, Reflection, wtv)

EDIT: Sto costruendo una piattaforma che ha come obiettivo principale l'automazione di un'operazione. Dando un po 'di input, voglio generare codice per uno strumento esterno. Quindi non è generazione su runtime. Voglio generare e produrre in un file reale.

+1

Che tipo di generazione di codice, per quale tipo di programmi? Generazione del codice in fase di esecuzione o no? Si prega di essere più specifici. –

+0

Qual è l'obiettivo finale qui? Java ha molti strumenti per creare o modificare il codice byte (codice Java compilato), ma non ne conosco nessuno per la generazione diretta del codice Java. – ig0774

+0

sto costruendo una piattaforma che ha come obiettivo principale quello di automatizzare un'operazione. Dando un po 'di input, voglio generare codice per uno strumento esterno. Quindi non è generazione su runtime. Voglio generare e produrre in un file reale. –

risposta

1

JET forse superata (non l'ho usato) JET Tutorial Part 1

più plugin per Eclipse Plugins in Code Generation

EDIT: dispiace non so CodeDOM e quali caratteristiche di questo strumento comporta.

Standalone è Freemarker e Velocity Vedi anche example

+0

ma che sarebbe dipendente dall'eclissi, e questo deve essere standalone, ecco perché ho detto qualcosa come la codizione di C# –

0

Ho avuto un certo successo utilizzando ASM per modificare entrambe le classi esistenti a livello di byte di codice o per generare classi completamente nuove al volo. Il tutorial ti guida attraverso questo in modo molto comprensibile.

ASM come la maggior parte di tali strumenti genera bytecode non sorgente. La ragione di ciò è che se si vuole generare ed eseguire dinamicamente un nuovo codice da un programma, storicamente non era semplice invocare il compilatore Java. Pertanto è stato generalmente più facile generare e utilizzare bytecode rispetto alla sorgente.

Se è necessario generare ed eseguire il codice immediatamente all'interno del programma, è consigliabile utilizzare lo strumento di manipolazione del codice. Se tutto ciò di cui hai bisogno è il codice sorgente Java, eseguirò il mio generatore di codice che prende il mio formato di input e genera il codice. Potresti voler cercare un framework per aiutarti con questo, ma dal momento che un file sorgente è solo testo, in genere è altrettanto facile crearlo tu stesso, specialmente se hai un formato di input personalizzato.

+0

che sarebbe bello se volessi modificare qualcosa in fase di runtime, ma in realtà generi codice statico per un ulteriore utilizzo. –

+1

ASM non è solo per le modifiche al codice byte. Se non hai bisogno di codice sorgente, sarebbe perfetto. Soprattutto con l'eccezionale Ectecse Bytecode Outline. – tcurdt

+0

grazie, ma Freemarker può fare solo la cosa che volevo (: –

0

cosa si può provare è quella di utilizzare una grammatica esistente (per esempio da ANTLR) e costruire l'AST. Quindi da AST generare il codice. Questo dovrebbe essere molto più robusto del semplice modello. Per qualcosa nel mezzo suggerisco il discorso (di apertura degli occhi) di Terence Parr su StringTemplate. (Spiacente, non ho il link per il discorso a portata di mano)

+0

grazie, ma Freemarker può fare solo la cosa che volevo (: –

0

Non sono sicuro di cosa hai veramente bisogno, ma dai uno sguardo allo javassist. È la cosa che stai cercando?

1

ABSE e AtomWeaver formano una generazione di codice e un framework di sviluppo basato sul modello in cui è possibile implementare facilmente ciò che si desidera. ABSE è una nuova metodologia in cui si compone il generatore di codice da bit più piccoli (chiamati Atomi) e AtomWaver è un IDE semplice che consente di implementare, manipolare e utilizzare i modelli di generatore.

Consente inoltre ai non programmatori di creare programmi/configurazioni/qualsiasi cosa, realizzati con parti già costruite (Atomi precedentemente preparati).

Questo progetto è appena stato lanciato pubblicamente ora e una versione alpha è ora disponibile. ABSE è aperto e AtomWeaver è gratuito per uso personale e commerciale.

Più informazioni qui: http://www.abse.info (Disclaimer: io sono il responsabile del progetto)

+0

grazie, ma Freemarker può fare solo la cosa che volevo (: –