【问题标题】:Converting a war file into an executable file将war文件转换为可执行文件
【发布时间】:2011-09-04 08:23:19
【问题描述】:
我的公司开发了一个 Web 应用程序(J2EE 环境/Tomcat 服务器)并希望将其作为产品出售。客户可以将此产品作为基本版或高级版使用。在高级版中,客户有一些额外的功能(可能是一些额外的链接)。这种区分是根据序列号进行的。
在讨论上述事情时,我只是一个听众。
是否可以解决上述问题?我们如何将war文件转换为exe文件并嵌入逻辑来区分高级版或基本版。
【问题讨论】:
标签:
java
jakarta-ee
packaging
【解决方案1】:
我们如何将war文件转换为exe文件并嵌入逻辑来区分高级版或基本版。
这是两个不同的要求,彼此无关。
如果您有一个 Web 应用程序,您可以使用网页输入串行密钥(例如 Jira 所做的),或者您可以将密钥(或密钥文件的文件名)写入 Context.xml,并让 servlet 读取该上下文参数。然后应用程序可以根据密钥允许或不允许某些功能。
对于转换为可执行文件,可执行文件一词有多种解释。我认为“战争”文件足够可执行 - 将其转储到 tomcat 中并运行。
如果您希望它独立,您可以提供一个预部署应用程序的 tomcat 发行版(再次,就像 Jira 所做的那样),或使用 Jetty 嵌入式容器。虽然这可能不适合繁重的工作量。
您甚至可以尝试使用 gjc(Gnu Java 编译器)将 jetty + 您的网络应用程序转换为本机 exe,尽管我怀疑它是否能像正常部署的版本一样工作。
我建议您通过上下文参数注入密钥,或者创建一个您可以输入密钥的管理页面。
【解决方案2】:
WAR 是一个 web 应用程序存档。它应该在带有 servlet 容器的网络服务器上执行。一个可执行的 JAR 需要一个带有 main() 方法的类,但 Web 应用程序通常没有任何方法,因为这是 servlet 容器的职责,而不是 Web 应用程序。通常,WAR 将按原样分发,服务器管理员负责将其部署到 servlet 容器。如有必要,您可以包含一些描述如何为各种容器执行此操作的文档。
如果您真的打算出于某些不明显的原因将 Web 应用程序作为桌面应用程序出售,那么您最好的选择是包含一个像 Jetty 这样的可嵌入 servlet 容器,并附带一个带有 main() 方法的类,该方法创建一个嵌入 servlet 容器的实例,将 WAR 文件部署到它并运行 servlet 容器。这可以反过来包装在一个可执行的 JAR 中。
或者,您也可以将其托管在 Internet 上的某个位置并提供特定的登录名。