使用 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的主要内容,如果未能解决你的问题,请参考以下文章
无法使用Deploy to container Plugin从jenkins在tomcat上部署war
无法使用部署到容器插件从 jenkins 部署对 Tomcat 的战争
使用IntelliJ IDEA和Maven构建Java web项目并打包部署