У меня есть исполняемый JAR файл. Возможно ли создать службу Windows этого JAR? На самом деле, я просто хочу запустить это при запуске, но я не хочу размещать этот JAR файл в своей загрузочной папке, ни в реестре.
Как создать службу windows из java jar?
Ответ 1
Эта статья должна рассказать вам все, что вам нужно знать: "Запуск приложений Java в качестве службы Windows" ; в нем упоминается использование Java Service Wrapper "(есть сообщество, называемое YAJSW)
Ответ 2
Самое простое решение, которое я нашел для этого до сих пор, это Non-Sucking Service Manager
Использование будет
nssm install <servicename> "C:\Program Files\Java\jre7\java.exe" "-jar <path-to-jar-file>"
Ответ 3
Я экспериментировал с Apache Commons Daemon. Он поддерживает окна (Procrun) и unix (Jsvc). У Advanced Installer есть учебное пособие по Java с примером для загрузки проекта. Если вы используете javaservice.jar, работающий как служба Windows, вы можете проверить его, используя "telnet 4444". Я использовал их пример, потому что основное внимание было уделено запуску службы java windows, а не написанию java.
Ответ 4
Использовать nssm.exe, но не забудьте установить AppDirectory, или любые необходимые библиотеки или ресурсы не будут доступны. По умолчанию nssm устанавливает текущую рабочую директорию в каталог приложения java.exe, а не банку. Для этого создайте пакет script:
pushd <path-to-jar>
nssm.exe install "<service-name>" "<path-to-java.exe>" "-jar <name-of-jar>"
nssm.exe set "<service-name>" AppDirectory "<path-to-jar>"
Это должно устранить проблему с приостановкой службы.
Ответ 5
Tanuki изменила лицензию jsw некоторое время назад, если бы я должен был начать проект, я бы использовал еще один Java Wrapper, http://yajsw.sourceforge.net/ это более или менее реализация с открытым исходным кодом, которая имитирует JWS, а затем строит ее и улучшает ее еще больше.
EDIT: Я несколько лет использую YAJSW на нескольких платормах (Windows, несколько linuxes...), и это здорово, разработка продолжается.
Ответ 6
С прокруткой вам нужно скопировать prunsrv в каталог приложения (скачать) и создать файл install.bat следующим образом:
set PR_PATH=%CD%
SET PR_SERVICE_NAME=MyService
SET PR_JAR=MyService.jar
SET START_CLASS=org.my.Main
SET START_METHOD=main
SET STOP_CLASS=java.lang.System
SET STOP_METHOD=exit
rem ; separated values
SET STOP_PARAMS=0
rem ; separated values
SET JVM_OPTIONS=-Dapp.home=%PR_PATH%
prunsrv.exe //IS//%PR_SERVICE_NAME% --Install="%PR_PATH%\prunsrv.exe" --Jvm=auto --Startup=auto --StartMode=jvm --StartClass=%START_CLASS% --StartMethod=%START_METHOD% --StopMode=jvm --StopClass=%STOP_CLASS% --StopMethod=%STOP_METHOD% ++StopParams=%STOP_PARAMS% --Classpath="%PR_PATH%\%PR_JAR%" --DisplayName="%PR_SERVICE_NAME%" ++JvmOptions=%JVM_OPTIONS%
Я предполагаю, что
- запустите это из той же директории, где jar и prunsrv.exe
- у jar есть работа MANIFEST.MF
- и у вас есть завершающие крючки, зарегистрированные в JVM (например, с context.registerShutdownHook() в Spring)...
- не использовать относительные пути для файлов за пределами jar (например, log4j следует использовать с log4j.appender.X.File = ${app.home}/logs/my.log или что-то подобное)
Проверьте прокрутку руководство и этот учебник для более информация.
Ответ 7
Для этого мы используем Tanuki Service Wrapper. Он очень настраиваемый.