使用 Intellij 构建战争并部署到 Tomcat

我的基本工作流程位于基目录的终端中。这将创建一个包含 WAR 文件的目标目录。我将该战争文件复制到我的Tomcat的webapps目录中。mvn clean install

如果我进行更改,我显然必须重复繁琐的过程。我正在使用Intellij Ultimate 13.1.6,我知道可以根据本指南通过IDE完成所有这些操作

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

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

现在我转到运行 -->编辑配置并使用以下设置创建新的本地 Tomcat 服务器enter image description here

在“部署”选项卡中,我添加了在我的“启动之前”中构建的项目,如我的图片所示。非常简单。

但是,每当我通过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目录。

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

任何帮助是值得赞赏的。


答案 1

您可以采取哪些措施来验证问题所在位置的清单:

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

请注意,要将 WAR 文件部署到 Tomcat,您应该优先使用分解的 WAR。这使得部署/测试/调试明显更快。


答案 2

当我尝试使用 Run 启动应用时,我遇到了此错误。问题在于,由于某种原因,即使在选择“生成>生成工件”之后,也没有部署 WAR 文件。解决方案:我关闭了Idea,然后重新导入了该项目,并选择作为神器战争爆炸。这一次,部署工作正常。


推荐