【问题标题】:multimodule maven gwt project - dependency resolution in hosted mode problem多模块 maven gwt 项目 - 托管模式下的依赖解析问题
【发布时间】:2011-09-28 12:45:45
【问题描述】:

最近我将我的 GWT 2.4 应用程序拆分为两个 maven 模块:domainwebapp。域模块(根据其名称)包含域类,webapp 包含所有其他与 GWT 相关的东西。 Webapp 依赖于

一切都与此处描述的几乎相同: http://mojo.codehaus.org/gwt-maven-plugin/user-guide/multiproject.html

当我运行时(从反应器):

mvn clean package

maven 适当地构建应用程序 WAR:首先它编译 domain,然后是 webapp,然后创建可以部署在 tomcat 上并且可以正常工作的 war 文件。 但是,如果我尝试在托管模式下运行应用程序:

mvn gwt:run

maven 尝试在我的本地存储库和远程存储库中解析对 domain 模块的依赖。由于我已从本地存储库中删除它,因此 maven 找不到它并且构建(托管模式)失败。当然,我可以先将 domain 模块安装到我的本地 repo 中,但对我来说这听起来像是一种肮脏的解决方法。 Domain 已从本地 maven 存储库中删除,以确保托管模式使用取自本地 repo 的旧(过时)版本运行,而不是使用以前构建的 domain 神器。

如果 domain 模块安装在我的本地存储库中,则在 mvn clean package 完成后,webapp 目标目录包含最新版本的 domain 爆炸 WAR强> JAR。当我运行gwt:run 时,新版本的域工件(在目标中)被替换为从本地存储库中获取的过时版本(我可以看到更改)!

这怎么可能?它是gwt maven插件中的错误吗?有什么办法可以避免这种奇怪的插件行为?

【问题讨论】:

  • 这不就是 Maven 的工作原理吗?除非您使用 reactor 模块,否则您必须在本地 repo 中安装依赖项。
  • @Thomas 但如果我创建 GWT WAR 包,我希望 gwt:run 中的 maven 插件使用此包中包含的库(它们的最新版本),而不是从存储库中获取它们(因为 'mvn package' 不安装它们,repo 版本可能已过时)。我不是说从 webapp WAR 中检索域库,而只是为了使用新构建的域包。对我来说这听起来很合理,但也许我错了。
  • 如果我可以告诉 Maven 在子模块上运行目标但使用来自“兄弟”子模块的依赖项而不是从存储库中解析它们,我会很高兴。不幸的是,我还没有找到怎么做,我高度怀疑这是不可能的,人们整天都在做mvn installs。
  • 感谢您的帮助。也许这正是你描述的方式。从一个角度来看这是有道理的,但从另一个角度来看,使用最新的依赖项而不是安装在 repo 中会很棒。我认为这完全取决于 GWT 插件是如何实现的——尤其是 webapp 不需要在 gwt:run 之前安装。如果 gwt:run 必须组装战争以将其部署在码头上,为什么它不使用先前组装的战争(按包目标)而不是组装新的战争(具有来自 repo 的过时域依赖),或者将其组装在同一个作为“包”的方式......

标签: gwt maven build


【解决方案1】:

这可能是您的解决方案吗? http://mojo.codehaus.org/gwt-maven-plugin/user-guide/productivity.html 对我来说它有效。我也有不同的模块。在链接的帮助下,我可以在域模块中进行更改并简单地重新启动托管模式。但不适用于所有更改。

【讨论】:

    猜你喜欢
    • 2012-11-29
    • 2011-10-14
    • 1970-01-01
    • 2019-08-21
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    相关资源
    最近更新 更多