组织Java项目

时间:2009-12-25 18:41:55

标签: java version-control project-management build-automation

我是一名初级开发人员,最近开始在一个非常小的办公室工作,他们在那里进行大量的内部开发。我从未参与过涉及多个开发人员的项目,或者与这些开发人员一样大而复杂。

问题是他们没有充分利用所有可用的工具(版本控制,自动构建,持续集成等):主要是项目是eclipse / netbeans中使用cvs进行版本控制的一个大项目所有签入的内容(包括库jar),当我开始为小任务分支并将它们合并回来时,他们第一次开始使用分支。随着项目变得越来越大,越来越复杂,问题开始出现依赖关系,项目结构与IDE相关联,建设有时可能是PITA等等。最好是忙碌。

我想要的是建立一个开发环境,其中大部分问题都将消失,我将节省时间和精力。我想以独立于使用版本控制的IDE的方式设置项目(我现在倾向于SVN),避免依赖混乱并尽可能地自动构建。

我知道有多种方法和工具,并且不希望看到圣战开始,我真的很感激基于经验的实用建议以及在面对类似问题时你发现有用的东西。所有项目都是Java项目,范围从Web应用程序到“通用”项目,我大部分时间都使用Eclipse,但如果需要也可以使用Netbeans。提前谢谢。

10 个答案:

答案 0 :(得分:18)

答案 1 :(得分:8)

我们的开发堆栈(由10多位开发人员组成的团队)

  • Eclipse 带有M2Eclipse和Subclipse / Subversive的IDE
  • Subversion 用于源代码管理,一些开发人员也使用Subo失败的TortoiseSVN
  • Maven 2 用于项目配置(依赖项,构建插件)和发布mgmt(自动标记版本)
  • Hudson 用于持续集成(还创建包含源附件和报告的快照版本)
  • 工件存储库的
  • Archiva (多个存储库,例如版本和快照是分开的)
  • 声纳用于代码质量跟踪(例如热点,覆盖范围,编码指南的遵守情况)
  • JIRA 用于错误跟踪
  • 开发人员维基
  • Confluence 以及技术文档与其他部门的沟通
  • Docbook 手册(已集成到构建中)
  • JMeter 用于压力测试和长期绩效监控
  • 用于自动浏览器集成测试的
  • Selenium / WebDriver
  • Jetty,Tomcat,Weblogic和Websphere 作为Web应用程序的测试环境。每天晚上部署产品,并在分布式Hudsons上运行自动化测试。
  • 邮件列表与所有开发人员一起发布公告,一般信息邮件
  • 每日站立会议哪里有人告诉他目前正在做什么

此设置被认为是我们公司的标准,因为许多部门正在使用这些工具,并且有很多经验和社区支持。

尽可能地尝试自动化是绝对正确的。如果您的同事在开发阶段的各个方面自动化时开始看到好处,那么他们将鼓励他们自己改进。当然,每一项新技术噱头(“工具”)都是一种新的负担,必须加以管理和维护。这是努力的动向。你节省时间,例如当maven自动执行您的发布时,您将浪费时间管理maven本身。我的经验是,每次我介绍一种新工具(上述之一)时,都需要时间来采用和关注,但最终它会在真正的价值经历时为整个团队带来优势 - 尤其是在压力时,工具需要手动完成大部分工作。

答案 2 :(得分:4)

一种优秀的,令人钦佩的本能。感谢你。

使用工具可能无法解决部分问题。我要说源代码管理需要一些工作,因为它听起来不像分支,标记和合并。你需要一些培训和沟通来解决这个问题。

我自己没有使用过CVS,所以我不能说它支持这些做法有多好。我将指出Subversion和Git将是更好的选择。在最坏的情况下,您应该阅读Subversion“red bean”一书,以获得有关如何管理源代码的一般性建议。

就个人而言,我不是Maven的粉丝。我相信它太重了,特别是与Ant和Ivy相比。我会说使用Cruise Control的那些可以解决你的很多问题。

你没有提到单元测试。开始在构建周期中构建TestNG和Fit测试。

了解IntelliJ - 我认为它比Eclipse或NetBeans更好的IDE,但那只是我。

祝你好运。

答案 3 :(得分:2)

Maven非常棒,但它可以有一个相当的学习曲线,它要求项目适合非常特定的文件结构。如果您有一个很大的遗留项目,可能很难将其复原。在这种情况下,Ant + Ivy会在没有maven严格要求的情况下做同样的事情。

对于构建自动化,Hudson超出了令人敬畏的范围。我使用了几个不同的系统,但毫无疑问,这是最容易设置和管理的系统。

答案 4 :(得分:1)

我建议使用Maven来构建项目。使用Maven为项目设置值,因为:

  • Maven宣传convention over configuration等于良好的项目结构
  • 感谢Maven插件可以轻松地为IDE(Eclipse,Netbeans,Idea)生成项目
  • 处理所有依赖并完成构建生命周期
  • 促进项目模块化(通过多模块项目)
  • 帮助发布/版本负担
  • 提高代码质量 - 与连续集成服务器和大量代码质量插件轻松集成

