【问题标题】:Client/server project structure, folder structure, build files, etc客户端/服务器项目结构、文件夹结构、构建文件等
【发布时间】:2009-12-18 04:17:57
【问题描述】:

我正在编写一个客户端和服务器应用程序。现在我只是在自己开发它,所以我把它写成一个 Eclipse 项目,组织成 Java 包(org.myorg.server、org.myorg.client、org.myorg.networksystem 等)。项目部署到单个 jar 文件。然后,客户端是一个小程序,所以我只需将小程序 code 参数指向 jar 文件中的 org.myorg.client.ClientApplet,而当我运行服务器时,它是一个命令行应用程序,我运行:

java -jar MyJar.jar org.myorg.server.ServerApplication

好吧,我需要清理它的结构并改进构建过程。我还想分离 jar 文件,这样用户就无法像现在一样访问 jar 文件中内置的服务器副本。

我想使用持续集成服务器,例如CruiseControl。如果我只需要将我的代码签入到 SVN 存储库中,那就太酷了;然后 CruiseControl 服务器会抓取代码,编译并将其打包到单独的 jar 中,然后将服务器 jar 部署到我的专用服务器上并运行它,并将客户端 jar 部署到我的 Web 服务器上,以便更新小程序。

我可以弄清楚 CruiseControl。我当前的问题是如何分离代码。它很好地分为客户端和服务器包,但还有一些共享包,例如网络协议。我应该将我的项目分成 3 个项目,分别用于客户端、服务器和公共项目吗?我应该做点别的吗?我正在考虑手动编写 Ant 构建文件,但我真的很想留在 Eclipse 中。

我怎样才能最好地组织我的代码来实现这些目标?

(顺便说一句,对不起,如果这个问题令人困惑,我想我很难用语言表达我脑海中盘旋的所有不同问题)

【问题讨论】:

    标签: java eclipse continuous-integration client-server


    【解决方案1】:

    将您的项目分成 3 个独立的项目,您走在正确的轨道上 - 您将需要 1 个客户端、1 个服务器和 1 个通用项目。

    您可以在 Eclipse 中定义每个项目的项目间依赖关系 - 如果您右键单击该项目,它会在“配置构建路径”选项启动的对话框中。

    您应该考虑编写 ANT 文件来处理构建 - 稍后插入 CruiseControl 会容易得多。

    【讨论】:

      【解决方案2】:

      如果您似乎已经知道您需要做什么,但是,如果您希望 CruiseControl 编译和打包代码,那么您将需要使用 Ant 之类的工具,或者可能的 Maven、Gradle 或一些其他构建工具,以便让它做你想做的事。即使你有一个构建工具打包代码,你仍然可以使用 Eclipse 来构建和运行一切。

      我不确定您对 Ant 的熟悉程度,但使用 Ant 可以让您更好地控制构建过程,但需要定义流程。其他工具,如 Maven 和 Gradle,有一种规定的代码结构方式,可以减少构建的配置量,在 Maven 的情况下,我不确定是否可以改变它期望的项目布局。另一方面,Gradle 可以更改其默认值。

      就组织而言,我认为将代码分为客户端、服务器以及客户端和服务器共享的网络协议,正如您所提到的,会很好。我不使用 Eclipse,所以我不确定该怎么做。您可以将客户端和服务器打包到单独的 JARS 中,其中包含来自网络协议模块的类文件,或者只制作三个 JARS。

      【讨论】:

      • 从那以后我研究了 Maven,认为它不适合我,现在我很高兴地使用 Ant。我决定共享代码很少,我将在项目之间手动复制它,所以我有两个独立的项目。我一直在学校和学习 Ant 之间忙得不可开交,以至于我还没有在 Eclipse 中加载它们,但我预计不会有任何困难。
      【解决方案3】:

      我认为你的问题很好。
      我建议调查maven。它专门设计用于提供通用的最佳实践工作流程,包括开发、测试和部署阶段。即使你最终没有使用 maven,它也可能会给你一些关于项目结构的想法。
      Eclipse 与 ant 有很好的集成,因此您可以使用 ant 构建/部署您的项目并且仍然留在 Eclipse 中。
      我绝对建议将您的代码分成几个 Eclipse 项目。这将强制执行正确的依赖关系:您可以确保您的客户端代码可以使用您的公共代码,并且您的服务器代码可以使用您的公共代码,但公共代码不能使用其他两个中的任何一个,同样服务器可以'不使用客户端代码。

      【讨论】:

        【解决方案4】:

        对于大型项目,最好为每个客户端、服务器和公共项目分别创建单独的 Eclipse 项目。

        但是,在我看来,这对于一个小项目来说太过分了:在这种情况下,我会将其保留为一个 Eclipse 项目,但编写自定义 Ant 目标(都在同一个 build.xml 文件中)来处理客户端与服务器 jar 的打包。公共代码只会出现在两个 jar 中。

        但是,是的,您必须做一些手动 Ant 工作,但无论如何,这是一项很好的技能。

        【讨论】:

          猜你喜欢
          • 2019-03-25
          • 2017-12-05
          • 2014-07-09
          • 2018-03-11
          • 2020-09-11
          • 1970-01-01
          • 2020-01-06
          • 2013-05-20
          • 2017-02-06
          相关资源
          最近更新 更多