[java] Java 앱에서 Windows 서비스를 만드는 방법

XP와 Vista에서 서비스로 설치 해야하는 Java 응용 프로그램을 방금 상속 받았습니다. Windows를 어떤 형태로든 사용하고 약 8 년이 지났으며 Java 앱과는 별도로 서비스를 만들 필요가 없었습니다 (앱에 대한 항아리와 단일 종속성 항아리가 있습니다-log4j ). 이것을 서비스로 실행하는 데 필요한 마술은 무엇입니까? 소스를 얻었으므로 코드 수정은 바람직하지만 피할 수는 있습니다.



답변

Java Service Wrapper 와 함께 운이 좋았습니다.


답변

Apache Commons 데몬 이 좋은 대안입니다. 그것은했다 Procrun 윈도우 서비스 및 Jsvc 유닉스 데몬. 덜 제한적인 Apache 라이센스를 사용하며 Apache Tomcat은 Windows 및 Linux에서 실행하기 위해 자체 라이센스의 일부로 사용합니다! 작동시키는 것은 약간 까다 롭지 만 실제 예제 가있는 철저한 기사 가 있습니다.

그 외에도 Apache Tomcat 의 bin \ service.bat에서 서비스 설정 방법을 알 수 있습니다. Tomcat에서 Procrun 바이너리 이름을 변경합니다 (prunsrv.exe-> tomcat6.exe, prunmgr.exe-> tomcat6w.exe).

Procrun을 사용하는 데 어려움을 겪고있는 시작 및 중지 메소드는 매개 변수 (String [] argv)를 수락해야합니다. 예를 들어 “start (String [] argv)”및 “stop (String [] argv)”는 작동하지만 “start ()”및 “stop ()”은 오류를 발생시킵니다. 해당 호출을 수정할 수없는 경우 필요에 맞게 해당 호출을 마사지 할 수있는 부트 스트 래퍼 클래스를 만드는 것이 좋습니다.


답변

Apache Commons Daemon 을 사용하면 사용자 정의 실행 파일 이름과 아이콘을 가질 수 있습니다! 당신은 또한 당신의 자신의 이름과 아이콘으로 사용자 정의 Windows 트레이 모니터를 얻을 수 있습니다!

이제 내 이름과 아이콘 (prunsrv.exe)으로 서비스를 실행하고 시스템 트레이 모니터 (prunmgr.exe)에도 고유 한 사용자 지정 이름과 아이콘이 있습니다!

  1. Apache Commons 데몬 바이너리를 다운로드하십시오 (prunsrv.exe 및 prunmgr.exe 필요).
  2. 그들로 이름을 변경 MyServiceName.exe하고 MyServiceNamew.exe각각.
  3. WinRun4J를 다운로드 하고 RCEDIT.exe함께 제공된 프로그램을 사용하여 다음과 같이 사용자 정의 아이콘을 포함하도록 Apache 실행 파일을 수정하십시오.

    > RCEDIT.exe /I MyServiceName.exe customIcon.ico
    > RCEDIT.exe /I MyServiceNamew.exe customTrayIcon.ico
  4. 이제 다음과 같이 Windows 서비스를 설치하십시오 ( 자세한 내용 및 옵션 은 설명서 를 참조하십시오).

    > MyServiceName.exe //IS//MyServiceName \
      --Install="C:\path-to\MyServiceName.exe" \
      --Jvm=auto --Startup=auto --StartMode=jvm \
      --Classpath="C:\path-to\MyJarWithClassWithMainMethod.jar" \
      --StartClass=com.mydomain.MyClassWithMainMethod
  5. 이제 자신의 아이콘과 이름으로 실행되는 Jar의 Windows 서비스가 있습니다! 모니터 파일을 실행할 수도 있으며 시스템 트레이에서 고유 한 아이콘과 이름으로 실행됩니다.


답변

간단한 방법은 NSSM Wrapper Wrapper입니다 ( 내 블로그 항목 참조 ).


답변

또 다른 옵션은 WinRun4J 입니다. 이것은 Windows 서비스 호스트 (32 비트 및 64 비트 버전)로 두 배가되는 구성 가능한 Java 실행기입니다. 오픈 소스이며 사용에 제한이 없습니다.

(전체 공개 : 나는이 프로젝트에서 일합니다).


답변

또 다른 대답은 Yet Another Java Service Wrapper입니다 . 이것은 더 나은 라이센스가 있으므로 Java Service Wrapper의 좋은 대안처럼 보입니다. 또한 JSW에서 YAJSW로 쉽게 이동할 수 있도록 고안되었습니다. 확실히, Windows 서버에 익숙하지 않고 Java 앱을 서비스로 실행하려고 시도하는 것은 매우 사용하기 쉽습니다.

다른 사람들은 내가 찾았지만 다음을 사용하지 않았습니다.

  • Java Service Launcher YAJSW보다 작업하기가 더 복잡해 보이므로 이것을 사용하지 않았습니다. 나는 이것이 포장지라고 생각하지 않습니다.
  • JSmooth Window 서비스 생성은 기본 목표는 아니지만 수행 할 수 있습니다 . 2007 년 이후 활동이 없었기 때문에 이것을 사용하지 않았습니다.

답변

Java Service Wrapper 가 잘 작동 한다고 생각합니다 . 애플리케이션을 통합 하는 세 가지 방법 이 있습니다. 코드 1을 변경하고 싶지 않다면 옵션 1이 가장 효과적이라고 들립니다. 구성 파일은 약간 미쳐 버릴 수 있지만 (옵션 1의 경우) 시작하고 인수를 지정할 프로그램은 도우미 프로그램이며 프로그램을 시작한다는 것을 기억하십시오. 여기에는 예제 구성 파일 이 있습니다.