Saya mencari kerangka kerja untuk menghasilkan file sumber Java.
Sesuatu seperti API berikut:
X clazz = Something.createClass("package name", "class name");
clazz.addSuperInterface("interface name");
clazz.addMethod("method name", returnType, argumentTypes, ...);
File targetDir = ...;
clazz.generate(targetDir);
Kemudian, file sumber java harus ditemukan di sub-direktori dari direktori target.
Apakah ada yang tahu kerangka kerja seperti itu?
EDIT :
- Saya sangat membutuhkan file sumber.
- Saya juga ingin mengisi kode metode.
- Saya mencari abstraksi tingkat tinggi, bukan manipulasi bytecode langsung / generasi.
- Saya juga membutuhkan "struktur kelas" di pohon benda.
- Domain masalahnya adalah umum: untuk menghasilkan sejumlah besar kelas yang sangat berbeda, tanpa "struktur umum".
SOLUSI
Saya telah mengirim 2 jawaban berdasarkan jawaban Anda ... dengan CodeModel dan dengan Eclipse JDT .
Saya telah menggunakan CodeModel dalam solusi saya, :-)
java
eclipse
code-generation
Daniel Fanjul
sumber
sumber
Jawaban:
Sun menyediakan API yang disebut CodeModel untuk menghasilkan file sumber Java menggunakan API. Ini bukan hal termudah untuk mendapatkan informasi, tetapi ada di sana dan berfungsi dengan sangat baik.
Cara termudah untuk mendapatkannya adalah sebagai bagian dari JAXB 2 RI - generator skema-ke-Jawa XJC menggunakan CodeModel untuk menghasilkan sumber java-nya, dan itu adalah bagian dari toples XJC. Anda dapat menggunakannya hanya untuk CodeModel.
Raih dari http://codemodel.java.net/
sumber
Solusi ditemukan dengan CodeModel
Terima kasih, skaffman .
Misalnya, dengan kode ini:
Saya bisa mendapatkan output ini:
sumber
cm._class(...)
sebagai argumen tipe pengembaliandc.method(...)
.Solusi ditemukan dengan AST Eclipse JDT
Terima kasih, Giles .
Misalnya, dengan kode ini:
Saya bisa mendapatkan output ini:
sumber
Anda dapat menggunakan Roaster ( https://github.com/forge/roaster ) untuk melakukan pembuatan kode.
Berikut ini sebuah contoh:
akan menampilkan output berikut:
sumber
Alternatif lain adalah AST Eclipse JDT yang baik jika Anda perlu menulis ulang kode sumber Java sewenang-wenang daripada hanya menghasilkan kode sumber. (dan saya percaya ini dapat digunakan secara independen dari gerhana).
sumber
Proyek Eclipse JET dapat digunakan untuk melakukan pembuatan sumber. Saya tidak berpikir itu API persis seperti yang Anda gambarkan, tetapi setiap kali saya mendengar tentang proyek yang melakukan pembuatan sumber Java, mereka telah menggunakan JET atau alat buatan lokal.
sumber
Tidak tahu perpustakaan, tetapi mesin templat generik mungkin yang Anda butuhkan. Ada banyak dari mereka , saya secara pribadi memiliki pengalaman yang baik dengan FreeMarker
sumber
Saya membuat sesuatu yang sangat mirip dengan DSL teoretis Anda, yang disebut "sourcegen", tetapi secara teknis alih-alih proyek util untuk ORM yang saya tulis. DSL terlihat seperti:
https://github.com/stephenh/joist/blob/master/util/src/test/java/joist/sourcegen/GClassTest.java
Ini juga melakukan beberapa hal yang rapi seperti "Impor pengaturan otomatis" FQCNs apa pun dalam tipe parameter / pengembalian, pemangkasan otomatis semua file lama yang tidak tersentuh dalam proses codegen ini, indentasi dengan benar kelas dalam, dll.
Idenya adalah bahwa kode yang dihasilkan harus cantik untuk melihatnya, tanpa peringatan (impor yang tidak digunakan, dll.), Sama seperti sisa kode Anda. Begitu banyak kode yang dihasilkan jelek untuk dibaca ... itu mengerikan.
Bagaimanapun, tidak ada banyak dokumen, tapi saya pikir APInya cukup sederhana / intuitif. Repo Maven ada di sini jika ada yang tertarik.
sumber
Jika Anda BENAR-BENAR membutuhkan sumber, saya tidak tahu apa pun yang menghasilkan sumber. Namun Anda dapat menggunakan ASM atau CGLIB untuk secara langsung membuat file .class.
Anda mungkin dapat menghasilkan sumber dari ini, tetapi saya hanya menggunakannya untuk menghasilkan bytecode.
sumber
Saya melakukannya sendiri untuk alat generator tiruan. Ini adalah tugas yang sangat sederhana, bahkan jika Anda harus mengikuti pedoman pemformatan Sun. Saya yakin Anda akan menyelesaikan kode yang melakukannya lebih cepat daripada Anda menemukan sesuatu yang sesuai dengan tujuan Anda di Internet.
Anda pada dasarnya telah menguraikan API sendiri. Cukup isi dengan kode aktual sekarang!
sumber
Ada juga StringTemplate . Ini oleh penulis ANTLR dan cukup kuat.
sumber
Ada proyek baru write-it-once . Pembuat kode berbasis template. Anda menulis template khusus menggunakan Groovy , dan menghasilkan file tergantung pada refleksi java. Ini cara paling sederhana untuk menghasilkan file apa pun. Anda dapat membuat getter / settest / toString dengan menghasilkan file AspectJ, SQL berdasarkan anotasi JPA, sisipan / pembaruan berdasarkan enum dan sebagainya.
Contoh template:
sumber
Itu benar-benar tergantung pada apa yang Anda coba lakukan. Pembuatan kode adalah topik dalam dirinya sendiri. Tanpa case-use khusus, saya sarankan melihat perpustakaan pembuatan kode / templat kecepatan. Juga, jika Anda melakukan pembuatan kode offline, saya akan menyarankan menggunakan sesuatu seperti ArgoUML untuk beralih dari diagram UML / model objek ke kode Java.
sumber
Contoh: 1 /
2 /
sumber
Ini adalah proyek JSON-to-POJO yang terlihat menarik:
http://www.jsonschema2pojo.org/
sumber