Java Maven+;Tomcat加速度

Java Maven+;Tomcat加速度,java,performance,tomcat,maven-2,Java,Performance,Tomcat,Maven 2,我正在EclipseIDE中使用Maven编写一个web应用程序,并使用TomcatServlet容器 所以,我像这样运行Maven:mvn clean compile。这是合理的,在此操作之后,我必须重新运行Tomcat,以便它可以重新初始化上下文(Sysdeo Tomcat launcher帮助很大) 问题是Maven的执行和后续Tomcat的重新运行每次都需要相当长的时间(比如Maven需要10多秒,Tomcat需要20多秒,这是因为日志记录、O/R映射等等) 对于这些操作,是否有任何自动

我正在EclipseIDE中使用Maven编写一个web应用程序,并使用TomcatServlet容器

所以,我像这样运行Maven:
mvn clean compile
。这是合理的,在此操作之后,我必须重新运行Tomcat,以便它可以重新初始化上下文(Sysdeo Tomcat launcher帮助很大)

问题是Maven的执行和后续Tomcat的重新运行每次都需要相当长的时间(比如Maven需要10多秒,Tomcat需要20多秒,这是因为日志记录、O/R映射等等)


对于这些操作,是否有任何自动化和更快的解决方案?在我看来,更好的解决方案是只将重新编译的类移动到目标目录。

Maven做两件事:依赖处理和构建管理。我通常觉得Maven的依赖关系管理是一个浪费时间的大麻烦,我通常不需要,所以我用ant进行构建管理

以手动调整构建文件的代价,ant可以让您很好地控制哪些文件何时去哪里。如果您将新编译的类复制到
WEB-INF/classes
目录,并点击
WEB.xml
触发重新加载,则无需停止并重新启动Tomcat。这使我的编译/重新加载时间减少到大约1秒

这是我喜欢的工作方式。一些马文迷会强烈反对


编辑:也就是说,还有另一种方法允许我完全回避构建问题:我在Eclipse中使用JavaEE开发人员版本中包含的WTP功能进行开发。当我更改代码时,只需按Ctrl-S保存更改的文件,Eclipse就会自动将新编译的类复制到正在运行的Tomcat中,这样我就可以立即刷新浏览器并看到新更改的Web应用正在运行。由于Eclipse的增量编译,该方法在编辑/运行周期时间方面可能是无与伦比的。当然,如果你真的需要Maven,那么这不是一个替代方案

对于这些操作,是否有任何自动化和更快的解决方案?在我看来,更好的解决方案是只将重新编译的类移动到目标目录

那么,问题是为什么每次都要运行
clean
?进行增量编译已经可以大大加快速度


更新:我同意@Carl关于EclipseWTP的看法,它为Tomcat提供了非常好的支持(我现在真的看不到Sysdeo插件的附加值)。使用EclipseWTP进行开发并在提交更改之前运行Maven以检查您是否破坏了连续构建是一个非常典型的工作流。和(Maven和Eclipse集成的两个备选方案)都支持WTP,也就是说,可以将您的项目识别为动态项目,而不是在服务器上运行

Maven tomcat插件可以帮助您,您只需执行“mvn tomcat:redeploy”,Maven编译源代码,打包并将其部署到您配置的tomcat中,有关更多信息,请参阅。

您可能想看一看。它在运行的tomcat中重新加载您的类,因此您的更改几乎是即时的。我并没有太多地使用它,但它似乎得到了很好的评价。

最终,我通过使用名为“自动构建”(Project)的Eclipse功能解决了这个问题→ 自动生成复选框)。

每次保存资源时,Eclipse都会对其进行编译,并将
.class
文件移动到输出文件夹。

荒谬的尝试:)Maven不会比Ant更强迫您重新启动任何东西。呵呵,我想知道您何时会出现!你被马文的主张所吸引,就像熊被蜂蜜吸引一样;)“试探性的?”我怀疑这个词的意思和你想的不完全一样!假朋友。我的意思是“尝试”,用法语是试探性的。学到了一些新东西,谢谢。顺便说一下,WTP的+1。典型的开发工作流是在Eclipse下使用WTP(Maven支持Maven Eclipse插件或m2eclipse),并在提交之前运行Maven(以验证更改不会破坏连续构建).我刚刚创建了名为
tomcat Maven plugin
的Maven插件,它似乎可以很容易地将自动化引入项目,从而省去手动重新运行。请澄清您试图实现的目标。你想使用sysdeo插件吗?你能接受Maven的Tomcat吗?你对Tomcat的替代品满意吗(Maven Jetty插件规则,Jetty比Tomcat快)。我已经在使用Sysdeo插件了。但我必须首先停止Tomcat,然后运行Maven,直到它完成,然后再次启动Tomcat。所以,可以从Maven运行Tomcat,所以我不需要手动重新启动它。Jetty不适用于我的情况。关于
clean
的优点很好,这可能会浪费大量的重新编译时间。同意,在这种情况下使用
clean
是一种轻率的做法。谢谢。或者只需安装Glassfish v3,您就不需要JRebel:)JRebel就像广告中宣传的那样工作。它可以消除您花费在重新打包和重新部署上的所有时间。任何开发商店都必须具备