使用 Intellij 构建 War 并部署到 Tomcat

Posted

技术标签:

【中文标题】使用 Intellij 构建 War 并部署到 Tomcat【英文标题】:Using Intellij to Build War and Deploy to Tomcat 【发布时间】:2015-10-20 17:51:18 【问题描述】:

我的基本工作流程在我的基本目录上的终端 mvn clean install 中。这将创建一个带有 WAR 文件的目标目录。我将该 war 文件复制到我的 Tomcat 的 webapps 目录中。

如果我做出改变,我显然必须重复这个乏味的过程。我正在使用 Intellij Ultimate 13.1.6,我知道可以通过基于 this guide 的 IDE 完成所有这些工作。

所以在开始之前,我在我的基础上运行mvn clean,这会删除目标目录。

现在开始我进入项目结构 --> 工件并创建一个新的 Web 应用程序:存档。我将它命名为 project_name,默认情况下它有一个不同的输出目录(baseDir/out/artifacts/project_name vs baseDir/target),我将所有内容都保留为默认值并点击确定。

现在我去运行 --> 编辑配置并使用以下设置创建一个新的本地 Tomcat 服务器

在“部署”选项卡中,我添加了在我的“启动前”中构建的工件,如图所示。很简单。

但是,每当我通过 Intellij 运行服务器时,它都会成功启动,但没有部署任何内容。我得到了错误:

Artifact project_name: com.intellij.javaee.oss.admin.jmx.JmxAdminException: com.intellij.execution.ExecutionException: /Users/path/to/workspace/project_name/out/artifacts/project_name/project_name.war not found for the web module.

然后我仔细检查了我的目录,如错误所示,没有创建任何内容。连 out 目录都没有。

我做错了什么?我知道一种解决方法是返回终端,运行 mvn clean install 并使用创建的 .war 文件将其放入部署配置中。我觉得这更像是一种 hack,因为我仍在通过命令行进行操作,如果我还没有构建它,我无法将目标设置为目录来查找 war 文件。

感谢任何帮助。

【问题讨论】:

神秘地,war 不起作用。但是war-exploded 会起作用。 这里有一个有效的答案:***.com/a/67078989/10499624 【参考方案1】:

您可以做的事情清单来验证哪里出了问题:

    使用“构建”>“构建工件”手动构建工件。 验证工件是否在预期的输出目录 (out/artifacts/xxx) 中。 如果没有,请转到文件 > 项目结构 > 工件 选择有问题的工件文件(在本例中为 project_name)。 验证输出目录是否正确。可以选择尝试自己创建这个目录,以防 IntelliJ 不这样做(尽管这会让我感到惊讶) 验证内容是否正确。 (可选)选中“Build on make”以在运行服务器时始终部署最新版本的代码。

请注意,要将 WAR 文件部署到 Tomcat,您应该更喜欢使用分解后的 WAR。这大大加快了部署/测试/调试的速度。

【讨论】:

第 5 步对我来说至关重要。我必须自己手动创建输出目录。否则构建只是默默地失败 在我的情况下,在 2º 步骤中,我选择了“目标”文件夹.. 项目构建正确。【参考方案2】:

当我尝试使用 Run 启动应用程序时出现此错误。问题是由于某种原因,即使在选择 Build->Build Artifacts 之后也没有部署 WAR 文件。 解决方案:我关闭了 Idea,然后重新导入项目并选择作为工件 war-exploded。这次部署成功了。

【讨论】:

这确实对我有用,并且发生的方式完全相同,每件事都是正确的,但是当我重新导入项目时,部署不起作用,一切都很完美。只是为了提供更多信息,我使用了 IntelliJ 版本 2018.2,以防万一其他人有这个问题。感谢 vovahost!【参考方案3】:

我得到这个问题,原因是在项目结构中,Artifacts'Output 目录并不存在:


解决方案:

    转到项目结构:

File -> Project Structure

    然后点击目录按钮

    你根据Output目录一一创建目录显示:

    然后重新启动您的项目。

【讨论】:

为我工作。我只是指向target 目录。在这种情况下,Idea 确实应该更具体地显示其错误消息。或者自动创建工件指向的目录。尝试在 Idea 中运行新的 Spring 项目时,总是浪费大约 30 分钟【参考方案4】:

我遇到了同样的问题,以上解决方案都没有解决问题。在这里分享它以防其他人遇到同样的问题。

在我的例子中,Tomcat 服务器被配置为在 18099 而不是 1099 上运行 JMX 端口。因此,由于 IntelliJ Tomcat 配置中使用的 JMX 端口默认为 1099,因此从未部署该工件。

将其更改为 18099 或删除该特定 Tomcat 配置解决了该问题。

底线:如果要部署工件,请确保 IntelliJ 中配置的 JMX 端口与 Tomcat 服务器实际使用的 JMX 端口匹配。

【讨论】:

【参考方案5】:

检查输出目录路径。请注意,在路径中使用 ~ 将不起作用。

【讨论】:

【参考方案6】:

我在 tomacat 9 中也遇到了同样的问题。似乎intellij不会自动创建“out”文件夹(或者在我的情况下它没有创建它)。所以我建立了“战争爆炸”而不是“战争”文件,这对我有用。按照以下步骤操作:

    删除现有的“war”文件(项目结构 -> artifacts ->)然后选择“war”文件并将其删除。

    缓存无效

    然后创建一个“战争爆炸”文件(项目结构->工件->“+”号(添加)-> Web应用程序:爆炸->从模块(选择您的模块))。

    然后从“构建”菜单手动构建创建的“爆炸战争”文件。

【讨论】:

【参考方案7】:

我尝试了上述解决方案,但是当我将它部署到 tomcat 服务器时,WAR 文件不起作用。而不是上述解决方案,只需在终端窗口中输入mvn clean,然后输入mvn install。您的 WAR 文件现在位于

ProjectName/target/

【讨论】:

以上是关于使用 Intellij 构建 War 并部署到 Tomcat的主要内容,如果未能解决你的问题,请参考以下文章

text IntelliJ IDEA社区版构建WAR

无法使用Deploy to container Plugin从jenkins在tomcat上部署war

无法使用部署到容器插件从 jenkins 部署对 Tomcat 的战争

使用IntelliJ IDEA和Maven构建Java web项目并打包部署

IntelliJ IDEA2017 + Tomcat 设置热部署

IntelliJ IDEA SpringBoot 使用第三方Tomcat以及部署