Java Jar에서 Windows 서비스를 만드는 방법은 무엇입니까?
-
06-07-2019 - |
문제
실행 가능한 JAR 파일이 있습니다. 그 병의 Windows 서비스를 만들 수 있습니까? 실제로, 나는 시작시 그것을 실행하고 싶지만 레지스트리의 JAR 파일을 시작 폴더에 배치하고 싶지 않습니다.
해결책
이 기사는 다음과 같이 알아야 할 모든 것을 알려야합니다."Windows 서비스로 Java 응용 프로그램 실행"; "사용을 언급합니다.자바 서비스 래퍼"(커뮤니티 에디션이 있습니다 Yajsw)
다른 팁
지금까지 내가 찾은 가장 쉬운 솔루션은 징수하지 않는 서비스 관리자
사용법이 될 것입니다
nssm install <servicename> "C:\Program Files\Java\jre7\java.exe" "-jar <path-to-jar-file>"
nssm.exe를 사용하지만 AppDirectory를 설정하거나 필요한 라이브러리 또는 리소스에 액세스 할 수 없습니다. 기본적으로 NSSM은 현재 작업 디렉토리를 항아리가 아닌 응용 프로그램 인 Java.exe로 설정했습니다. 배치 스크립트를 만들려면 이렇게하십시오.
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>"
서비스 일시 정지 문제를 해결해야합니다.
나는 실험을 해왔다 아파치 커먼즈 데몬. Windows를 지원합니다.Procrun) 및 유닉스 (JSVC). Advanced Installer는 다음과 같습니다 Java 서비스 튜토리얼 다운로드 할 예제 프로젝트가 포함되어 있습니다. javaservice.jar를 Windows 서비스로 실행하면 "Telnet 4444"를 사용하여 테스트 할 수 있습니다. 나는 Java를 쓰지 않고 Java Windows 서비스를 실행하는 데 중점을 두었 기 때문에 그들의 예를 사용했습니다.
Tanuki는 얼마 전에 JSW의 라이센스를 변경했습니다. 프로젝트를 시작하려면 또 다른 Java 서비스 래퍼를 사용할 것입니다. http://yajsw.sourceforge.net/ 이는 JW를 모방 한 다음이를 구축하고 더욱 향상시키는 오픈 소스 구현입니다.
편집 : 나는 몇 년 동안 몇 년 동안 여러 플라톤 (Windows, 몇몇 리눅스 ...)에서 YAJSW를 사용해 왔으며 훌륭합니다. 개발이 진행 중입니다.
Procrun을 사용하면 prunsrv를 응용 프로그램 디렉토리에 복사해야합니다 (다운로드), install을 만듭니다.
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가있는 동일한 디렉토리에서 이것을 실행하십시오.
- 항아리는 작동하는 것으로 나타납니다 .mf
- 그리고 당신은 JVM에 셧다운 후크가 등록되어 있습니다 (예 : 컨텍스트 .registershutdownhook ()와 같은 봄) ...
- JAR 외부의 파일에 상대 경로를 사용하지 않음 (예 : log4J를 사용해야합니다. log4j.appender.x.file = $ {app.home} /logs/my.log 또는 똑같은 것)
우리는 사용합니다 타누키 서비스 포장지 그에 대한. 매우 구성 가능합니다.
또 다른 옵션은 Winsw입니다. https://github.com/kohsuke/winsw/
XML 파일을 구성하여 서비스 이름, 실행 대상, 인수 등을 지정하고 EXE를 사용하여 설치하십시오. 예제 XML : https://github.com/kohsuke/winsw/tree/master/examples
나는 이것을 NSSM보다 선호합니다. 왜냐하면 그것은 하나의 경량 exe이기 때문입니다. 구성 XML은 소스 코드를 쉽게 공유/커밋 할 수 있습니다.
추신 : 서비스는 실행하여 설치됩니다 your-service.exe install