Pertama, Anda membutuhkan antarmuka yang harus diimplementasikan oleh semua plugin, misalnya
public interface Plugin {
public void load(PluginConfiguration pluginConfiguration);
public void run();
public void unload();
public JComponent getConfigurationPage();
}
Pembuat plugin kemudian harus membundel plugin mereka ke dalam file JAR. Aplikasi Anda membuka file JAR dan kemudian dapat menggunakan atribut dari manifes JAR atau daftar semua file dalam file JAR untuk menemukan kelas yang mengimplementasikan antarmuka Plugin Anda. Instantiate kelas itu, plugin siap untuk digunakan.
Tentu saja Anda mungkin juga ingin menerapkan semacam sandboxing sehingga plugin dibatasi apa yang bisa dan tidak bisa dilakukan. Saya telah membuat aplikasi pengujian kecil (dan membuat blog tentang itu ) yang terdiri dari dua plugin, salah satunya ditolak akses ke sumber daya lokal.
Gunakan OSGi .
Ini adalah dasar dari sistem plug-in Eclipse. Equinox adalah implementasi Eclipse (berlisensi EPL) dan Felix adalah implementasi Proyek Apache (Lisensi Publik Apache berlisensi).
Eclipse memberikan contoh nyata bahwa OSGi dapat mencakup poin yang Anda sebutkan (atau Anda bisa membangun aplikasi Anda di atas Eclipse RCP jika Anda menginginkan tumpukan Eclipse / SWT / JFace penuh).
sumber
Sejak 1.6, sudah ada java.util.ServiceLoader yang dapat digunakan jika Anda ingin kode sistem sederhana Anda sendiri.
Tetapi jika Anda menginginkan lebih dari fitur dasar, gunakan salah satu kerangka kerja yang ada.
sumber
Ada juga JPF (Java Plugin Framework) .
sumber
Gunakan PF4J . Ini memiliki dukungan untuk Web, Spring dan Wicket. Mudah digunakan dan membangun aplikasi
sumber
Saya bekerja di OSGi selama seminggu - minggu yang intens dan tidak ada apa-apa selain OSGi. Pada akhirnya itu seperti mimpi buruk tetapi saya belajar banyak.
Saya dapat membuat OSGi berfungsi (tidak mudah, semua contoh sudah ketinggalan zaman, semua yang ada di internet setidaknya berusia tiga tahun jika tidak lima tahun), tetapi saya mengalami masalah serius untuk mengintegrasikannya ke dalam proyek yang ada karena masalah dengan manifes jar.
Singkatnya, hanya ada beberapa alat yang tidak jelas yang digunakan untuk membangun manifes dan mereka tidak didokumentasikan dengan baik (Alat BND hampir tidak jelas, tetapi dirancang untuk proses tertentu dalam Eclipse). Juga, sebagian besar informasi OSGi yang tersedia tidak ditargetkan untuk pengembang aplikasi yang memiliki aplikasi desktop yang ada.
Ini membuat banyak konteks untuk informasi berkabut atau tidak pantas. Posting blog Neil Bartlett adalah bantuan terbesar, tetapi bahkan yang gagal untuk mendapatkan sistem kerja (saya mengambil beberapa kode dari tutorial Felix dan menyatukannya untuk membuat kerangka kerja tertanam bergulir). Saya menemukan draf bukunya yang ia posting gratis bertahun-tahun yang lalu, yang sangat bagus, tetapi contoh-contoh di Eclipse tidak berfungsi karena perubahan dalam dukungan Eclipse OSGi.
Setiap langkah adalah rintangan utama. Saya akan mencoba memposting beberapa rincian lebih lanjut di sini nanti.
sumber
Saya pikir merekomendasikan OSGi untuk memecahkan masalah yang disebutkan di atas adalah saran yang sangat buruk. OSGi adalah "pilihan yang tepat" tetapi untuk skenario seperti yang di atas, saya pikir baik JPF atau kerangka kerja minimalis homegrown cukup.
sumber
Bertahun-tahun yang lalu saya memulai proyek seperti itu dan saya berharap segera akan siap. Saya mendapat inspirasi dari proyek-proyek seperti NetBeans dan Eclipse tetapi sementara itu berubah menjadi sesuatu yang sedikit berbeda. OSGi terlihat seperti pilihan yang baik sekarang, tetapi saya tidak memiliki kesempatan untuk membandingkannya dengan proyek saya. Ini mirip dengan JPF yang disebutkan di atas, tetapi pada saat yang sama berbeda dalam banyak hal.
Ide dasar yang memotivasi saya adalah semudah mungkin untuk membangun aplikasi Java, tanpa pemisahan antara aplikasi web, aplikasi desktop atau aplikasi applet / JWS (tentu saja ini tidak mencakup UI - belum) sebagai fungsi inti.
Saya membangun proyek dengan beberapa tujuan di benak saya:
sumber