为基于Maven的动态项目构建可执行的war/jar,该项目具有restful Services和Swing特性



我需要制作一个基于动态web的应用程序的可执行War/Jar。我们的目标是:

  • 新手用户可以一键快速部署,无需在部署环境中安装任何先决条件,即他/她不得设置类路径变量、java_home、独立Tomcat安装等,每次WEB APP文件夹删除并在Tomcat中部署new.war等。

  • 最小化的部署时间

  • 在应用程序版本更新的情况下(显然是功能上的重大更新),我们将交付整个软件包,这将只是一个完整的可执行程序以供部署。我找到了几个链接,我可以制作一个stanalone罐子,但这并不能按照正常的应用程序部署工作。-http://tomcat.apache.org/maven-plugin-2.0/executable-war-jar.html-http://java-creed-examples.googlecode.com/svn/maven/How%20To%20Run%20Embedded%20Tomcat%20with%20Maven/

请有人帮我创建一个符合上述要求的Hello工作项目示例。

我将非常感谢您的迅速支持。

"可执行战争",尽管听起来对你很有吸引力,但却是一个可怕的想法:

  • 我认为,当你说"web应用程序"时,你指的是基于servlet/jax-rs的东西
  • 这意味着,为了成为一个独立的"可执行文件",您必须打包各种servlet/jax-rs/someSpec库/实现(可能是嵌入式jetty)
  • 当您在tomcat上部署完全相同的war时,这些依赖类将保留并"干扰"容器提供的类(路径上有两个不同的类Servlet实现)
  • 这种类别名问题相对来说很难发现和识别,如果你特别不走运,简单的helloworld示例会起作用,而更复杂的示例会以奇怪的方式失败

我给你的建议是把你的代码分成3个(maven?)模块(我假设是jax-rs应用程序):

  1. api impl,只包含@Resource类,它对所有规范都有"提供的"依赖关系
  2. 一个war模块,它将上面的#1封装在一个适合部署在容器上的war文件中(比如tomcat)
  3. 一个可执行的fat-jar模块,它封装了#1和实际实现(比如jetty和jersey),并有一个main()方法来引导一个嵌入式jetty,还有一个.bat/.sh脚本和类似java -jar fat.jar的东西来运行它。查看maven shade插件

您的用户可以在胖罐子(对于初学者)和战争(对于高级用户)

之间进行选择

最新更新