【问题标题】:Maven usage for a SmartClient projectSmartClient 项目的 Maven 用法
【发布时间】:2010-01-14 20:17:24
【问题描述】:

为具有 SmartClient 架构的项目设置 Maven 的最佳方法是什么?考虑以下包:

  • myproject.core
  • myproject.server
  • myproject.client

当然,每个都有几个子包。客户端和服务器都使用核心。我看到两个主要选项:

  1. 在 myproject 中创建一个 uber-POM 以涵盖所有三个,并具有某种构建参数来确定要构建的内容。
  2. 在上面的每个包中创建一个 POM(一个用于核心,另一个用于服务器,另一个用于客户端)。

以下是我们需要构建的输出(至少):

  • Standalone.jar:将启动服务器和客户端的测试应用程序。
  • Server.war:可以部署到 Tomcat 的 WAR 文件。
  • Client.jar:没有任何服务器代码的 SmartClient。

选项#1 甚至可能吗?如果是这样,这是一个好习惯吗?从我最初的研究来看,选项 #2 听起来像是最佳实践。然而,当所有代码都密切相关时,从 POM 跳转到 POM 听起来像是我们可能不需要的额外工作和额外混乱。我应该坚持选择 #2 吗?

【问题讨论】:

    标签: java maven-2 enterprise smartclient


    【解决方案1】:

    Maven 有一个通用规则,即每个项目应该只有一个工件。换句话说,选项 #1 不允许您在不与 maven 对抗的情况下生成 server.war、client.jar 等。这将是一团糟,您将无法利用 Maven 插件。不,真的,你不想要这个。因此,只需选择选项 #2,其结构类似于(省略 src 目录):

    .
    |-- core
    |   `-- pom.xml
    |-- server
    |   `-- pom.xml
    |-- client
    |   `-- pom.xml
    `-- pom.xml
    

    关于您对从 POM 跳转到 POM 的担忧,好吧,只需将所有模块导入您的 IDE,您不会真正注意到它。这对很多人都非常有效。

    更新(涵盖来自 cmets 中 OP 的问题):

    与 Maven 战斗听起来并不有趣。

    不,你会失去:)

    根级别的 pom.xml 中有什么?

    这是用于Project Aggregation 的父 POM。引用Introduction to the POM 文档:

    项目聚合类似于 项目继承。但不是 从 模块,它指定来自的模块 父 POM。通过这样做, 父项目现在知道它的模块, 如果调用了 Maven 命令 针对父项目,即 Maven 然后命令将被执行到 父母的模块也是如此。去做 项目聚合,你必须这样做 以下:

    • 将父 POM 包装更改为值“pom”。
    • 在父 POM 中指定其模块的目录(子 POM)

    项目聚合和项目继承经常一起使用。有关详细信息,请参阅上述文档。

    “每个项目一个工件”是指 Standalone.jar、Server.war 和 Client.jar(总共三个 POM)应该有一个单独的 POM?

    是的,这就是我的意思,一个项目生成一个工件(有一些例外,但 99% 的情况下都是如此)。这是您应该(必须?)遵循的最佳实践。

    如果我还想要一个 Server.jar,一个包含 Grizzly 的简单服务器,该怎么办?服务器不需要两个 POM 吗?

    我认为处理此问题的 maven 方法是使用 assemblies 并且您的问题没有唯一答案(这可能是上述规则的例外情况之一)。但这不会阻止您开始。

    另外,如何启动一个可以生成所有三个工件的构建?

    如我们所见,从聚合项目(又名“多模块构建”)启动您的 maven 命令。

    【讨论】:

    • 说得好。与 Maven 战斗听起来并不有趣。根级别的 pom.xml 中有什么? “每个项目一个工件”是否意味着 Standalone.jar、Server.war 和 Client.jar(总共三个 POM)应该有一个单独的 POM?如果我还想要一个 Server.jar,一个包含 Grizzly 的简单服务器怎么办?服务器不需要两个 POM 吗?再次感谢您的帮助。
    • 另外,如何启动一个可以生成所有三个工件的构建?
    • 给一些朋友打电话 :)) 很高兴你觉得它有用。
    猜你喜欢
    • 2012-05-07
    • 2014-03-28
    • 2022-12-20
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 2020-12-04
    相关资源
    最近更新 更多