【问题标题】:Using maven overlays in webapp run configuration using IntelliJ?在使用 IntelliJ 的 webapp 运行配置中使用 maven 覆盖?
【发布时间】:2011-11-21 19:10:06
【问题描述】:

我正在开发一个基于木兰的网站。我正在使用 webapp 原型来创建一个新的 Web 应用程序。使用命令行,我可以生成一个 WAR 并将其部署在我的容器(Tomcat)中。然后我运行它,它工作正常。

我的下一步是将我的项目结构导入 IntelliJ。 IntelliJ 认为一切正常,并且能够全部编译。我已经通过先执行 maven clean 测试了这一点,然后让 IntelliJ 完成其余的工作(重建项目)。

最后一步是让它在我的容器中运行。我之前为 Web 应用程序设置了运行配置(它们不使用战争覆盖),它们工作得很好。在这种情况下,我像以前一样设置它并指向我的分解的 webapp 工件。

一旦我运行 tomcat,它就找不到我的 webapp。我发现覆盖层没有被合并到项目的目标目录中(通常是在做 maven 安装时的情况)。然而,IntellJ 在我的项目中创建了一个覆盖目录并在其中解压缩了(覆盖/超级)WAR 文件。

当我自己安装 maven,然后在 IntelliJ 中运行 Tomcat 时,它就可以工作了。这很明显,因为各种需要的文件现在都在我的目标目录中(例如 web.xml :))。

我想要的是: - IntelliJ 知道,当它运行 Tomcat 时,它应该像“mvn install”或“mvn package”那样准备好目标目录。

它的作用: - 它介于两者之间。它确实创建了一个目标目录,并且确实从 webapp 项目中复制了资源。它不覆盖任何 WAR 依赖,因此 webapp 目标目录不完整。

谁有解决这个问题的技巧?

【问题讨论】:

    标签: tomcat maven intellij-idea overlay magnolia


    【解决方案1】:

    我发现在运行配置中选中“运行 maven 目标”复选框,并设置 mvn 包确实可以工作。

    【讨论】:

    • 这是否也允许我“更新课程”?还是我必须重新部署才能看到每一个变化?
    • 当你更新类时,它们将被加载到内存中并且它会工作。但请注意,当您使用多个依赖项时,下次启动容器时,您需要确保容器(即 tomcat)也在查看您最新的依赖项来源。我发现这很麻烦,我必须 mvn clean install 这些依赖项以确保它们在我的本地仓库中的位置。这样 mvn 包目标就会正确地选择它们。
    • @StefanHendriks:感谢您的提示。我有一个类似的问题,我的覆盖定义被 IntelliJ 忽略了。似乎 IntelliJ 在使用自己的内部构建机制构建 web 应用程序时忽略了 maven-war-plugin 的一些配置。告诉它将战争构建委托给 maven 本身意味着整个战争插件配置得到尊重。
    猜你喜欢
    • 2020-12-04
    • 2019-03-14
    • 2016-12-20
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 2020-01-07
    • 2014-10-16
    相关资源
    最近更新 更多