【问题标题】:Maven generating two different WAR files for same projectMaven 为同一个项目生成两个不同的 WAR 文件
【发布时间】:2013-04-17 10:19:03
【问题描述】:

我有一个 Maven 网络服务项目,由两个不同的服务类 testClass1 和 testClass2 组成。我想为同一个项目的两个类有两个不同的 WAR 文件。目前我正在为这两个服务生成单个 WAR 文件。

如何为同一个项目生成两个不同的 WAR 文件? 提前致谢。

【问题讨论】:

    标签: maven


    【解决方案1】:

    一般注意事项

    正如per doc 所说,您试图实现的目标是糟糕的做法

    从单个源目录生成多个唯一 JAR

    由于许多抱怨无法将其源代码分散到多个源目录中的人似乎在抱怨不想分散任何东西,因此使用包含和排除从单个目录生成多个独特的工件。

    为什么不推荐这样做?

    这种做法可能会令人困惑且有风险。

    您最终可能会构建两个包含相同类的 JAR - 这表明应该将通用功能抽象为单独的依赖项。 您最终可能会在两个 JAR 之间引入您没有意识到的依赖关系,并且通常是循环依赖关系。这表明这些类在错误的 JAR 中,或者可能所有内容都应该只是一个 JAR。

    适合 maven 最佳实践的解决方案

    您应该考虑将您的项目分成两个不同的项目,每个项目都有一个 pom,因此每个项目都会生成一个工件,这里是一场战争。

    两个简单的项目

    您可以通过使用两个简单的项目来实现:

    service1-simple-webproject
    |-- src
    `-- pom.xml
    
    service2-simple-webproject
    |-- src
    `-- pom.xml
    

    这很简单,但您可能无法轻松共享它们之间的属性/依赖项/关系。

    只需将您自己的代码拆分到单独的目录中,并尝试使其作为两个独立的项目工作。

    如果您认为它们之间有一些代码可以共享(实用程序、配置等),请参阅下一节关于多模块的内容。

    多模块结构

    或者您可以使用适当的多模块层次结构:

    parent-multimodule-project
    |-- service1-simple-webmodule
    |   |-- src/
    |   `-- pom.xml
    |-- service2-simple-webmodule
    |   |-- src
    |   `-- pom.xml
    `-- pom.xml
    

    这将允许您在项目之间建立关系,在更高级别共享配置,... 看看这个文档:

    我可能会引导您创建第三个项目,可能命名为 core 或 util,它会生成一个 jar,其中包含两个 Web 项目的公共类。

    这真是最好的办法!

    功能性解决方案,但强烈不建议

    我只会给你一些信息,因为我什至确信它可以在这种情况下工作。

    Maven Assembly Plugin 允许您根据 xml 描述文件生成不同格式的包(zip、jar、war、其他...)。 这里的文档:http://maven.apache.org/plugins/maven-assembly-plugin/

    再次,我强烈建议您不要使用这种解决方法。

    【讨论】:

    • +1 在我正在进行的项目中,我们选择了多模块方法,效果非常好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多