【问题标题】:File stucture of Java/Spring web applicationJava/Spring Web 应用程序的文件结构
【发布时间】:2012-04-02 16:36:54
【问题描述】:

我刚刚开始学习 Spring(和 Java),我正在编写一个包含多个部分的应用程序。我想要的是关于如何在 IDE 中以及在部署时构建应用程序的一些意见。我使用 intellij 11 和 Tomcat 7 作为参考。

我的应用程序由以下部分组成:

  • 主要公共网站 (www.myapp.com)
  • REST 服务 (www.myapp.com/rest)
  • 管理网站 (admin.myapp.com)
  • UI 资源 (cdn.myapp.com)

我需要在所有这些应用程序(我的服务层)之间共享 Java 类,并且还存在在主网站和管理站点之间共享 UI 资源(css、js、图像)的问题。

我应该如何最好地在我的 IDE 和 Tomcat 上组织这些?

到目前为止,我的想法是,提到的每个应用程序都是单独的 WAR 文件(它们不需要共享会话)。我会将我的服务层创建为可供任何应用程序使用的 JAR。您将如何在 intellij 或 Eclipse 中表示这一点?

我想我在 cdn.myapp.com 上的 UI 资源可以像往常一样被包含在内,并且这些 UI 资源将再次打包为另一个 WAR。这听起来好吗?

您如何使用这样的多个子应用来组织您的项目?

如您所见,我不一定遵循严格的规则,只是真正的意见(尽管如果有人有明确明确的答案,那就太好了)。

谢谢,

詹姆斯。

【问题讨论】:

    标签: java eclipse spring tomcat intellij-idea


    【解决方案1】:

    我会考虑使用像 maven、Gradle 或 Buildr 这样的构建工具。他们都使用standard directory structure并支持sub-modules。

    使用子模块,您可以例如创建两个“战争模块”,并将共享资源放在共享 jar 中。

    /root <- Root project, contains configuration that is shared accross all sub-modules
    /root/sharedResources (jar) <- Contains the things you need to share between applications
    /root/admin (war) <- admin site, has a dependency on sharedResources.jar
    /root/mainSite (war) <- main site, has a dependecy on sharedResources.jar
    

    对于 tomcat,您可以在不同的上下文中部署不同的 war 文件,或者使用反向代理来创建选择的 url 方案。

    IntelliJ 对 maven 有一流的支持(不确定 buildr 和 gradle),因此您只需将 IDE 指向 root-pom.xml,它就会自动为您创建正确的配置。

    查看 github,例如 cucumber-jvm,了解如何在给定构建工具中配置父/子模块的示例。

    【讨论】:

    • 在 Tomcat 上运行应用程序时,通常如何包含 Spring 依赖项?您是否倾向于将它们包含在 WEB-INF/lib 中用于 WAR 文件和其他地方用于 JAR 模块?或者您是否将它们全部放在类路径上的文件夹中?您的方法会在开发环境和生产环境之间有所不同吗? .....也许这本身就是一个问题:)
    【解决方案2】:

    基本上有两种方法可以组织您的项目。无论使用哪种解决方案,我都同意您将组件分成 4 个不同的 WAR 文件的方法,并且 ebaxt 建议您在 IDE 之外使用诸如 ant 或 gradle 之类的构建工具。 Apache 或 nginx 等代理也将帮助您处理子域名。

    您提出的解决方案将是我的首选方法:一组项目维护共享资源,例如图像,还负责构建服务层。然后可以将这些项目创建的 jar 文件包含在您的其他项目中。每个应用程序组件(公共站点、REST 服务、管理员、资源)都有自己的项目,该项目将构建一个用于部署到 tomcat 的 war 文件。在此解决方案中,您可以设置 IDE,以便最后 4 个项目包含/依赖于公共项目。在 Eclipse 中,这是通过配置构建路径来完成的。

    另一种选择是只构建一个构建四个战争文件的单体项目。如果您的产品不是太大,这通常会更有效,但随着代码库的增长,它会导致问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 2011-01-23
      • 2011-04-20
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      相关资源
      最近更新 更多