Saya baru saja mewarisi aplikasi java yang perlu diinstal sebagai layanan di XP dan vista. Sudah sekitar 8 tahun sejak saya menggunakan windows dalam bentuk apa pun dan saya tidak pernah harus membuat layanan, apalagi dari sesuatu seperti aplikasi java (saya punya botol untuk aplikasi dan satu botol ketergantungan) - log4j ). Apa keajaiban yang diperlukan untuk menjalankan ini sebagai layanan? Saya punya sumbernya, jadi modifikasi kode, meskipun sebaiknya dihindari, dimungkinkan.
java
windows-services
ideasculptor
sumber
sumber
Jawaban:
Saya beruntung dengan Java Service Wrapper
sumber
Apache Commons Daemon adalah alternatif yang baik. Ini memiliki Procrun untuk layanan windows, dan Jsvc untuk unix daemon. Ia menggunakan lisensi Apache yang tidak terlalu ketat, dan Apache Tomcat menggunakannya sebagai bagian dari dirinya untuk dijalankan di Windows dan Linux! Untuk membuatnya bekerja agak sulit, tetapi ada artikel lengkap dengan contoh kerja.
Selain itu, Anda dapat melihat bin \ service.bat di Apache Tomcat untuk mendapatkan ide cara mengatur layanan. Di Tomcat mereka mengganti nama binari Procrun (prunsrv.exe -> tomcat6.exe, prunmgr.exe -> tomcat6w.exe).
Sesuatu yang saya perjuangkan menggunakan Procrun, metode start dan stop Anda harus menerima parameter (String [] argv). Misalnya "start (String [] argv)" dan "stop (String [] argv)" akan berfungsi, tetapi "start ()" dan "stop ()" akan menyebabkan kesalahan. Jika Anda tidak dapat mengubah panggilan-panggilan itu, pertimbangkan untuk membuat kelas bootstrapper yang dapat memijat panggilan-panggilan itu sesuai dengan kebutuhan Anda.
sumber
--JvmOptions=-Dopt=a#-Dopt2=b
. Saya menjalankan perintah dari naskah semut dan berjuang selama berhari-hari karenanya. Semoga ini bisa membantu.Dengan Apache Commons Daemon Anda sekarang dapat memiliki nama dan ikon yang dapat dieksekusi kustom! Anda juga bisa mendapatkan monitor baki Windows khusus dengan nama dan ikon Anda sendiri!
Saya sekarang memiliki layanan saya berjalan dengan nama dan ikon saya sendiri (prunsrv.exe), dan monitor system tray (prunmgr.exe) juga memiliki nama dan ikon kustom saya sendiri!
MyServiceName.exe
danMyServiceNamew.exe
masing - masing.Unduh WinRun4J dan gunakan
RCEDIT.exe
program yang menyertainya untuk memodifikasi executable Apache untuk menyematkan ikon kustom Anda sendiri seperti ini:Sekarang instal layanan Windows Anda seperti ini (lihat dokumentasi untuk detail dan opsi lebih lanjut):
Sekarang Anda memiliki layanan Windows dari Jar Anda yang akan dijalankan dengan ikon dan nama Anda sendiri! Anda juga dapat meluncurkan file monitor dan itu akan berjalan di baki sistem dengan ikon dan nama Anda sendiri.
sumber
Cara sederhana adalah Pembungkus NSSM ( lihat entri blog saya ).
sumber
Satu opsi lagi adalah WinRun4J . Ini adalah peluncur java yang dapat dikonfigurasi yang berfungsi sebagai host layanan windows (versi 32 dan 64 bit). Ini adalah open source dan tidak ada batasan dalam penggunaannya.
(pengungkapan penuh: Saya mengerjakan proyek ini).
sumber
Namun jawaban lain adalah Yet Another Service Wrapper , ini sepertinya alternatif yang baik untuk Java Service Wrapper karena memiliki lisensi yang lebih baik. Ini juga dimaksudkan agar mudah berpindah dari JSW ke YAJSW. Bagi saya, merek baru di windows server dan mencoba menjalankan aplikasi Java sebagai layanan, itu sangat mudah digunakan.
Beberapa yang lain saya temukan, tetapi tidak menggunakan:
sumber
Saya pikir Java Service Wrapper berfungsi dengan baik. Perhatikan bahwa ada tiga cara untuk mengintegrasikan aplikasi Anda. Kedengarannya seperti opsi 1 akan bekerja paling baik untuk Anda mengingat Anda tidak ingin mengubah kode. File konfigurasi bisa menjadi sedikit gila, tetapi ingatlah bahwa (untuk opsi 1) program yang Anda mulai dan yang akan Anda tentukan argumennya, adalah program pembantu mereka, yang kemudian akan memulai program Anda. Mereka memiliki contoh file konfigurasi untuk ini.
sumber
Jika Anda menggunakan Gradle Build Tool, Anda dapat mencoba plugin windows-service-plugin saya , yang memfasilitasi penggunaan Apache Commons Daemon Procrun .
Untuk membuat aplikasi layanan java windows dengan plugin Anda harus melalui beberapa langkah sederhana.
Buat kelas layanan utama dengan metode yang sesuai.
Sertakan plugin ke dalam
build.gradle
file Anda .Cuplikan skrip yang sama untuk mekanisme plugin baru, yang menginkubasi, yang diperkenalkan di Gradle 2.1:
Konfigurasikan plugin.
Jalankan tugas grader createWindowsService untuk membuat distribusi layanan windows.
Itu semua yang perlu Anda lakukan untuk membuat layanan windows sederhana. Plugin akan secara otomatis mengunduh binari Apache Commons Daemon Procrun, mengekstrak binari ini ke direktori distribusi layanan dan membuat file batch untuk instalasi / penghapusan instalasi layanan.
Dalam
${project.buildDir}/windows-service
direktori Anda akan menemukan executable layanan, skrip batch untuk instalasi / penghapusan layanan dan semua pustaka runtime. Untuk menginstal menjalankan layanan<project-name>-install.bat
dan jika Anda ingin menghapus instalasi menjalankan layanan<project-name>-uninstall.bat
. Untuk memulai dan menghentikan layanan gunakan<project-name>w.exe
executable.Perhatikan bahwa metode layanan penanganan mulai harus membuat dan memulai utas terpisah untuk melakukan pemrosesan, dan kemudian kembali. Metode utama dipanggil dari utas berbeda ketika Anda memulai dan menghentikan layanan.
Untuk informasi lebih lanjut, silakan baca tentang plugin dan Apache Commons Daemon Procrun.
sumber
JavaService adalah LGPL. Sangat mudah dan stabil. Sangat dianjurkan.
sumber
Dengan Java 8 kita dapat menangani skenario ini tanpa alat eksternal. javapackageralat datang dengan java 8 menyediakan opsi untuk membuat bundel aplikasi mandiri:
-jenis asli Menghasilkan bundel aplikasi mandiri (jika mungkin). Gunakan opsi -B untuk memberikan argumen kepada bundler yang digunakan. Jika jenisnya ditentukan, maka hanya satu bundel dari jenis ini yang dibuat. Jika tidak ada tipe yang ditentukan, semua digunakan.
Nilai-nilai berikut ini valid untuk tipe:
Dalam hal windows merujuk dokumen berikut kita dapat membuat msi atau exe sesuai kebutuhan.
sumber
Perbandingan yang cukup baik dari berbagai solusi tersedia di: http://yajsw.sourceforge.net/#mozTocId284533
Secara pribadi suka launch4j
sumber
itu sederhana karena Anda harus memasukkan jalan pintas
Windows 7
C:\users\All Users\Start Menu\Programs\Startup
(Admin) atauUser home directory(%userProfile%)
Windows 10: Di Jalankan
shell:startup
di properti itu -> jalan pintas -> target ->
java.exe -jar D:\..\runJar.jar
CATATAN: Ini hanya akan berjalan setelah Anda masuk
Dengan Admin Right
sc create serviceName binpath= "java.exe -jar D:\..\runJar.jar"
Akan membuat layanan windowsjika Anda mendapatkan batas waktu penggunaan
cmd /c D:\JAVA7~1\jdk1.7.0_51\bin\java.exe -jar d:\jenkins\jenkins.war
tetapi bahkan dengan ini Anda akan mendapatkan batas waktu tetapi di latar belakang java.exe akan dimulai. Manajer tugas check-inCATATAN: Ini akan berjalan pada windows logon start-up (sebelum masuk, Berdasarkan layanan '
Startup Type
')Penjelasan terperinci tentang membuat layanan windows
sumber
Gunakan " winsw " yang ditulis untuk Glassfish v3 tetapi bekerja dengan baik dengan program Java pada umumnya.
Membutuhkan .NET runtime diinstal.
sumber
Saya telah menggunakan JavaService sebelumnya dengan kesuksesan yang baik. Itu belum diperbarui dalam beberapa tahun, tetapi cukup solid kembali ketika saya menggunakannya.
sumber
Saya tidak suka lisensi untuk Java Service Wrapper. Saya menggunakan ActiveState Perl untuk menulis layanan yang berfungsi.
Saya berpikir untuk menulis layanan dalam C #, tetapi kendala waktu saya terlalu ketat.
sumber
Saya selalu menggunakan sc.exe (lihat http://support.microsoft.com/kb/251192 ). Itu harus diinstal pada XP dari SP1, dan jika itu tidak sesuai keinginan Anda dari Vista, Anda dapat mengunduh memuatnya dengan kit sumber daya Vista.
Saya belum melakukan sesuatu yang terlalu rumit dengan Java, tetapi menggunakan argumen baris perintah yang sepenuhnya memenuhi syarat (x: \ java.exe ....) atau membuat skrip dengan Ant untuk menyertakan depencies dan mengatur parameter berfungsi dengan baik untuk saya.
sumber
Opsi bagus lainnya adalah FireDaemon . Ini digunakan oleh beberapa toko besar seperti NASA, IBM, dll; lihat situs web mereka untuk daftar lengkap.
sumber
Saat ini saya memerlukan ini untuk menjalankan aplikasi berbasis Eclipse tetapi saya perlu mengatur beberapa variabel terlebih dahulu yang bersifat lokal untuk aplikasi itu. sc.exe hanya akan memungkinkan executable tetapi bukan skrip jadi saya beralih ke autoexnt.exe yang merupakan bagian dari kit sumber daya Windows 2003 . Ini membatasi layanan ke file batch tunggal tetapi saya hanya perlu satu skrip batch untuk dikonversi menjadi layanan.
ciao!
sumber
Exe4j adalah pilihan yang sangat bagus meskipun tidak gratis. Lihat di Exe4j Pada panduan untuk membuat file .exe, Anda diberikan opsi untuk membuat layanan.
sumber