答案 5 :(得分:1)

鉴于Maven最初的学习曲线,Maven可能有点令人生畏,但它可以很好地解决您的许多问题。我还建议你看一下Git的版本控制。

答案 6 :(得分:1)

对于项目和存储库管理,我将tracsubversion一起使用。

答案 7 :(得分:1)

这是我现在正在使用的内容,但我可能会切换几个部分(参见本文末尾)。

Eclipse 作为带有一些插件的IDE: JADClipse (动态反编译.class,非常有用), DBViewer 快速通过Eclipse,WTP(Web Tools Platform)集成到Eclipse中运行 Tomcat 6 作为开发Web服务器(非常快), Mylyn (与链接)访问数据库JIRA bug-tracker)。

我对“IDE独立项目”感到疑惑,现在我们都坚持Eclipse - Eclipse项目文件(.project,.classpath,.settings)甚至在CVS存储库中提交(为了拥有一个项目完全准备好一旦签出) - 但是使用Netbeans,Sun支持并且每个版本(以及每个新的JRE版本)运行得越来越快,问题没有关闭。

用于存储项目的

CVS ,几乎没有分支(仅适用于补丁)。

我正在使用 Oracle SGBDR 开展环境生产,但我在开发计算机上使用HSQLDB来更快地进行测试和构建及开发过程(借助于开源DDLUtils工具,用于简化数据库创建和数据注入。否则,对于某些Oracle特定任务(如投资会话锁等),我使用SQLWorkbench进行快速BD任务(包括模式比较)或Oracle(免费)SQLDeveloper

测试只是 JUnit 测试(简单的单元测试用例或更复杂的测试用例(几乎是“集成”测试用例),几乎总是在HSQLDB上运行以更快地运行。

我的构建系统是 Ant (从Eclipse启动),用于执行各种小任务(例如,在远程服务器上上传战争)和(主要) Maven 2

  • 构建过程
  • 发布已发布的文物
  • 发布项目的网站(包括报告)
  • 启动测试活动(每晚推出)

持续集成前端是 Luntbuild ,Maven存储库的前端是 Archiva

这一切都有效。但我对这个生态系统的一些元素感到非常失望。

主要是Maven,这太耗时了,而且我对这个工具有很多不满。冲突依赖性解决是一个笑话。每个POM.xml中有很多XML行,在每个项目中都是多余的(即使有一些POM根的帮助)。插件太不一致,错误,并且很难找到解释必须配置的明确文档,等等。

所以我想知道从Maven切换到ANT + Ivy 。对于我到目前为止看到的,它看起来很酷(冲突依赖关系解决方案有各种冲突管理器,你甚至可以编写自己的冲突管理器),不需要安装和配置一个额外的工具(作为ANT)在Eclipse下本地运行,而Maven需要一个单独的插件 - 顺便说一句,我已经尝试了3个Mavens插件,并且发现它们中的所有三个都是错误的。)

然而 Maven 3 即将推出,我会试一试,但我不认为它与Maven 2基本不同。

Hudson 似乎也是一个比Luntbuild更好的选择,但现在这个部分不会改变。

Subversion 可能会在不久的将来取代CVS(即使我几乎没有CVS的任何问题)。

答案 8 :(得分:1)

这里有很多好建议。我只有一些补充:

我认为,与其他人不同,IDE是个人工具,每个开发人员都应该有一些自由选择最适合他的工具。 (例如,许多人喜欢Eclipse,而我却放弃了NetBeans,因为Maven集成在Eclipse中是有问题的。)

我以为我会讨厌Maven,但现在我相处得很好。我现在面临的主要问题是找出记录约定的位置。

我建议一次引入一个工具。如果你试图在一个中风的手工店中机械化软件开发的所有方面,那么可能会有巨大的阻力。制定您的业务案例并就一个好的通用工具达成一致,或者只是获得设置以供您使用的权限,但是以一种常用的方式让人们看到它为您做了什么。在其中一些人之后,人们会养成习惯,想知道方面X如何自动化,因此应该更容易引入其他工具。

答案 9 :(得分:0)

在不破坏其他人及其工作方式的情况下,您可以做的最好的事情就是设置哈德森来观察每个项目的CVS存储库。只是这样做将为查看cvs提交消息提供一个中心位置。

下一步是让这些项目在Hudson下编译。对于Eclipse,这通常意味着切换到ant或 - 正如我们所做的那样 - 使用ant4eclipse来模拟现有的eclipse构建过程。不容易,但非常值得。记得在构建中断时发送邮件 - 这非常重要。 Ant4eclipse需要团队项目集 - 在您的组织中引入它们将在下次需要设置新工作区时让您的同事满意。

如果你的某些人提交更改时你的东西正确构建的情况,那么考虑自动构建代码以实际转到客户的代码。由于它是在构建服务器而不是开发人员计算机上构建的,因此您知道可以重现构建。这对于“嘿解决这个古老版本”的情况来说是非常宝贵的。