我正在一个小组(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,但这只是我:)

您的一些主题是部署和发布管理的一部分。

您可以查看类似的产品: Xebia部署
(带着 个人版 这是免费的)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top