代码之家  ›  专栏  ›  技术社区  ›  Koraktor

如何包含父Spring项目(使用git子模块)?

  •  2
  • Koraktor  · 技术社区  · 15 年前

    我目前正在使用Spring开发多个Web应用程序。我使用maven进行构建,使用git进行版本控制。目前,我正试图找到一种方法来分割所有webapps使用的某些东西的开发,例如,我有一些对所有项目都相同的助手类。问题是,我不想只使用类,还想使用资源文件和某种父POM,同时仍然独立于存储库,能够从Git中受益。

    虽然我不热衷于改变构建系统,但我不是Maven的真正粉丝。尤其是继承和聚合的概念现在限制了我。也许常春藤是一种选择?

    有一些父项目,包括一些类、Spring配置文件和其他资源,如模板、图像和样式表。让我们称之为 base . 这一个不是完整的Spring webapp,不会被部署。还有其他几个项目 继承 基础 应该被打包成一场战争。我们打电话给他们 webapp1 webapp2 .

    基础 , WebAPP1 WebAPP2 拥有自己的Git存储库:

    \
     |
     |- base.git       (base's repository)
     |
     |- webapp1.git    (webapp1's repository)
     | \
     |   base          (base used as a Git submodule)
     |
     |- webapp2.git    (webapp2's repository)
       \
         base          (base used as a Git submodule)
    

    我想能够改变 基础 使用git子模块从webapp s内部编写代码,还可以使用 mvn package 在webapp的目录中。

    马文的 parent module 不允许这样的动态方法。我找不到使用的方法 模块 就像那样,用 起源 因为我的需求是复杂和静态的:每一个变化 基础 需要将新版本推送到存储库,以便webapp可以从中继承。

    也许我不完全理解马文的继承权,但我现在很迷路。

    有人在成功的同时也取得了类似的成就吗?您使用了什么构建系统以及如何使用?

    2 回复  |  直到 15 年前
        1
  •  0
  •   Pascal Thivent    15 年前

    您的用例似乎是 overlays (也可以看一下 the examples )。

    套印格式用于跨多个Web应用程序共享公共资源。一般来说,战争项目的所有依赖项都收集在WEB-INF/LIB中,除了覆盖在战争源上的战争工件。

    但是 基础 不会“在”webapp模块,它很可能是一个兄弟模块(也许它可以“在”webapp使用一些git黑魔法,但这超出了我的git技能,我无法思考如何与maven一起处理)。不,真的,我认为Maven的方法是使用覆盖。如果这不是你想要的,最好用其他的东西而不是MaveniMo。

        2
  •  0
  •   Koraktor    15 年前

    我自己找到了一个有效的解决办法。

    我的问题的基本解决方案是 <parent> 元素调用 <relativePath> . 它允许在指定目录中搜索父POM。否则,在应用程序中测试新版本之前,您总是需要部署新版本。

    <parent>
        <groupId>com.example</groupId>
        <artifactId>base</groupId>
        <version>1.0.0</groupId>
        <relativePath>base</relativePath>
    </parent>
    

    但这只是一个起点,允许使用Git子模块。为了让它真正发挥作用,我需要做以下工作:

    • 利用webapp和 base ,即所有文件

      base/src/main/java
      base/src/main/resources
      base/src/main/webapp
      src/main/java
      src/main/resources
      src/main/webapp
      

      虽然资源很容易覆盖,但是有一点配置 org.apache.maven.plugin:maven-war-plugin 需要将webapp资源投入战争。编译两个不同的源文件夹需要一个插件,因此我需要使用 org.codehaus.mojo:build-helper-maven-plugin 获得的类 基础 投入战争。

    • 另外,我对资源使用了很多过滤,所以几乎不需要定制基本文件来启动和运行webapp。例如,我使用 ${project.artifactId} 在我的主模板文件中,所以我的HTML <head> 对于一个名为 webapp1 :

      <link href="stylesheets/base.css" rel="stylesheet" media="screen" type="text/css" />
      <link href="stylesheets/webapp1.css" rel="stylesheet" media="screen" type="text/css" />
      

    这真的需要很多的尝试和错误,但最终我得到了它的工作,我认为这是实现我的目标的最佳方式使用Maven。使用像这样的动态工具会容易得多 Buildr 但遗憾的是,builder在Windows上运行缓慢(多亏了Ruby),并且不能很好地集成到大多数IDE中。