Idea 中的 Tomcat。战争爆发:服务器未连接。部署不可用
Posted
技术标签:
【中文标题】Idea 中的 Tomcat。战争爆发:服务器未连接。部署不可用【英文标题】:Tomcat in Idea. war exploded: Server is not connected. Deploy is not available 【发布时间】:2013-12-08 10:59:09 【问题描述】:我正在尝试这个tutoial。我创建了新项目并运行它。
TomCat 启动,但随后什么也没有发生。我可以在浏览器中手动打开 http://localhost:8080
并查看 TomCat 主页。这意味着可以启动服务器。但是我无法打开 index.jsp。这是我启动后的屏幕:
screenshot
如您所见,项目正在运行,但没有关于传递的环境变量的信息。
没有日志。
我使用的是 TomCat 7.0.27
想法 12.1.6
在 Opensuse 12.2 上
我的tomcat HOME文件夹是/usr/share/tomcat
有一个问题:
Idea 无法将 conf 文件从 /usr/share/tomcat/conf 复制到 /home/loco/.IntelliJIdea12/system/tomcat//conf。
我在/usr/share/tomcat and the problem gone.
中执行了chmod 777 *
我还改变了 TomCat 的启动方式。 这是默认值
/usr/share/tomcat/bin/catalina.sh run
我改成
/usr/share/tomcat/bin/catalina.sh start
其他步骤均按照教程完成。
【问题讨论】:
我在 intellij idea 上也遇到了同样的问题,并且在更改为 tomcat_8.5(来自 tomcat_9)后得到了解决。还不知道原因 【参考方案1】:当 tomcat 启动脚本集中的脚本(最常见的是 setenv.sh
/ setenv.bat
)覆盖 JAVA_OPTS
环境变量而不包括原始值时,就会出现此问题。 IDEA 设置 JAVA_OPTS
告诉 tomcat 在 1099 上监听 JMX 请求,例如状态和部署。
setenv.sh
中将中断的行示例:
export JAVA_OPTS="-XX:MaxPermSize=512m -Xmx1024m"
修正版:
export JAVA_OPTS="$JAVA_OPTS -XX:MaxPermSize=512m -Xmx1024m"
来自 Windows setenv.bat
文件的相同示例行:
set JAVA_OPTS=-XX:MaxPermSize=512m -Xmx1024m
并更正:
set JAVA_OPTS=%JAVA_OPTS% -XX:MaxPermSize=512m -Xmx1024m
如果您只在 IDEA 中运行 tomcat,您可以按照其他人的建议进行操作,并从您的 setenv
脚本中删除该行并将 jvm 选项放入 IDEA 运行配置中。
【讨论】:
这是正确答案;删除bin/setenv.sh
只是删除了您自己的本地配置,并没有解释问题到底是什么。此答案解释了该解决方案的工作原理和方式,以及如果您正确制作 bin/setenv.sh
脚本,为什么没有必要这样做。
如何找到setenv脚本?
我用的是mac,我没有setenv.sh
@codelark,我不明白你的最后一段。 remove the line from your setenv script and put the jvm options inside the IDEA run configuration.
我无法理解答案。我使用了export JAVA_OPTS="$JAVA_OPTS -XX:MaxPermSize=512m -Xmx1024m"
和set JAVA_OPTS=%JAVA_OPTS% -XX:MaxPermSize=512m -Xmx1024m
。它不起作用。【参考方案2】:
我通过删除 $CATALINA_HOME/bin 中的 setenv.bat 解决了这个问题。这是里面的设置:
set JAVA_OPTS=-server -Xmx768m -XX:MaxPermSize=256M
我不再需要这些选项,所以我只是删除了文件。正如 prule 的回答所说,您可以将这些选项移动到 Intellij Run 配置中。删除文件后,在 IntelliJ 中部署工作正常。
编辑:要更好地回答为什么会这样,请查看codelark's answer below。此外,使用他的方法,您可以保留 setenv.sh/setenv.bat 文件,如果您不这样做,这将很有用'不仅在 IntelliJ IDEA 中运行 Tomcat。
【讨论】:
是的,这对我也有用。看起来任何 setenv.sh(或 setenv.bat)都会导致此问题发生。 如果您没有 setenv.sh,有时您可以在 $CATALINA_HOME/bin/catalina.sh 文件中找到 JAVA_OPTS。 太棒了!这就是问题所在。请将此标记为正确答案。 嗨,我也遇到了同样的错误,但是我在 %CATALINA_HOME%\bin 中找不到 setenv.sh(或 setenv.bat),而 catalina.bat/.sh 没有包含这个命令。我只是在下面找到:set "JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%"
@ChristopherSchultz 你是对的,Codelark 有一个更彻底的答案。当时我只是碰巧找到了一个快速修复,并没有试图找出我的修复工作的原因。我将编辑我的答案,建议用户在下面查看他的答案。【参考方案3】:
从$CATALINA_HOME/bin
中删除setenv.sh
也对我有用。
我正在运行 tomcat7/Ubuntu/IntelliJ 12
setenv.sh
在 bin 文件夹中,在 IJ 内启动时,我在日志中看到:
/usr/local/tomcat/apache-tomcat-7.0.52/bin/catalina.sh run
[2014-07-28 02:41:39,274] Artifact TomcatDebug:war exploded: Server is not connected. Press 'Deploy' to start deployment.
Jul 28, 2014 2:41:40 PM org.apache.catalina.core.AprLifecycleListener init
odonovanj@ubuntuj:/usr/local/tomcat/apache-tomcat-7.0.52$ sudo netstat -tulpn|grep 2928
tcp6 0 0 :::8080 :::* LISTEN 2928/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 2928/java
tcp6 0 0 :::8009 :::* LISTEN 2928/java
删除后,我在日志中看到: 信息:服务器在 76 毫秒内启动 连接到服务器 [2014-07-28 02:44:35,847] Artifact TomcatDebug:war 爆炸:Artifact 正在部署中,请稍候... [2014-07-28 02:44:36,512] Artifact TomcatDebug:war 爆炸:Artifact 部署成功
odonovanj@ubuntuj:/usr/local/tomcat/apache-tomcat-7.0.52$ sudo netstat -tulpn|grep 2346
tcp6 0 0 :::8080 :::* LISTEN 2346/java
tcp6 0 0 :::50044 :::* LISTEN 2346/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 2346/java
tcp6 0 0 :::8009 :::* LISTEN 2346/java
tcp6 0 0 :::1099 :::* LISTEN 2346/java
tcp6 0 0 :::52268 :::* LISTEN 2346/java
似乎setenv.sh
覆盖了$JAVA_OPTS
,干扰了在端口 1099 上运行的 JNDI。
【讨论】:
【参考方案4】:file->project structure->Project SDK
然后重新配置 SDK。
这确实解决了我的问题。
【讨论】:
这真的很有帮助。顺便说一句,我做了文件->项目结构->项目 SDK,然后选择了 JDK 而不是 intelij SDK【参考方案5】:我不太了解这个理论,但我得到了同样的错误。稍等片刻后,我收到一条消息:
工件部署期间出错。有关详细信息,请参阅服务器日志。
我发现它可能意味着的日志文件:“Tomcat localhost.log”,并且那里有一个“NoClassDefFoundError”和“ClassNotFoundException”的堆栈跟踪。我刷新了 Maven 和一个“重建项目”,然后就成功了。
【讨论】:
是的,用 Gradle 重建了一个项目,终于可以运行了,谢谢! 感谢您的简单回答。它适用于我的 Maven !我浪费了两个小时寻找环境变量值...【参考方案6】:(3.2) 设置 JRE_HOME 或 JAVA_HOME(必填)
这些变量用于指定 Java 运行时环境或用于启动 Tomcat 的 Java 开发工具包的位置。
JRE_HOME 变量用于指定 JRE 的位置。 JAVA_HOME 变量用于指定 JDK 的位置。
使用 JAVA_HOME 可以访问某些在使用 JRE_HOME 时不允许的附加启动选项。
如果同时指定了 JRE_HOME 和 JAVA_HOME,则使用 JRE_HOME。
【讨论】:
【参考方案7】:我在 catalina.bat 中设置 JAVA_OPTS 时遇到了这个问题。删除这意味着 tomcat 按预期启动和部署。 JAVA_OPTS 值可以在 Intellij Run 配置中设置。
【讨论】:
【参考方案8】:我在 Tomcat 7.0.27 中遇到了这个问题。 我升级到 Tomcat 8.0.21 并解决了我的问题 :)
【讨论】:
【参考方案9】:我在尝试将项目从 eclipse 导入 IDEA 时遇到了这个问题。
$CATALINA_HOME/bin
中没有 setter.sh
。 IDEA中的Project Structure
和Run Configuration
设置看起来OK,整个项目在eclipse中运行正常,但是在IDEA中显示这个错误。
我的解决方案是,删除.idea
文件夹,重新导入整个项目。我不知道这个问题的确切原因是什么,但对我有用。
现在日志看起来像这样:
/Library/Tomcat/bin/catalina.sh run
[2015-09-22 12:40:57,906] Artifact bookstore:war exploded: Server is not connected. Deploy is not available.
XXXXXX
Connected to server
[2015-09-22 12:40:58,848] Artifact bookstore:war exploded: Artifact is being deployed, please wait...
XXXXXX
[2015-09-22 12:41:07,862] Artifact bookstore:war exploded: Artifact is deployed successfully
[2015-09-22 12:41:07,863] Artifact bookstore:war exploded: Deploy took 9,015 milliseconds
【讨论】:
【参考方案10】:一种简单的方法是更改该文件中的端口号:
-Dcom.sun.management.jmxremote.port=1099
注意端口,默认是1099,但是在使用JMX的时候,可能会被你或者别人改,所以只要改一下端口就可以了,不用从tomcat bin文件夹中删除。
【讨论】:
【参考方案11】:还有一个原因,如果你的tomcat路径包含空白或者'(',也会出现这个错误。请重命名你的tomcat路径。
【讨论】:
【参考方案12】:如果您更改了/etc/hosts
文件,则需要在其中添加一行localhost YOU_USER_NAME
。
【讨论】:
【参考方案13】:转到 TOMCAT BIN 目录 在命令提示符下运行以下命令
cd Tomcat-9991\bin
catalina.bat 运行
我得到的输出是
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/catalina/startup/Bootstrap : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
表明我的 tomcat 和 JDK 之间存在 JAVA 版本问题,我也在设置它。
我可以通过链接到正确版本的 JDK 来修复它。
【讨论】:
以上是关于Idea 中的 Tomcat。战争爆发:服务器未连接。部署不可用的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 maven 中的 tomcat 插件部署多个战争?