【问题标题】:Intellij maven war project with module dependencies, how to deploy only what is needed?Intellij maven war项目与模块依赖,如何只部署需要的?
【发布时间】:2013-02-28 09:51:06
【问题描述】:

我目前的项目包括:

  • 父 maven pom 声明项目的每个模块和公共依赖项
  • 每个功能有一个子模块(例如实体审计、导出...),其中一个是依赖于其他几个模块的战争模块。注意:依赖项可能包含战争使用的资产(例如 html 模板、配置文件...),因此在重新部署时也可能需要刷新战争上下文。

我可以构建项目并使用 tomcat 部署战争的爆炸版本。这场战争正确地包含了其WEB-INF/lib文件夹中的每个依赖项。现在,如果我在 IntelliJ 中修改这些依赖项之一,我希望能够仅将此模块部署到爆炸战争中,我该怎么做?目前我是 maven package 依赖并在 tomcat 实例上重新部署...

【问题讨论】:

  • 您可以尝试在 IDEA 中创建一个新的分解工件,它将您需要的所有内容打包到一个应用程序中,并将使用模块编译器输出,以便您可以hotswap the changes without redeployment
  • 其实我现在有一个爆炸的神器,里面有我的战争。但是我怎样才能分解依赖项(目前是 WEB-INF/lib 中的 JAR)并让 IntelliJ 能够在我更改时部署其中的任何一个?
  • 如果这些 jars 是从您的模块构建的,您可以配置模块依赖项并包含模块编译器输出,这样将使用 .class 文件而不是 .jar。我不认为你可以热插拔罐子。
  • 我该怎么做呢?

标签: maven tomcat intellij-idea


【解决方案1】:

看来您正在尝试做的是某种热部署。您有几种解决方案,它们与 IntelliJ 没有直接关系,但通常与 Java 应用程序有关:

  • 在调试模式下,JVM 只允许您在更改方法主体时hotswap classes
  • 如果你想支持类/方法/字段添加/删除等,你应该看看JRebel,它还支持重新加载大量框架配置

开箱即用的热交换非常有限,所以如果您不打算购买/使用专用工具进行热部署,我担心没有令人满意的解决方案可以解决您的问题。

【讨论】:

  • IntelliJ 热插拔成功。只有当我想更新其中一个依赖项(打包在 JAR 中)时,它才不再能够更新。
  • 我也有多模块 maven 项目,当我在位于依赖项中的 Java 类中进行修改时,当我 make IntelliJ 中的项目(不使用 maven)时,热交换按预期工作。但是,如果您想重新加载假设位于依赖项中的静态内容(xml 文件、图像、JS 等),那么默认情况下是不可能的。不过,JRebel 允许这样做。我不确定这是否是您要找的。​​span>
猜你喜欢
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-27
相关资源
最近更新 更多