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

时间:2015-07-29 16:07:06

标签: java maven tomcat web-applications intellij-idea

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

现在我去Run - >使用以下设置enter image description here

编辑配置并创建新的本地Tomcat服务器

在部署选项卡中,我添加了在我的图片中看到的Before Before启动中构建的工件。很简单。

但是,每当我通过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文件,将其放入部署配置中。我觉得这更像是一个黑客攻击,因为我仍然通过命令行执行它,如果我没有它已经构建,我不能将目标设置为查找war文件的目录。

感谢任何帮助。

7 个答案:

答案 0 :(得分:28)

您可以采取的措施清单,以验证出现问题的地方:

1)使用Build>手动构建工件。构建工件。

2)验证工件是否在预期的输出目录中(out / artifacts / xxx)。

3)如果没有,请转到文件>项目结构>工件

4)选择有问题的工件文件(本例中为project_name)。

5)验证输出目录是否正确。也可以尝试自己创建这个目录,以防IntelliJ没有这样做(虽然这会让我感到惊讶)

6)验证内容是否正确。

7)可选择检查" Build on make"在运行服务器时始终部署最新版本的代码。

请注意,要将WAR文件部署到Tomcat,您应该更喜欢使用爆炸的WAR。这使得部署/测试/调试速度明显加快。

答案 1 :(得分:7)

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

答案 2 :(得分:3)

我遇到这个问题,原因是在Project Structure中,Artifacts的Output目录并不存在:

enter image description here

<强>解决方案:

  1. 转到项目结构:
  2. File -> Project Structure

    1. 然后单击目录按钮
    2. enter image description here

      1. 根据输出目录显示:
      2. 逐个创建目录

        enter image description here

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

答案 3 :(得分:1)

我遇到了同样的问题,上述解决方案都没有解决问题。在此处分享以防其他人遇到相同的问题。

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

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

  1. 删除现有的“war”文件(project Structure -> artifacts -> )然后选择“war”文件并删除它。

  2. 使缓存无效

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

  4. 然后从“Build”菜单手动构建创建的“exploded war”文件。

答案 6 :(得分:-1)

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

ProjectName/target/