【问题标题】:Maven WAR: split classes JAR for different packagesMaven WAR:为不同的包拆分类 JAR
【发布时间】:2020-01-09 07:55:49
【问题描述】:

我正在使用 Eclipse(使用 m2e 插件)开发 J2EE Web 应用程序。如果我的项目包含一些专用于特定客户的类,通常我会将它们分组到特定的包中,例如:

  • com.myapp.logic
  • com.myapp.logic.customer1
  • com.myapp.logic.customer2

所以在部署时我可以使用 Eclipse .jardesc 描述符将它们打包到不同的 JAR 中,获得如下内容:

  • myapp.jar
  • myapp-customer1.jar
  • myapp-customer2.jar

这种方法的优点是,如果我只需要更新 customer1 类,我可以只更新 customer1 jar(如果依赖项没有改变)。

现在我想在我的 webapp 项目中使用 Maven,但我找不到将 jar 分开的解决方案。 使用带有archiveClasses 配置的WAR 插件,我只能为我的类部署一个JAR,我无法配置如何将包拆分为不同的JAR。

我考虑过使用叠加层,但整个项目必须拆分为多个项目,并且可能会变得过于复杂(尤其是如果我有 20/30 个客户)。对于类部署,我只希望“更轻松”拆分。

另外,Maven 有没有办法在 WAR 组装之前将我的类打包到不同的 JAR 中(使用不同的 executions),然后将它们包含到 WAR 中而忽略类的标准部署(或等效 JAR)?

【问题讨论】:

  • 我认为这个用例不适用于 Maven。您必须改用 Gradle。
  • 使用 Maven,您将创建一个包含共享逻辑 (com.myapp.logic) 的模块和一个用于每个客户逻辑的模块,然后使用多个模块来生成不同的战争文件。
  • @hotzst 是的,是问题中提到的覆盖方法

标签: java maven war


【解决方案1】:

如果你想使用Maven,如果你想在不同的jar中分离代码,最好创建一个多模块项目。

所以你会有:

  1. 一个父pom(包装pom)
  2. 一个或多个实用罐(包装罐)
  3. 打包应用的一场大战(打包大战)

这是一个完整的示例(实际上构建了一个 EAR,但如果不需要,您可以跳过 EAR):

https://howtodoinjava.com/maven/multi-module-project-eclipse/

如果您需要为客户分开,您可以使用 maven 配置文件来做到这一点:

    <profile>
        <id>customer2</id>
        <dependencies>
             <dependency>
                <groupId>myGroup</groupId>
                <artifactId>artificatCustomer2</artifactId>
            </dependency>        


    <profile>
        <id>customer1</id>
        <dependencies>
             <dependency>
                <groupId>myGroup</groupId>
                <artifactId>artificatCustomer1</artifactId>
            </dependency>        

【讨论】:

  • 是的,这是正确的。但是,如原始问题所述:I've considered to use overlays but the entire project must be splitted into several projects and may become too complex (especially if I have 20/30 customers). I would prefer only a "lighter" split for classes deployment
  • @DamianoZucconi 您是否考虑过使用模块并使用 Maven 配置文件或存储库分支来管理聚合? (两种解决方案都可以,特别是如果客户没有完全访问源存储库的权限)
  • 我考虑过 Maven 配置文件,但我可以使用配置文件拆分使用 WAR 插件创建的 JAR 吗?我看到您可以使用带有配置文件的 JAR 插件而不是 WAR 插件(我只有 archiveClasses 选项)来拆分 jar。实际上我想使用模块和覆盖,但我现在有 65 个客户包,所以我需要创建 65 个不同的模块
  • @DamianoZucconi 好吧,不管你使用哪种方法,你都需要创建 65 种不同的配置。
猜你喜欢
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
  • 2014-02-05
  • 1970-01-01
  • 2014-03-06
  • 2012-06-07
  • 1970-01-01
相关资源
最近更新 更多