使用 Intellij 构建 War 并部署到 Tomcat

Using Intellij to Build War and Deploy to Tomcat

我的基本工作流程在我的基本目录中的终端 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 与 baseDir/target),我将所有内容都保留为默认值并点击确定。

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

然后在“部署”选项卡中,我添加了在启动前构建的工件,如我的图片所示。非常直接ward.

但是,每当我 运行 通过 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 文件。

感谢任何帮助。

您可以执行的检查清单,以验证哪里出了问题:

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

请注意,要将 WAR 文件部署到 Tomcat,您应该更喜欢使用展开的 WAR。这使得 deploying/testing/debugging 明显更快。

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

我得到这个问题,原因是在项目结构中,工件的输出目录并不真正存在:


解法:

  1. 转到项目结构:

File -> Project Structure

  1. 然后点击目录按钮

  1. 您根据输出目录显示一一创建目录:

  1. 然后重新启动您的项目。

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

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

ProjectName/target/

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

我的 Tomcat 服务器被配置为 运行 18099 而不是 1099 上的 JMX 端口。因此,自从 IntelliJ Tomcat 默认配置为1099.

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

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

我在 tomacat 9 中也遇到了同样的问题。似乎 intellij 不会自动创建“out”文件夹(或者在我的情况下它没有创建它)。所以我构建了“War exploded”而不是“war”文件,这对 me.follow 以下步骤有效:

  1. 删除现有的“war”文件(项目结构 -> 工件 ->)然后 select“war”文件并将其删除。

  2. 使缓存无效

  3. 然后创建一个“war exploded”文件(project Structure -> artifacts -> "+" sign(Add) -> Web Application: Exploded -> From modules(select 你的模块)).

  4. 然后从“构建”菜单中手动构建创建的“分解 war”文件。