关于良好的Java构建工具的建议,与Eclipse完善
题
我正在一个小组(3人)在几个模块(目前约10个)工作。构建版本的汇编,集成和管理变得越来越乏味。我正在寻找一个替换 /完整蚂蚁的良好构建 /集成工具。
以下是我们当前开发环境的描述: - 几个模块,具体取决于第三方罐子上的每个模块 - 有些可能会导出罐子,一些出口战争,一些出口独立,可运行的罐子(带有fat -jar) - 所有这些都可以 - 我们使用Eclipse-每个模块的自定义蚂蚁脚本。日食配置和蚂蚁脚本之间的许多冗余信息。例如,对于独立的脂肪Jar,我们列出了所有递归依赖性,而理想情况下,可以显然可以从Eclipse配置中导入它。 - 源代码是使用SVN版本的
这是我希望为我做的完美集成工具:
自动化模块的版本和版本控制。理想情况下,集成工具应检测是否需要新版本。例如,如果我想发布取决于项目B的项目A,并且如果我在本地对项目B进行了少量更改,那么Integnation Tool也应首先发布新版本B,并基于A基于A它。
与Eclipse强烈集成,以便从其配置中获得模块和第三方Libs之间的依赖关系。顺便说一句,我想继续使用Eclipse配置构建路径,而不会更新其他“ .xml”内容。我看到Gradle可以从其配置中生成Eclipse Project文件,但是对应物很棒。
在本地项目上启用“实时”和透明的发展。我的意思是,在开发主要 /“叶”项目时,我经常对核心 /普通项目进行小更改。我想在不需要发布(甚至在本地)核心项目的罐子的情况下立即进行核心项目的更改。
将我的模块版本的所有版本存储在外部服务器上。最简单的(共享文件夹 / WebDav)将是最好的。一个不错的网页,其中包含模块和交付的工件列表也很棒。
我环顾四周。从Ant4eclipse(将Eclipse配置集成到我的ANT脚本中)到Maven / Ivy / Gradle工具。
我有点困惑。这是我到目前为止所理解的: - Maven是一个很棒的 /大工具,但有些僵化,有义务您屈服于其结构和概念。它基于描述而不是脚本。如果您走出路径,则必须开发自己的插件。 - 常春藤比Maven强大,它处理的东西更少,但更灵活。 - gradle在两者之间。这是通用。它可以启用脚本以及“基于惯例”的配置。它整合了蚂蚁并扩展了它。
因此,在这一点上,我正在寻找来自真实用户的实际推荐。您使用什么工具?如何 ?你有和我一样的需求吗?它会减轻您的生活或进入途中吗?
是否有一些用例或工作空间骨骼进行样品,我可以用作查看这些工具能够的起点?
抱歉,此消息的长度。预先感谢您的建议。
亲切的问候,
拉斐尔
解决方案
自动化模块的版本和版本控制(...)
版本管理和存储库的概念与Maven内置,可以在这里适合。
Maven支持 快照依赖性. 。使用快照时,Maven会定期尝试在运行构建时从存储库中下载最新的可用快照。快照通常是在项目正在积极开发的情况下使用的。
Maven 2也支持 版本范围 (我并不是真的推荐它们,但这是另一个故事)例如,它可以配置A以依赖版本 [4.0,)
b(任何大于或等于4.0的版本)。如果您构建并发布新版本的B,则A将使用它。
与日食强烈整合
这 m2eclipse 插件提供双向同步与Eclipse。
在本地项目上启用“实时”和透明的发展。
M2Eclipse插件支持“工作空间分辨率”:如果项目A依赖于项目B,如果项目B在工作区中,则可以配置A以依赖B源,而不是B.Jar(如果我不是默认模式,则是默认模式错误的)。因此,无需构建B.Jar,可以直接看到B来源的更改。
将我的模块版本的所有版本存储在外部服务器上。
如前所述,这实际上是Maven的中心概念(您甚至没有选择),并通过文件部署://或DAV://都得到了支持。
总而言之,Maven(可能)不是唯一的候选人,但我敢肯定它会合适:
- 您的项目不是那么异国或复杂,您的描述没有什么吓人的(对结构的某些重构可能是必需的,但这应该没什么大不了的)。
- Maven还根据最佳实践带来了工作流程。
- M2Eclipse提供了与IDE的强大集成。
但是马文有一些学习曲线。
其他提示
CI工具?对我来说,只有一个: 哈德森CI.
我曾经为Java设置了一个软件开发环境,其中包括:
- Eclipse IDE
- 墨西哥
- Bugzilla
- 小牛
- 关系
- 哈德森CI
还有一些apache,mysql,php,perl,python,用于集成。
哈德森没有与Eclipse集成,这是故意的,因为我想在单独的服务器上构建。对于所有其他工具,我都有完美的交叉集成(例如:Eclipse上的Mylyn与Bugzilla交谈,M2Eclipse使用Maven Eclipse,Hudson的许多插件,...)
我们已经开始将Gradle集成到我们的构建过程中,我可以添加到已经发布的答案中,Gradle也可以正常工作。您的假设大多是正确的,gradle更脱离了袖口,但功能强大,可以在构建本身中进行脚本。似乎大多数事情都可以做到,gradle也做。
现在就您的各个观点:
版本控制: :Gradle支持依赖关系图,版本控制,如果您添加了CI服务器,则可以触发自动化/依赖性构建。例如,我们几乎所有的“可交付成果”都是.wars,但是我们有几个代码libs(.jars)和一个可执行的.jar。一种配置是使战争和“脂肪Jar”取决于共享代码libs。然后,当更新共享的LIB时,会在共享的Libs上碰到版本,测试消费项目,然后使用Hudson发射依赖项目的能力来重新部署这些项目。还有其他方法,但目前似乎对我们有利。
与日食强烈整合: :您是对的,Gradle可以生成Eclipse文件。我们倾向于仅使用Class Path的需求更改,我们倾向于仅使用ECLIPSECP(更新.ClassPath)任务。这有点古怪(抓住您的默认JRE,因此请确保它是正确的,不会添加导出=“ True”(如果需要)),但可以使您达到99%的途径。
在本地项目上启用“现场”和透明的发展: :这是我不确定的。在这种情况下,我只围绕着gradle入侵。通过在消费项目中删除工件,并在Eclipse中标记了共享项目,然后再恢复。
将我的模块版本的所有版本存储在外部服务器上: :简单和许多方法得到了支持,类似于Maven。
就示例而言,Gradle的文档以及完整拉链的示例项目都很好。他们会让您起床并很快运行。
看看蚂蚁常春藤。 http://ant.apache.org/ivy/
没有银子弹,但根据我的经验,Maven是一个很棒的项目管理工具。就个人而言,我喜欢使用Subversion(用于版本控制),Maven(用于项目/构建管理)和Hudson(用于连续构建/集成)的合并。
我发现Maven带来的约定对于上下文切换确实有用,并且非常适合依赖性管理。如果罐子不在存储库中,可能会令人沮丧,但是您可以在本地安装它们,当您准备就绪时,您可以托管自己的私人存储库,从而反映其他地方。我有一个很好的经验,使用了声纳。 http://www.sonatype.com/ 。他们还提供了一本免费书籍,让您入门。
现在看来似乎过于杀伤,但是现在建立一个良好的构建 /测试 /集成 /发布环境,以后将支付股息。它总是很难重新拟合,而且您可以轻松复制。
最后,我碰巧更喜欢Netbeans集成而不是Maven,但这只是我:)