因此,在评估了一些不同的工具 + 想法后,我发现最适合我们项目的是 Maven 和 SVN 外部的组合。我们分别解决前端/后端依赖项:
后端 - 核心:将核心构建为典型的 JAR 包(这里没什么特别的)
前端 - 核心:将核心前端包含在与核心后端相同的存储库中。它将位于核心 JAR 构建未打包的 webapp 目录中,而是使用 maven 程序集插件将其单独打包到 ZIP 文件中:
pom.xml
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.3</version>
<configuration>
<descriptors>
<descriptor>src/assembly/webapp.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
webapp.xml
<assembly>
<id>webapp</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.basedir}/src/main/webapp/core/</directory>
<outputDirectory/>
<includes>
<include>**</include>
</includes>
</fileSet>
</fileSets>
</assembly>
后端 - 子级:对核心的典型 maven 依赖
Frontend - Child : 要么使用 SVN 外部引用核心前端,要么使用放入 webapp 某处的预构建包。使用外部允许 Eclipse 透明地开发核心 + 子前端,使用预构建的包更容易管理,但更难迁移更改。
总体而言,该系统相对易于管理,唯一不直观的部分带有使 svn 外部复杂化的版本。但是通过“适当的”发布分支+标记,没有什么是无法处理的。
我还写了一篇博文比较和对比我们考虑的所有选项 - https://cgsrv1.arrc.csiro.au/blog/2012/06/15/managing-an-extensible-javajavascript-application/