Java SmartClient项目的Maven用法

Java SmartClient项目的Maven用法,java,maven-2,enterprise,smartclient,Java,Maven 2,Enterprise,Smartclient,为具有SmartClient架构的项目设置Maven的最佳方法是什么?考虑以下软件包: myproject.core myproject.server myproject.client 当然,每个包中都有几个子包。客户端和服务器都使用核心。我看到两个主要选择: 在myproject中制作一个uber POM,涵盖所有三个方面,并具有某种构建参数来确定要构建的内容 在上面的每个包中制作一个POM(一个用于核心,另一个用于服务器,另一个用于客户端) 以下是我们需要构建的输出(至少): Stan

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

  • myproject.core
  • myproject.server
  • myproject.client
当然,每个包中都有几个子包。客户端和服务器都使用核心。我看到两个主要选择:

  • 在myproject中制作一个uber POM,涵盖所有三个方面,并具有某种构建参数来确定要构建的内容
  • 在上面的每个包中制作一个POM(一个用于核心,另一个用于服务器,另一个用于客户端)
  • 以下是我们需要构建的输出(至少):

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

    选项1可能吗?如果是,这是否良好的做法?根据我的初步研究,选项2听起来像是最佳实践。然而,当所有代码都密切相关时,从一个POM跳到另一个POM听起来像是我们不需要的额外工作和额外的混乱。我应该坚持选项2吗?

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

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

    更新(在评论中涵盖OP中的问题):

    与Maven作战听起来并不有趣

    不,你将失去:)

    pom.xml中根级别的内容是什么

    这是用于的父POM。引用该文件:

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

    • 将父POMs包装更改为值“pom”
    • 在父POM中指定其模块(子模块)的目录 POMs)
    项目聚合和项目继承通常一起使用。有关更多详细信息,请参阅上述文件

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

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

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

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


    另外,如何启动一个构建,从而生成所有三个工件


    正如我们所看到的(也称为“多模块构建”),从聚合项目中启动maven命令。

    说得好。与Maven作战听起来并不有趣。pom.xml中根级别的内容是什么?“每个项目只有一个工件”是不是意味着Standalone.jar、Server.war和Client.jar应该有一个单独的POM(总共三个POM)?如果我还想要一个Server.jar,一个包含Grizzly的简单服务器,该怎么办?服务器不需要两个POM吗?再次感谢您的帮助。另外,如何启动一个构建,从而生成所有三个工件?请致电一些朋友:)很高兴您发现它很有用。
    .
    |-- core
    |   `-- pom.xml
    |-- server
    |   `-- pom.xml
    |-- client
    |   `-- pom.xml
    `-- pom.xml