Linux上的运行自开发的JAR包,并替换默认JDK

Windows应用迁移至Linux
本文详细介绍了如何将Windows上的消息收发平台成功部署到Linux环境中,包括配置JDK环境变量、设置CLASSPATH、创建并执行Shell脚本等内容。

今天把Windows上的消息收发平台部署到Linux上,始终不正确,执行java -version一直是jdk1.4.

最后解决方法如下:

1:修改/etc/profile文件

[root@localhost server]# vi /etc/profile

    在文件最后增加JAVA_HOME、PATH配置

 

 

JAVA_HOME=/weblogic/jdk160_18
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH

 2:执行/etc/profile文件后,再查看版本,已经是上面配置的JDK6了,我直接使用的Weblogic的jdk。

        从windows下拷贝去的JDK,要注意是否是能在Linux下用的,我就是把Windows下安装的JDK拷去,结果悲催了半天。。

[root@localhost server]# . /etc/profile
[root@localhost server]# java -version
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Server VM (build 16.0-b13, mixed mode)

  4:为要执行的java类,配置CLASSPATH,我这里有一堆log4j等外部的jar包:

[root@localhost server]# export CLASSPATH=.:$CLASSPATH:./ipayrelay-server.jar:./lib/log4j-1.2.16.jar:./lib/jxl.jar:./lib/commons-beanutils.jar:./lib/commons-collections.jar:./lib/commons-digester.jar:./lib/commons-logging.jar:./lib/commons-pool.jar:./lib/lucene-core-3.6.1.jar:./lib/mail.jar:./lib/metouia.jar:./lib/QSAdminGUI.jar:./lib/QuickServer.jar:./lib/quickserver_config.dtd:./lib/quickserver_config.xsd:./lib/QuickServerClient.jar:./lib/ipayrelay-client.jar:./lib/commons-codec-1.7.jar:./lib/commons-httpclient-3.1.jar

 5:最后执行打好的jar包:

[root@localhost server]#java -cp $CLASSPATH com.mfhcd.ipayrelay.server.Server

 6:将上述内容制成脚本执行,我的脚本ipayrelay.sh

#!/bin/sh
source /etc/profile
export CLASSPATH=.:$CLASSPATH:./ipayrelay-server.jar:./lib/log4j-1.2.16.jar:./lib/jxl.jar:./lib/commons-beanutils.jar:./lib/commons-collections.jar:./lib/commons-digester.jar:./lib/commons-logging.jar:./lib/commons-pool.jar:./lib/lucene-core-3.6.1.jar:./lib/mail.jar:./lib/metouia.jar:./lib/QSAdminGUI.jar:./lib/QuickServer.jar:./lib/quickserver_config.dtd:./lib/quickserver_config.xsd:./lib/QuickServerClient.jar:./lib/ipayrelay-client.jar:./lib/commons-codec-1.7.jar:./lib/commons-httpclient-3.1.jar
java -cp $CLASSPATH com.mfhcd.ipayrelay.server.Server

     #!/bin/sh是执行命令的脚本固定的开头, source /etc/profile是将该文件的内容解释执行一遍,让JAVA_HOME生效。

 

7:脚本可能有字符集问题,需要转码,转码后即可解决/bin/sh^M: bad interpreter这种报错:

[root@localhost server]# dos2unix ipayrelay.sh

 8:最后执行脚本,前给脚本授权,我是将当前目录下的文件及其子文件全部授权了,为了方便调用

   

[root@localhost server]#chmod -R 777 .

 9:最后执行脚本:

[root@localhost server]# ./ipayrelay.sh

 10:停止脚本,9090是我的应用绑定的端口号,根据端口号查到PID后,执行kill杀进程

[root@localhost bin]# netstat -lnp | grep 9090
tcp        0      0 :::9090                     :::*                        LISTEN      6406/java           
[root@localhost bin]# kill -9 6406

 上面的脚本也可以通过一句话执行:kill -9 $(netstat -tlnp|grep 9090|awk '{print $7}'|awk -F '/' '{print $1}')

11:后台启动脚本,即使退出ssh也可以运行服务

[root@localhost server]#nohup ./ipayrelay.sh &

 

 

 

 

