java - 为单个 Maven 项目创建两个 Artifact (war)

标签 java maven dependency-injection build war

我有一个Java Web项目,我们部署在两个不同客户的服务器上,99%的代码是相同的,现在我有两个ApplicationBuilder,这是包含每个客户的定制的类。

每当我想要部署新版本时,我都必须手动注释一行,构建(使用 Maven),取消注释该行,注释另一行并再次构建。

public class ApplicationBuilderFactory {
    private static final IApplicationBuilder app;

    static {
//            app = new Customer1ApplicationBuilder()
            app = new Customer2ApplicationBuilder();
        }
    }

    public static IApplicationBuilder get() { return app; }
}

我想避免这一切,最好的办法可能就是制造两场不同的 war 。

有什么好的方法可以做到这一点?我不使用(也不喜欢)依赖注入(inject)框架,并且仅为单个类添加一个依赖注入(inject)框架似乎有些过分,但我可能会考虑它。

最佳答案

解决此问题的一种方法是使用 Maven WAR Plugin Overlays功能。

您不必尝试从一个项目构建多个 Artifact (这在一段时间后可能会变得难以使用),而是创建一个基本 WAR 项目,然后为每个客户创建一个单独的 WAR 项目,该项目仅包含需要不同的组件。

每个客户特定的 WAR 将被基础 WAR 覆盖。这不仅可以更轻松地自定义 ApplicationBuilderFactory,还可以更轻松地自定义特定的 Web 内容和 Assets 。

这还有以下好处

  • 客户特定功能保证相互隔离;

  • 不同的客户可以有自己的发布周期和源代码控制存储库

  • 添加后续客户很容易

关于java - 为单个 Maven 项目创建两个 Artifact (war),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44177143/

相关文章:

java - 使用 native SQL Hibernate 从存储过程中检索值

JAVA EE 7 First cup教程,无法安装Glassfish 4更新中心

java - Spring Boot 组件扫描仅包含特定包

java - 如何在类型为接口(interface)的注入(inject)点中 Autowiring 实现

java - 如果它们死了,我该如何重生线程

java - 如何实例化 IOSDriver 以在当前 session 中访问其方法

java - 我怎样才能进一步调整以下算法(Java)以使其运行得更快?

java - Lombok 和 AspectJ

tomcat - 使用 maven 在 tomcat7 上使用 SSL

javascript - Angular - 解析器和组件不共享注入(inject)的服务?