我正在编写客户端和服务器应用程序。现在我只是自己开发它,所以我把它写成一个Eclipse项目,组织成Java包(org.myorg.server,org.myorg.client,org.myorg.networksystem等)。该项目部署到一个jar文件。然后,客户端是一个applet,所以我只是将applet code 参数指向jar文件中的org.myorg.client.ClientApplet,而当我运行服务器时,它是一个命令行应用程序而我刚跑:
java -jar MyJar.jar org.myorg.server.ServerApplication
好吧,我需要清理它的结构并改进构建过程。我还想分离jar文件,这样用户就无法像现在一样访问内置在jar文件中的服务器副本。
我想使用CruiseControl等持续集成服务器。如果我只需要将我的代码检入SVN存储库,这将是非常酷的;然后CruiseControl服务器将获取代码,编译并将其打包到单独的jar中,然后将服务器jar部署到我的专用服务器上并运行它,并将客户端jar部署到我的Web服务器上,以便更新applet。
我可以找出CruiseControl。我目前的问题是如何分离代码。它很好地分为客户端和服务器包,但随后有一些共享包,如网络协议。我应该将我的项目分成3个客户端,服务器和公共项目吗?我应该做别的吗?我正在考虑手工编写Ant构建文件,但我真的想留在Eclipse中。
如何才能最好地整理代码以实现这些目标?
(顺便说一句,对不起,如果这个问题令人困惑,我想我很难说出所有不同的问题在我脑海中浮现)
答案 0 :(得分:3)
您正在将项目分成3个独立的项目 - 您将需要1个客户端,1个服务器和1个通用项目。
您可以在Eclipse中为每个项目定义项目间依赖关系 - 如果您右键单击该项目,它将位于“configure build path”选项启动的对话框中。
你应该考虑编写ANT文件来处理构建 - 稍后插入CruiseControl会更容易。
答案 1 :(得分:2)
如果您已经知道自己需要做什么,但是,如果您希望CruiseControl编译并打包代码,那么您将需要使用像Ant这样的工具,或者可能使用Maven,{{3}或者其他一些构建工具,以便让它做你想做的事。即使你有一个构建工具包代码,你仍然可以使用Eclipse来构建和运行所有东西。
我不确定您对Ant有多熟悉,但使用Ant可以让您更好地控制构建过程,但需要定义过程。像Maven和Gradle这样的其他工具有一种规定的构造代码的方法,可以减少构建的配置量,而在Maven的情况下,我不确定是否可以改变它对项目布局的期望。另一方面,Gradle可以更改其默认值。
就组织而言,我认为将代码分为客户端,服务器以及客户端和服务器共享的网络协议,如前所述,这样做会很好。我不使用Eclipse,所以我不确定如何做到这一点。您可以使用来自网络协议模块的类文件将客户端和服务器打包到单独的JARS中,或者只创建三个JARS。
答案 2 :(得分:0)
我认为你的问题非常好。
我建议调查maven。它专门用于提供通用的最佳实践工作流程,包括开发,测试和部署阶段。即使你最终没有使用maven,也可能会给你一些关于项目结构的想法。
Eclipse与ant有很好的集成,所以你可以使用ant来构建/部署你的项目,并且仍然留在Eclipse中。
我绝对建议将您的代码分成几个Eclipse项目。这将强制执行正确的依赖关系:您可以确保您的客户端代码可能使用您的公共代码,并且您的服务器代码可能使用您的公共代码,但公共代码不能使用其他任何代码,并且类似地,服务器可以不使用客户端代码。
答案 3 :(得分:0)
对于大型项目,最好为客户端,服务器和公共服务器分别设置单独的Eclipse项目。
然而,在我看来,这对于一个小项目来说会有点过分:在这种情况下我会将它保留为一个Eclipse项目,但是编写自定义Ant目标(都在同一个build.xml文件中)来处理客户端与服务器jar的打包。公共代码只会出现在两个罐子里。
但是,是的,你必须做一些手工Ant工作,但无论如何这都是一项很好的技能。