<think>嗯,用户现在的问题是关于在Linux系统使用指定版本的JDK启动JAR。之前用户已经询问过如何在Windows和Linux下指定JDK启动JAR,我之前给出了批处理和Shell脚本的方法。现在用户可能是在Linux环境下遇到了具体的问题,或者需要更详细的步骤。 首先,我需要回顾之前的回答。用户上次的问题中,我提到了在Linux使用Shell脚本设置JAVA_HOME运行JAR文件,还提到了权限设置和验证方法。现在用户可能希望得到更详细的指导,或者遇到了环境变量配置的问题。 用户提供的引用内容提到了Linuxjar自启动,以及卸载系统自带的OpenJDK然后安装新JDK。这可能意味着用户需要知道如何正确安装和管理多个JDK版本,或者确保指定的JDK被正确使用,而会受系统默认版本影响。 接下来,我需要考虑用户的实际需求。用户可能在部署Java应用时,需要特定的JDK版本,比如项目需要JDK 11,而系统默认JDK 8。这时候,如何确保使用正确的版本是关键。常见的方法括修改PATH、使用绝对路径、或者通过update-alternatives配置多版本。 根据引用内容,用户可能需要知道如何安装特定JDK,卸载旧版本,或者配置环境变量。但根据用户当前的问题,重点是如何使用已安装的特定JDK启动JAR,而是安装过程。所以,我应该集中在如何正确设置环境变量或直接调用JDK路径来运行JAR。 在之前的回答中,我提到了Shell脚本的方法,现在可能需要详细说明每一步,补充其他方法,比如使用绝对路径或update-alternatives。另外,用户可能遇到的问题是即使设置了JAVA_HOME,系统仍然使用默认Java版本,所以需要检查PATH变量的优先级,或者使用绝对路径来绕过环境变量的问题。 还要考虑用户可能没有正确安装JDK,或者安装后没有配置环境变量。这时候,可能需要指导用户如何验证JDK的安装路径,确保脚本中的路径正确。此外,权限问题也是常见的,比如脚本没有执行权限,或者JDK目录的权限足。 另外,用户可能在服务部署时需要自启动脚本,比如使用systemd配置服务,这时候需要确保在服务配置中正确指定JAVA_HOME。这可能是一个扩展点,但根据用户的问题,可能暂时需要涉及,但可以作为一个补充说明。 总结用户的潜在需求:正确安装指定JDK,配置环境变量,编写启动脚本,验证版本,处理多版本共存,以及解决常见问题如路径错误或权限问题。需要分步骤详细说明,确保用户能够按照指导操作成功。</think>根据您的要求和系统特性,以下是Linux系统使用指定JDK版本启动JAR的完整解决方案: ### 一、基础方法 1. **绝对路径启动法**(推荐) ```bash /usr/lib/jvm/jdk-17.0.2/bin/java -jar /opt/app/your_app.jar ``` - 优点:无需修改环境变量,直接指定JDK安装路径 - 验证路径有效性:`ls -l /usr/lib/jvm/jdk-17.0.2/bin/java` 2. **Shell脚本封装法** ```bash #!/bin/bash export JAVA_HOME=/usr/lib/jvm/jdk-11.0.15 # 替换实际路径 exec $JAVA_HOME/bin/java -Xmx1024m -jar /data/app.jar > /var/log/app.log 2>&1 & ``` - 添加执行权限:`chmod +x start.sh` - 后台运行:`nohup ./start.sh &`[^1] ### 二、多版本管理 3. **alternatives系统配置**(适用于长期使用) ```bash sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk-17/bin/java" 1000 sudo update-alternatives --config java ``` - 通过优先级数值控制默认版本 - 验证:`java -version`[^2] ### 三、环境验证流程 ```bash # 1. 确认当前环境版本 which java && java -version # 2. 检查所有已安装JDK ls -l /usr/lib/jvm/ # 3. 查看环境变量优先级 echo $PATH | tr ':' '\n' ``` ### 四、常见问题排查 - **问题现象**:提示`UnsupportedClassVersionError` - 原因:JAR编译版本 > 运行JDK版本 - 解决方案:使用`javap -v YourClass.class | grep major`检查编译版本 - **问题现象**:`Permission denied` - 执行权限修复:`chmod +x /usr/lib/jvm/jdk-xx/bin/java` ### 五、高级配置 5. **systemd服务配置**(生产环境推荐) ```ini # /etc/systemd/system/myapp.service [Service] Environment="JAVA_HOME=/usr/lib/jvm/jdk-11.0.15" ExecStart=${JAVA_HOME}/bin/java -jar /opt/app.jar ``` - 重载服务:`systemctl daemon-reload` - 启动服务:`systemctl start myapp` [^1]: 参考Linux后台进程管理最佳实践 [^2]: 来自Oracle官方多版本JDK管理文档
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值