Idea远程部署tomcat-阿里云、windows系统-java.rmi.ConnectException问题

本文详细介绍如何在Windowsserver2016环境下通过IDEA进行远程Tomcat部署及调试,包括必要的服务器设置、SFTP服务开启、Tomcat配置等步骤,并解决了常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境

  • 阿里云ECS
  • windows server 2016
  • idea 2018.1
  • tomcat 9.0 windows安装版

idea设置

idea 设置部分网上教程比较多,这里略过,大家可以参考下面的帖子
https://segmentfault.com/a/1190000012762629
请参考该帖子的 1、6 两章设置 idea remote tomcat

服务器设置

这里我们着重讲一下服务器设置

sftp服务开启
https://blog.youkuaiyun.com/shutingwang/article/details/52981751
可以将ftp目录设置到 tomcat/webapps 目录,这样 idea remote tomcat 设置中所有路径填 / 即可
但是注意 idea remote tomcat 设置项 Mapped as 要设为 ./ 不然 idea 会提示错误

Error during artifact deployment. See server log for details.

这里写图片描述
这里写图片描述

tomcat设置
这里写图片描述
这里写图片描述
在 tomcat 配置中添加 Java Options 配置如下

-Dcom.sun.management.jmxremote=
-Dcom.sun.management.jmxremote.port=1099
-Dcom.sun.management.jmxremote.rmi.port=1099
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=<服务器IP>
-agentlib:jdwp=transport=dt_socket,address=0.0.0.0:61450,suspend=n,server=y

要注意下面这项设置

-Dcom.sun.management.jmxremote.rmi.port=1099

网上的大多数 remote tomcat 教程中缺少此项配置,会导致 tomcat 启动错误

Error running ‘x.x.x.x’
Unable to connect to the x.x.x.x:1099, reason:
java.rmi.ConnectException: Connection refused to host: x.x.x.x; nested exception is:
java.net.ConnectException: Connection timed out: connect

debug tomcat 设置

远程 debug tomcat,需要将 idea remote tomcat 配置中提供的参数加入服务器 tomcat 配置
这里写图片描述
图片中的参数复制粘贴到上面的服务器 tomcat Java Options 配置中
这里要注意 adress 参数要配置为 0.0.0.0:port

-agentlib:jdwp=transport=dt_socket,address=0.0.0.0:61450,suspend=n,server=y

如果只配置端口,debug 启动 tomcat 时会出错

Error running ‘39.106.114.247’: Unable to open debugger port (39.106.114.247:61450): java.net.ConnectException “Connection refused: connect”

备注
以上配置涉及到的 1099、8080、debug 端口,需要在阿里云安全组中配置访问规则

