【问题标题】:Run Java application as a service将 Java 应用程序作为服务运行
【发布时间】:2010-11-27 05:51:49
【问题描述】:

我想将 Java 应用程序作为服务运行。不幸的是,我无法使用 Java Service Wrapper 之类的东西(这似乎是一个很好的工具)。

有没有任何方法可以将可执行的 JAR 作为服务运行,而不依赖于外部应用程序?我目前已安装该服务,但无法启动。这就是我卡住的地方,除了有关 JSW 的信息之外,我在 Google 上找不到任何东西。

【问题讨论】:

标签: java windows windows-services


【解决方案1】:

你可以像这样使用NSSM

nssm install MyService "%JAVA_HOME%\bin\java.exe" -jar "path\to\the\file.jar"

【讨论】:

    【解决方案2】:

    另一个选项,Apache Commons Daemon 的 procrun。

    http://commons.apache.org/daemon/

    【讨论】:

    • 这是唯一支持64位的免费选项。
    【解决方案3】:

    JSmooth 可以做到,并且可以用 ant 编写脚本。

    【讨论】:

    • 似乎服务包装器在 Windows 7 下开始中断:(
    【解决方案4】:

    我找到的最简单的方法是RunAsService

    一位同事推荐了一个名为SC的工具,但我没有尝试。

    【讨论】:

      【解决方案5】:

      还有一个选项winrun4j。许可证是 eclipse 的 CPL。

      【讨论】:

      • 是的,但与其他服务包装器一样,需要您实现公共接口才能将您的应用程序集成到服务处理程序中。
      【解决方案6】:

      有一个 Java Service Wrapper 的 LGPL 克隆:http://yajsw.sourceforge.net

      顺便说一句,IANAL,但我怀疑 JSW 人正在传播 FUD,他们的软件可用于在 GPL 许可下为商业应用程序提供服务,就像人们可以压缩商业应用程序以重新分发一样。不过,我可能完全错了:)

      【讨论】:

      • 根据 wrapper.tanukisoftware.com/doc/english/licenseCommunity.html 上的措辞,很明显社区版不能与非开源程序一起使用,因为它在GPL。
      • GPL 并不排除非开源程序与 GPL 程序一起使用(例如,在 Linux 操作系统上运行商业应用程序非常好)。它仅阻止通过链接 GPL 代码并在非 GPL 许可下发布它来创建衍生作品。在这种情况下,我不清楚是否正在创作衍生作品。
      • 嗯,你可能是对的。他们不是在 GPL 下分发他们的东西,而是根据一些奇怪的许可证,要求分发的产品软件必须在 GPL 下分发,无论它是衍生产品。我想知道这是否合法......但我想最好假设它是合法的。
      【解决方案7】:

      应作为 Windows 服务运行的程序必须提供 Windows 服务管理器用来与该服务通信的某些功能。

      只要没有 JVM 直接实现此功能(我知道没有),您将需要某种包装器。

      我已经成功地将srvany 用于基于 java 的 windows 服务(基本上它允许将任何程序作为 windows 服务运行,并且可以与 java 一起正常工作)

      【讨论】:

      • 这是回答问题的唯一答案;所有其他人都提到了 OP 希望避免的另一个外部工具。谢谢!
      【解决方案8】:

      我还没有尝试过(还),但Launch4j 看起来可以满足您的需求。

      【讨论】:

      • 不注册为服务,但它是打包不作为服务运行的用户程序的不错选择。
      猜你喜欢
      • 1970-01-01
      • 2012-06-27
      • 2014-06-21
      • 1970-01-01
      • 2019-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多