2011-03-23 99 views
4

假设您正在开发一个在某个应用程序服务器上运行的大项目(比如Tomcat,但也可能是Jboss或Jetty或其他)。该项目由几次战争组成,而每场战争都包含大量的罐子。整个事情是使用Maven构建的,需要花费大量的时间来构建它。使用Maven查找并替换一个jar文件

现在,假设开发人员只在一个生成一个小罐子的模块中进行更改。要继续工作并测试更改,开发人员需要在相关战争中替换此jar并重新启动服务器(有时重新部署战争就足够了)。重建整个应用程序要快得多。我见过很多开发者(包括我自己)为这个任务创建shell脚本。

但是,它可能会更好,如果它可以使用maven自动完成。比方说,运行“mvn install”时,插件也会进入一些预定义的位置(例如$ {tomcat}/webapps)并搜索myjar.jar的所有外观并将其替换为新版本(我们有多个jar,请记住? )

有没有人知道这样的插件?或者可能是关于其他一些可以完成相同任务的工具?或者更好的想法如何做到这一点?

更新:顺便说一句,如果我找不到解决方案,我可能会自己实现它。所以,如果你有兴趣,请让我知道。我需要一些beta测试者:)

更新:所以我自己创建了插件。请参阅http://code.google.com/p/replace-file-plugin/任何反馈意见。

+0

看起来像一个非常危险和不可靠的方法。对应用程序内部的一个库进行热替换是违反所有测试原则的(尤其是回归测试) – yegor256 2011-03-24 13:22:34

+0

我不是在谈论测试环境,而是在谈论开发环境。这与哈德森增量构建非常相似 - 它不是取代整晚的构建,而是提供快速反馈。 – Tarlog 2011-03-24 17:27:49

+0

我同意yegor256这不是一个非常可靠的方法,但它听起来像一个单一的壳给我,例如。 G。在'bash'中使用'find'。 – 2011-03-26 12:19:37

回答

0

如果您可以将脚本编写为Ant版本,则可以使用Maven Antrun plugin将Ant构建嵌入到构建生命周期中。

+0

我需要将antrun添加到每个模块的问题,我无法继承它。 – Tarlog 2011-03-23 20:04:11

+0

另外AFAIK ant不包含“查找和替换”目标。尽管实现它并不难。 – Tarlog 2011-03-23 20:05:58

+1

如果你打算实现这个,我认为最好是将它作为Mojo来实现。 – deluan 2011-03-23 20:08:43

2

结账JRebel。它很好,减少了开发/部署时间。有30天免费试用,所以免费试用。我购买了我自己的许可证,这让我的公司花了几个星期的时间来批准购买它,我已经等不及了。

有趣的人,它岩石。阅读它,它可以做你想做的。

+0

10倍,我会检查它,不知道我会得到一个许可证的预算...... :( – Tarlog 2011-03-27 13:05:55

+0

是的,就像我说我购买了我自己的许可证$ 60块钱。如果你花时间搞清楚如何正确配置它,它可以对你所有的项目进行热切换。 – Andy 2011-03-28 14:49:38

0

让我们把范围缩小到唯一的战争文件,我想你可以自己将这个范围扩展到你的场景,而不会有任何问题。

你可以尝试这个选项:创建一个快速运行的最终汇编模块,并将所有依赖模块合并到一个war文件中。然后,如果您最初为整个构建执行mvn clean package install,则必须mvn clean package安装更改后的dependee模块,并重新运行最终装配模块以快速获取更新后的战争。这是一个非常有状态的构建方案(因此容易出错),但是在熟悉这种方法来改变传播之后,您可能会认为这是最简单的方法,可能会起作用,而且工作更快。

相关问题