关于良好的Java构建工具的建议,与eclipse很好地集成

时间:2010-07-06 13:05:57

标签: java eclipse maven-2 ivy gradle

我在一个小团队(3人)的几个模块(目前大约10个)上工作。构建版本的编译,集成和管理变得越来越乏味。 我正在寻找一个好的构建/集成工具来替换/完成Ant。

以下是我们当前开发环境的描述:   - 几个模块取决于每个第三方JAR   - 有些可能会导出JARS,某些导出WARS,某些导出独立,可运行的JARS(使用Fat-Jar)   - 所有人的Javadoc   - 我们使用eclipse   - 每个模块的自定义Ant脚本。 eclipse配置和Ant脚本之间的许多冗余信息。例如,对于独立的Fat-JAR,我们列出了所有的递归依赖关系,而理想情况下,它可以清楚地从eclipse配置中导入。   - 源代码使用SVN

进行版本控制

以下是我想要的完美集成工具:

  • 自动化模块的发布和版本控制。理想情况下,集成工具应检测是否需要新版本。例如,如果我想要发布依赖于项目B的项目A,并且如果我在本地对项目B进行了小的更改,那么集成工具应该首先发布新版本的B并根据它

  • 与eclipse强烈集成,以便它可以从其配置中获取模块和第三方库之间的依赖关系。顺便说一下,我想继续用eclipse配置构建路径而不更新其他一些“.xml”的东西。我看到Gradle可以从其配置中生成eclipse项目文件,但是对应的文件很棒。

  • 在本地项目上启用“实时”透明开发。我的意思是我经常在开发主要/“叶子”项目时对核心/公共项目进行小的更改。我希望对核心项目的更改立即可用于项目,而无需发布(甚至本地)我的核心项目的JAR。

  • 将我的模块的所有版本都存储在外部服务器上。最简单的(共享文件夹/ Webdav)将是最好的。一个包含模块列表和交付工件的漂亮网页也很棒。

我环顾四周寻找很多东西。从Ant4eclipse(将Eclipse配置集成到我的Ant脚本中)到Maven / Ivy / Gradle工具。

我有点困惑。 这是我到目前为止所理解的:   - Maven是一个伟大的/大工具,但有点僵硬,迫使你屈服于它的结构和概念。它基于描述而不是脚本。如果你走出这条道路,你必须开发自己的插件。 - 常春藤不如maven强大,它处理的东西少,但更灵活。 - Gradle介于两者之间。这是通用的。它支持脚本以及“基于约定”的配置。它集成了Ant并扩展了它。

所以在这一点上,我正在寻找真实用户的实际推荐。 你用什么工具?怎么样 ?你有和我一样的需求吗? 它是否会缓解你的生活或妨碍你的生活?

是否有一些用例或工作区框架的示例,我可以将其作为起点来查看这些工具的功能?

抱歉此消息的长度。 并提前感谢您的建议。

亲切的问候,

圣拉斐尔

6 个答案:

答案 0 :(得分:2)

CI工具?对我来说,只有一个:the Hudson CI


我已经为Java设置了一次软件开发环境,其中包含以下组件:

  • eclipse IDE
  • 水银
  • 的bugzilla
  • 行家
  • 的Nexus
  • Hudson CI

和一些apache,mysql,php,perl,python,..进行集成。

hudson没有与eclipse集成,这是故意的,因为我想在一个单独的服务器上构建。对于所有其他工具,我有一个完美的交叉集成(比如:myclipse on eclipse与bugzilla交谈,m2eclipse使用maven eclipse,很多插件用于哈德森,......)

答案 1 :(得分:2)

  

自动化模块的发布和版本控制(...)

版本控制和存储库的概念是内置的Maven,它们可以适合这里。

Maven支持SNAPSHOT dependencies。使用快照时,Maven会在您运行构建时定期尝试从存储库下载最新的可用快照。 SNAPSHOT通常在项目处于活动开发阶段时使用。

