2009-12-18 133 views
3

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

Java的罐子MyJar.jar org.myorg.server.ServerApplication

好了,我要清理它的结构,提高了构建过程。我也想分开这些jar文件,这样用户就无法像现在一样访问内置在jar文件中的服务器副本。

我想使用持续集成服务器,如CruiseControl。如果我只需要将我的代码检入SVN存储库,那将非常酷;那么CruiseControl服务器将获取代码,编译它并将其打包到单独的jar中,然后将服务器jar部署到我的专用服务器上并运行它,并将客户端jar部署到我的web服务器上,以便更新applet。

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

如何最好地组织我的代码以实现这些目标?

(顺便说一句,对不起,如果这个问题是混乱的,我想我有一个很难用语言都围绕我的头纷飞的不同的问题)

回答

2

如果看来你已经知道你需要什么这样做,但是,如果你想CruiseControl的编译和打包的代码,那么你将需要使用像蚂蚁,或可能MavenGradle,或其他一些构建工具的工具,以拥有它你想要做什么。即使你有一个构建工具包的代码,你仍然可以使用Eclipse来构建和运行一切。

我不知道你是多么熟悉的蚂蚁,但使用Ant会给你需要定义过程的费用比建造过程中加以控制。像Maven和Gradle这样的其他工具可以通过规定的方式来构建代码,从而减少构建的配置数量,就Maven而言,我不确定是否可以改变它期望项目布局的方式。另一方面,Gradle可以更改默认值。

至于组织,我想分离代码到客户端,服务器和客户端和服务器共享的网络协议,如你所提到的,将是一件好事。我不使用Eclipse,所以我不知道如何完成。您可以将客户端和服务器打包到单独的JARS中,同时使用网络协议模块中的类文件,也可以只制作三个JARS。

+0

我已经看到了Maven,决定它不适合我,现在我开心地使用Ant。我决定共享代码很少,我只需要手工复制它们之间的项目,所以我有两个独立的项目。我在学校和学习Ant之间一直如此肆意,以至于我还没有把它们加载到Eclipse中,但我没有预见到任何困难。 – Ricket 2010-01-13 15:32:20

3

你是在正确的轨道与您的项目分割成3个独立的项目上 - 你需要1个客户,1个服务器和1个共同的。

您可以在Eclipse中为每个项目定义项目间依赖关系 - 如果右键单击该项目,它将位于由“configure build path”选项启动的对话框中。

您应该研究编写ANT文件来处理构建 - 稍后插入CruiseControl会更容易。

0

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

0

对于大型项目,最好为每个客户端,服务器和公共项目分别安装Eclipse项目。我认为,对于一个小项目来说,这将是矫枉过正的:在这种情况下,我会将它保留为一个Eclipse项目,但编写自定义Ant目标(全部在同一个build.xml文件中)来处理客户端与服务器罐的包装。通用代码只会出现在两个罐子中。

但是,是的,你将不得不做一些手动的Ant工作,但这是一个很好的技能,无论如何。