gpt4 book ai didi

java - SmartClient 项目的 Maven 用法

转载 作者:行者123 更新时间:2023-11-30 12:00:21 26 4
gpt4 key购买 nike

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

  • 我的项目.core
  • 我的项目.server
  • 我的项目.client

当然每个都有几个子包。 Client和Server都使用core。我看到两个主要选项:

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

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

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

选项 #1 是否可行?如果是这样,这是好的做法吗?从我最初的研究来看,选项 #2 听起来是最佳实践。然而,当所有代码都密切相关时,从 POM 跳到 POM 听起来像是我们可能不需要的额外工作和额外困惑。我应该坚持使用选项 #2 吗?

最佳答案

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

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

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

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

Fighting against Maven doesn't sound fun.

不,你会失去 :)

What is in the pom.xml at the root level?

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

Project Aggregation is similar to Project Inheritance. But instead of specifying the parent POM from the module, it specifies the modules from the parent POM. By doing so, the parent project now knows its modules, and if a Maven command is invoked against the parent project, that Maven command will then be executed to the parent's modules as well. To do Project Aggregation, you must do the following:

  • Change the parent POMs packaging to the value "pom" .
  • Specify in the parent POM the directories of its modules (children POMs)

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

By "single artifact per project" do you mean that there should be a separate POM for Standalone.jar, Server.war, and Client.jar (three total POMs)?

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

What if I also want a Server.jar, a simple server based with Grizzly included? Wouldn't server need two POM's?

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

Also, how would one kick off a build that would result in all three artifacts getting produced?

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

关于java - SmartClient 项目的 Maven 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2067273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com