Maven 2还支持version ranges(我不推荐它们,但这是另一个故事),例如,允许配置A依赖于B的版本[4.0,)(任何大于或等于的版本) 4.0)。如果您构建并发布新版本的B,A将使用它。

  

与eclipse强烈整合

m2eclipse插件提供与Eclipse的双向同步。

  

在本地项目上启用“实时”和透明的开发。

m2eclipse插件支持“工作空间分辨率”:如果项目A依赖于项目B,如果项目B在工作空间中,您可以配置A依赖于B源而不是B.jar(如果我是默认模式) “没错。”因此,B源的更改将直接可见,而无需构建B.jar。

  

将我的模块的所有版本都存储在外部服务器上。

如前所述,这实际上是Maven的核心概念(您甚至没有选择),并且通过file://或dav://进行部署都受支持。


总而言之,Maven(可能)不是唯一的候选人,但我确信它适合:

  • 你的项目不是那种异国情调或复杂的,你的描述没有什么可怕的(可能需要对结构进行一些重构,但这不应该是一个大问题。)
  • Maven还带来了基于最佳实践的工作流程。
  • m2eclipse提供与IDE的强大集成。

但Maven有一些学习曲线。

答案 2 :(得分:2)

我们已经开始将Gradle集成到我们的构建过程中,我可以添加已发布的答案,Gradle也可以使用。你的假设大多是正确的,gradle更多的是袖口,但功能强大,允许脚本等在构建本身。似乎maven可以做的大多数事情,gradle也是如此。

现在为您的个人观点:

版本控制:gradle支持依赖关系图,版本控制,如果添加CI服务器,则可以触发自动/依赖版本。例如,我们几乎所有的'可交付成果'都是.wars,但我们在开发中有几个代码库(.jars)和一个可执行文件.jar。一种配置是使战争和“胖子”依赖于共享代码库。然后,当更新共享库时,使用共享库中的版本,测试消耗项目,然后使用Hudson启动依赖项目的能力来重新部署它们。还有其他方法,但这对我们来说似乎最有效。

与eclipse强烈整合:你说得对,gradle可以生成eclipse文件。一旦我们开始,我们倾向于仅使用eclipseCp(更新.classpath)任务,因为只有类路径需要更改。它有点古怪(抓住你的默认JRE,所以确保它是正确的,如果你需要它不会添加exports =“true”),但是你可以获得99%的优势。

在本地项目上启用“实时”和透明的开发:这是我不确定的。在这种情况下我只是围着gradle攻击;删除耗材项目中的工件并在eclipse中标记共享项目,然后再恢复。

将我的模块的所有版本都存储在外部服务器上:简单且支持许多方法,类似于Maven。

就示例而言,gradle的文档很好,以及带有完整zip的示例项目。它们会让你快速上手并运行。

答案 3 :(得分:1)

看看Ant Ivy。 http://ant.apache.org/ivy/

答案 4 :(得分:1)

没有银子弹,但根据我的经验,Maven是一个很棒的项目管理工具。就个人而言,我喜欢使用subversion(用于版本控制),maven(用于项目/构建管理)和hudson(用于连续构建/集成)的组合。

我发现maven带来的约定对于上下文切换非常有用,对于依赖管理非常有用。如果罐子不在存储库中,可能会令人沮丧,但您可以在本地安装它们,当您准备就绪时,您可以托管自己的私有存储库,这可以反映其他地方。我通过http://www.sonatype.com/使用sonar.nexus获得了很好的经验。他们还提供了一本优秀的免费书籍来帮助您入门。

现在看起来似乎有些过分,但现在建立一个良好的构建/测试/集成/发布环境,以后会产生分红。它经常难以改装,而且你可以轻松复制。

最后,我碰巧更喜欢Netbeans整合maven,但那只是我:)

答案 5 :(得分:0)

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

您可以查看以下产品: Xebia DeployIt
personal edition是免费的)