Java Flat Multi-Project具有快速增量编译和热代码部署 - WTP?日食?理念? Maven的?摇篮?

时间:2014-07-02 12:47:13

标签: java eclipse maven gradle eclipse-wtp

我们有一个相当大的相互依赖的多项目代码库,目前正在使用Java7&使用Eclipse / WTP构建的Groovy&运行Tomcat的Ant 7.基本上你可能会在大多数Java Enterprise软件开发中找到它。多年来我们已经调整了我们的构建过程,但它在Eclipse中相当脆弱,只有Ant的构建工作完美,但速度很慢:

  • 工作区
    • 共同
    • common-web(取决于来源)
    • web1(取决于common-web,common)
    • web2(取决于common-web,common)
    • web3(取决于common-web,common)
    • cli-app1(取决于常见)
    • cli-app2(取决于常见)

我们过去只使用Ant构建,创建common.jar,common-web.jar等并复制到webN / WebContent / WEB-INF / lib中。这种方法很有效,但速度很慢,无法进行热代码替换和增量编译(至少对于常见的更改*)。

现在,我们让Eclipse / WTP编译和组装静态资源。在Deployment Assembly中将公共和公共Web项目添加为虚拟jar,以防止创建jar所花费的时间。 Ant仍然会对动态资源进行一些模板化和复制,并将所有外部jar复制到WEB-INF / lib中(与Eclipse / Web App Libraries相比,这是由Ant完成的,所以我们只需要在一个地方维护我们的jar列表,build.xml,而不是必须为Eclipse中的每个项目单独维护它们以及生成版本的build.xml。 Ant完成后,它会自动刷新WEB-INF / lib和WEB-INF / classes文件夹,以便Eclipse / WTP知道更新的文件。

对于服务器上的生产部署,我们只需让Ant处理编译和组装。

我们让Eclipse / WTP处理自动增量构建和发布到Tomcat进行开发的策略已经将2+分钟的Ant编译时间缩短到几乎瞬间,并允许热代码替换常见的*类。但是,这种设置非常脆弱,因为没有Eclipse知识的文件系统上的任何文件更改都会破坏构建。这也意味着我们的项目设置很复杂,因此需要进行检查,这当然意味着当同事不小心检查当地的变化时,它会经常中断。

必须有更好的方法让平面多模块项目在IDE中无缝工作

我已经研究过maven和gradle但是他们都承认,当谈到平面多模块设置时,它们只是不起作用(或者它们是什么?)。由于多个顶级项目需要相同的子模块,因此无法进行嵌套。是的,您可以将根pom.xml或gradle.settings放在项目上方的文件夹中,但这不允许Intellij或Eclipse进行无缝的构建/依赖管理,因为此文件夹不可见。

不幸的是,我遇到的所有教程和示例都涉及业余爱好项目大小设置。从来没有一个真正的企业例子,有几个耳/战和共享项目。

我们很乐意更改构建工具甚至IDE,如果有一个工具链可以实际处理无缝编译和组装而无需离开IDE并且速度很快。

基本上,我们所追求的是“简单”:

  • 自动依赖关系管理
  • 开发期间的快速,增量编译
  • 热码替换(WTP / JRebel样式)

那么,你能帮忙吗?

1 个答案:

答案 0 :(得分:0)

在gradle中,您可以在每个模块中使用不同的settings.gradle,例如:在web1中,添加settings.gradle,其中包含:

include ':common'
project(':common').projectDir = "../common" as File
include ':common-web'
project(':common-web').projectDir = "../common-web" as File

然后你可以在build.gradle中添加依赖项,如:

 compile project(':common')
 compile project(':common-web')

gradle可以帮到你:

  • 自动依赖关系管理
  • 在开发期间进行增量编译,但在我的经历中它比ant慢得多
  • gradle有Jrebel插件,可以帮助Hot-Code替换。
与maven相比,Gradle非常灵活且易于管理,但与maven相比,它更慢并且有更多的bug,因为它更年轻。