为单个maven项目创建两个工件(war)
我有一个Java Web项目,我们在两个不同客户的服务器上部署,99%的代码是相同的,现在我有两个ApplicationBuilders,它是包含每个客户的自定义的类。
每当我想部署新版本时,我必须手动注释一行,构建(使用maven),取消注释该行,注释另一行并再次构建。
public class ApplicationBuilderFactory { private static final IApplicationBuilder app; static { // app = new Customer1ApplicationBuilder() app = new Customer2ApplicationBuilder(); } } public static IApplicationBuilder get() { return app; } }
我想避免这一切,最好的事情可能就是创造两场不同的战争。
这样做的好方法是什么? 我不使用(也不喜欢)dependency injection框架,并且为一个类添加一个似乎有点过分,但我可能会考虑它。
解决此问题的一种方法是使用Maven WAR Plugin Overlaysfunction。
您可以创建一个基本WAR项目,然后为每个仅包含需要不同的组件的客户创建一个单独的WAR项目,而不是尝试从一个项目构建多个工件(一段时间后可能变得难以处理)。
每个客户特定的WAR将与基础WAR重叠。 这样不仅可以更轻松地自定义ApplicationBuilderFactory,还可以自定义特定的Web内容和资产。
这也有以下好处
-
客户特定function保证彼此隔离;
-
不同的客户可以拥有自己的发布周期和源代码控制存储库
-
添加后续客户很容易
创建2个不同的Maven配置文件,每个客户一个,在编译阶段之前将ApplicationBuilderFactory类的版本复制到正确的目录。
org.apache.maven.plugins maven-antrun-plugin 1.7 copy-files generate-sources run customer1 customer1 customer2i customer2
我们没有只有一个src / main / java / pkg / ApplicationBuilderFactory.java,而是:
- 的src /主/爪哇/ PKG / ApplicationBuilderFactory.java.customer1
- 的src / main / JAVA /包装/ ApplicationBuilderFactory.java.customer2。
因此,在编译java代码之前,我们将其中一个版本复制到src / main / java / pkg / ApplicationBuilderFactory.java。
因此,使用2个不同的配置文件生成2个不同的.wars