IT이야기

Java jar에서 Windows 서비스를 만드는 방법

cyworld 2021. 3. 31. 21:19
반응형

Java jar에서 Windows 서비스를 만드는 방법은 무엇입니까?


실행 가능한 JAR 파일이 있습니다. 해당 JAR의 Windows 서비스를 생성 할 수 있습니까? 실제로 시작시 실행하고 싶지만 해당 JAR 파일을 레지스트리 나 시작 폴더에 저장하고 싶지 않습니다.


이 기사는 여러분이 알아야 할 모든 것을 알려줄 것입니다. "Windows 서비스로 Java 응용 프로그램 실행" ; " Java Service Wrapper " 사용에 대해 언급합니다 ( YAJSW 라는 커뮤니티 에디션이 있습니다 )


지금까지 찾은 가장 쉬운 솔루션은 Non-Sucking Service Manager입니다.

사용법은

nssm install <servicename> "C:\Program Files\Java\jre7\java.exe" "-jar <path-to-jar-file>"

nssm.exe를 사용하지만 AppDirectory를 설정해야합니다. 그렇지 않으면 필요한 라이브러리 나 리소스에 액세스 할 수 없습니다. 기본적으로 nssm은 현재 작업 디렉토리를 jar가 아닌 응용 프로그램 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>"

이렇게하면 서비스 일시 중지 문제가 해결됩니다.


나는 Apache Commons Daemon을 실험하고 있습니다. Windows ( Procrun ) 및 unix ( Jsvc )를 지원합니다. 고급 설치 프로그램에는 다운로드 할 예제 프로젝트 가 포함 된 Java 서비스 자습서 가 있습니다. javaservice.jar을 Windows 서비스로 실행하는 경우 "telnet 4444"를 사용하여 테스트 할 수 있습니다. 내 초점은 Java를 작성하는 것이 아니라 Java Windows 서비스를 실행하는 데 집중했기 때문에 예제를 사용했습니다.


Tanuki는 얼마 전에 jsw의 라이센스를 변경했습니다. 프로젝트를 시작하려면 JWS를 모방 한 오픈 소스 구현 인 Yet Another Java Service Wrapper, http://yajsw.sourceforge.net/을 사용 합니다. 그런 다음이를 기반으로 더욱 개선합니다.

편집 : 나는 몇 년 동안 여러 플랫폼 (Windows, 여러 리눅스 ...)에서 YAJSW를 사용해 왔으며 훌륭하고 개발이 진행 중입니다.


procrun을 사용하면 prunsrv를 응용 프로그램 디렉터리 ( download ) 에 복사 하고 다음과 같이 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가있는 동일한 디렉토리에서 실행하십시오.
  • 항아리에는 작동하는 MANIFEST.MF가 있습니다.
  • JVM에 등록 된 종료 후크가 있습니다 (예 : Spring의 context.registerShutdownHook () 사용) ...
  • jar 외부의 파일에 대해 상대 경로를 사용하지 않음 (예 : log4j는 log4j.appender.X.File = $ {app.home} /logs/my.log 또는 이와 유사한 것과 함께 사용해야 함)

procrun의 점검 매뉴얼튜토리얼 자세한 내용입니다.


이를 위해 Tanuki Service Wrapper 를 사용합니다. 매우 구성 가능합니다.


또 다른 옵션은 winsw입니다 : https://github.com/kohsuke/winsw/

서비스 이름, 실행할 항목, 인수 등을 지정하도록 xml 파일을 구성하고 exe를 사용하여 설치합니다. XML 예제 : https://github.com/kohsuke/winsw/tree/master/examples

이것은 하나의 경량 exe이기 때문에 nssm보다 선호합니다. config xml은 소스 코드에 공유 / 커밋하기 쉽습니다.

PS 서비스는 다음을 실행하여 설치됩니다. your-service.exe install

참조 URL : https://stackoverflow.com/questions/1617458/how-to-create-windows-service-from-java-jar

반응형