<think>我们正在解决两个问题:1.TomcatWindows服务中显示红色小方块(通常表示服务未运行或启动失败)2.JDK_JAVA_OPTIONS环境变量配置问题(特别是--add-opens相关配置)根据引用[1]和引用[2]的内容,我们知道Tomcat的启动脚本会设置环境变量,包括JAVA_HOME、CATALINA_HOME等。如果这些变量设置不正确,可能导致Tomcat服务无法启动。另外,引用[3]提到了jpackage工具和模块化相关的内容,这可能与JDK9及以上版本的模块系统有关。而--add-opens就是用于解决模块间反射访问的选项。##问题一:Tomcat服务红色小方块###可能原因及解决方案1.**环境变量配置错误**-检查`JAVA_HOME`是否正确指向JDK安装目录(不是JRE目录)。在Tomcat的启动脚本(如catalina.bat或setenv.bat)中,必须正确设置`JAVA_HOME`。-引用[1]中设置`JAVA_HOME`的示例:```batset"JAVA_HOME=D:\ProgramFiles\Java\jdk1.7.0_79"```-同时,确保`CATALINA_HOME`指向Tomcat的安装目录。2.**Java版本不兼容**-Tomcat7需要Java6或7,Tomcat8需要Java7或8(或更高),Tomcat9需要Java8或更高。请确保安装的Java版本与Tomcat版本兼容。3.**端口冲突**-检查Tomcat配置的端口(默认为8080、8009、8005)是否被其他程序占用。可以通过命令`netstat-ano`查看端口使用情况。4.**权限问题**-确保运行Tomcat服务的用户具有足够的权限访问Tomcat目录和文件。5.**查看日志文件**-检查Tomcat的日志文件(位于`logs`目录),特别是`catalina.out`(或`catalina.yyyy-mm-dd.log`)和`localhost.yyyy-mm-dd.log`,查找启动失败的原因。###修复步骤1.**手动启动Tomcat**在命令行中进入Tomcat的`bin`目录,运行`catalina.batrun`(Windows)或`catalina.shrun`(Linux)。这样可以在控制台查看启动过程中的错误信息。2.**检查环境变量**在启动脚本(如`startup.bat`或`catalina.bat`)中,确保`JAVA_HOME`和`CATALINA_HOME`设置正确。也可以创建`setenv.bat`(Windows)或`setenv.sh`(Linux)来设置环境变量,这样不会修改原有脚本。3.**检查服务配置**如果是通过`service.bat`(Windows)将Tomcat安装为服务,请确保服务安装时使用的用户具有适当的权限。可以尝试重新安装服务:```batservice.batremove#移除现有服务service.batinstall#重新安装服务```##问题二:JDK_JAVA_OPTIONS--add-opens配置问题Java9及以上版本中,模块系统限制了反射访问。如果应用程序使用了反射访问其他模块的私有成员,则需要使用`--add-opens`选项打开相应的模块包。###错误示例```WARNING:AcommandlineoptionhasenabledtheSecurityManagerWARNING:TheSecurityManagerisdeprecatedandwillberemovedinafuturereleaseError:Unabletoaccessjarfilexxxx.jar```或```java.lang.reflect.InaccessibleObjectException:Unabletomakefieldprivate...accessible:module...doesnot"opens..."tomodule...```###解决方案1.**在环境变量中设置JDK_JAVA_OPTIONS**在Tomcat的启动脚本中(如`catalina.bat`或`setenv.bat`),添加`JDK_JAVA_OPTIONS`环境变量,包含所需的`--add-opens`选项。例如,要允许`java.base`模块的`java.lang`包被反射访问,可以这样设置:```batset"JDK_JAVA_OPTIONS=--add-opens=java.base/java.lang=ALL-UNNAMED"```如果需要多个选项,可以一起设置:```batset"JDK_JAVA_OPTIONS=--add-opens=java.base/java.lang=ALL-UNNAMED--add-opens=java.base/java.util=ALL-UNNAMED"```2.**在Tomcat的JVM选项中设置**修改`bin/setenv.bat`(如果没有则创建)或`catalina.bat`,在`JAVA_OPTS`变量中添加这些选项:```batset"JAVA_OPTS=%JAVA_OPTS%--add-opens=java.base/java.lang=ALL-UNNAMED"```注意:`JAVA_OPTS`用于设置Tomcat的JVM参数。3.**具体需要打开哪些模块?**这取决于应用程序。通常,错误日志会明确指出哪个模块的哪个包需要被打开。根据错误信息添加相应的`--add-opens`选项。###示例:修复Tomcat启动问题假设错误日志显示:```java.lang.reflect.InaccessibleObjectException:Unabletomakefieldprivatefinaljava.util.Comparatorjava.util.TreeMap.comparatoraccessible:modulejava.basedoesnot"opensjava.util"tounnamedmodule@xxxx```则需要在启动脚本中添加:```batset"JAVA_OPTS=%JAVA_OPTS%--add-opens=java.base/java.util=ALL-UNNAMED"```##综合步骤1.创建或修改`setenv.bat`文件(位于Tomcat的`bin`目录):```bat@echooffrem设置JAVA_HOMEset"JAVA_HOME=D:\ProgramFiles\Java\jdk1.8.0_291"rem设置CATALINA_HOME(如果未设置)ifnotdefinedCATALINA_HOMEset"CATALINA_HOME=D:\tomcat\apache-tomcat-9.0.50"rem设置JVM选项,解决模块访问问题set"JAVA_OPTS=%JAVA_OPTS%--add-opens=java.base/java.lang=ALL-UNNAMED"set"JAVA_OPTS=%JAVA_OPTS%--add-opens=java.base/java.util=ALL-UNNAMED"```2.重新启动Tomcat服务:-如果Tomcat已安装为服务,则在服务管理器中重启。-或者,在命令行中运行:```batcd%CATALINA_HOME%\bincatalina.batrun```##注意事项-确保`setenv.bat`文件使用正确的编码(ANSI或UTF-8withoutBOM),避免出现不可见字符导致的错误。-如果问题仍然存在,请详细检查Tomcat的日志文件。---###§§相关问题§§1.如何查看Tomcat服务的详细启动日志?2.Windows环境下如何将Tomcat配置为自启动服务?3.Java9模块系统中`--add-opens`和`--add-exports`的区别是什么?4.如何诊断Tomcat服务启动时的端口冲突问题?5.使用高版本JDK运行旧版Tomcat需要注意哪些兼容性问题?</think>### Tomcat服务红色小方块问题分析与解决 #### 一、红色小方块原因分析 Tomcat服务显示红色小方块(服务停止状态)通常由以下原因引起: 1. **JDK环境配置错误** - `JAVA_HOME`未正确设置(如引用[1]所示) - JDK版本与Tomcat不兼容 - 缺少`--add-opens`等JVM模块化参数 2. **CATALINA环境变量问题** - `CATALINA_HOME`或`CATALINA_BASE`路径错误(如引用[2]所述) - 权限不足导致无法访问安装目录 3. **模块化系统冲突** - JDK 9+的模块系统限制反射访问(如引用[3]提及的技术空白) - 缺少必要的`--add-opens`参数 #### 二、解决方案步骤 ##### 1. 修复环境变量配置 在`tomcat/bin`目录创建或修改`setenv.bat`(Windows)或`setenv.sh`(Linux)文件: ```bat :: setenv.bat for Windows set "JAVA_HOME=D:\Program Files\Java\jdk-17.0.2" set "CATALINA_HOME=D:\tomcat\apache-tomcat-10.1.0" set "CATALINA_BASE=%CATALINA_HOME%" ``` ```bash # setenv.sh for Linux export JAVA_HOME=/usr/lib/jvm/jdk-17 export CATALINA_HOME=/opt/tomcat export CATALINA_BASE=$CATALINA_HOME ``` > **验证命令**: > `echo %JAVA_HOME%` (Windows) > `echo $JAVA_HOME` (Linux) > 确保输出路径与实际安装路径一致[^1][^2] ##### 2. 解决JDK_JAVA_OPTIONS报错 在`setenv`文件中添加模块化参数: ```bat :: Windows 示例 set "JAVA_OPTS=%JAVA_OPTS% --add-opens java.base/java.lang=ALL-UNNAMED" set "JAVA_OPTS=%JAVA_OPTS% --add-opens java.base/sun.nio.ch=ALL-UNNAMED" ``` ```bash # Linux 示例 export JAVA_OPTS="$JAVA_OPTS --add-opens=java.base/java.lang=ALL-UNNAMED" export JAVA_OPTS="$JAVA_OPTS --add-opens=java.base/sun.nio.ch=ALL-UNNAMED" ``` **关键参数说明**: - `--add-opens`:允许反射访问指定模块 - `java.base/java.lang`:Tomcat常用核心模块 - `ALL-UNNAMED`:允许所有未命名模块访问 ##### 3. 检查服务安装状态 重新注册Windows服务: ```bat cd %CATALINA_HOME%\bin service.bat remove # 卸载旧服务 service.bat install # 安装新服务 net start Tomcat10 # 启动服务 ``` #### 三、诊断流程图 ```mermaid graph TD A[红色小方块] --> B{检查日志} B -->|catalina.out| C[环境变量错误] B -->|localhost.log| D[模块访问拒绝] C --> E[修复setenv配置] D --> F[添加--add-opens] E --> G[重启服务] F --> G G --> H{状态检查} H -->|绿色| I[成功] H -->|红色| B ``` #### 四、常见错误示例及修复 **错误日志片段**: ``` java.lang.reflect.InaccessibleObjectException: Unable to make field private final byte[] ... accessible: module java.base does not 'opens java.lang' to unnamed module ``` **解决方案**: ```bat set "JAVA_OPTS=%JAVA_OPTS% --add-opens java.base/java.lang=ALL-UNNAMED" ``` #### 五、验证方法 1. 查看服务状态: ```bat sc query Tomcat10 ``` 输出应包含 `STATE : 4 RUNNING` 2. 检查启动日志: ```bat tail -f %CATALINA_HOME%/logs/catalina.out ``` 确认无 `SEVERE` 级别错误 > **注意**:JDK 17+需要额外添加: > ```bat > set "JAVA_OPTS=%JAVA_OPTS% --add-opens java.base/java.io=ALL-UNNAMED" > ``` --- ###
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值