17.19 JDK下载安装(rpm方式)
- linux系统上jdk安装方式比较多,最简单的便是yum安装,可以使用以下步骤来安装:
#首先先检查是否已经安装JDK
[root@CncLucZK ~]# rpm -qa |grep java
[root@CncLucZK ~]# rpm -qa |grep jdk //查看安装的jdk版本
[root@CncLucZK ~]# rpm -qa |grep gcj
#没有输出信息表示没有安装
#如果已经安装可以使用指令:批量卸载所有带有Java的文件
[root@CncLucZK ~]# rpm -qa | grep java | xargs rpm -e --nodeps
#首先检索包含java的列表如下图,版本是openjdk版本
[root@CncLucZK ~]# yum list java*
#自动安装jdk1.8的所有文件,且不需要进行环境变量配置
[root@CncLucZK ~]# yum -y install java-1.8.0-openjdk*
使用命令检查是否安装成功
[root@CncLucZK ~]# java -version
- JDK的下载可以选择rpm包也可以选择tar.gz包,区别是tar.gz包可以指定安装位置,之后的环境变量配置步骤是一样的,以下是二者的wget地址。这种方式的安装相对yum安装步骤多一点,不同的是yum安装的是openjdk.
参数#下载jdk8.rpm
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm
#下载jdk8.tar.gz包,里面包含src源码
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz
限于版权,Linux发行版并没有包含官方版的Oracle JDK,必须自己从官网上下载安装。Oracle官网用Cookie限制下载方式,使得眼下只能用浏览器进行下载,使用其他方式可能会导致下载失败。但还是有其他方式的这里就不说明了,使用wget命令直接将jdk下载到/usr/local/src。
- 参数说明:
- wget为:下载方式
- –no-check-certificate:用于禁止检查证书
- –no-cookies:用于禁用Cookies
- –header=header-line:用于定义请求头信息
- http…即为jdk1.8下载链接
#进入/usr/local/src目录
[root@VM-0-3-centos src]# cd /usr/local/src
#下载安装包
[root@VM-0-3-centos src]# wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm
#查看文件
[root@VM-0-3-centos src]# ll -l
total 357772
-rw-r--r--. 1 root root 169983496 Mar 16 2017 jdk-8u131-linux-x64.rpm
-rw-r--r--. 1 root root 185540433 Mar 16 2017 jdk-8u131-linux-x64.tar.gz
#发现两文件都没有执行权限,需要授权 755 / +x 两种方式
[root@VM-0-3-centos src]# chmod 755 jdk-8u131-linux-x64.rpm
[root@VM-0-3-centos src]# ll -l
total 357772
-rwxr-xr-x. 1 root root 169983496 Mar 16 2017 jdk-8u131-linux-x64.rpm
- 执行rpm命令安装:
[root@VM-0-3-centos src]# rpm -ivh jdk-8u131-linux-x64.rpm
- 如果出现如下提示表示成功!安装位置在/usr/java文件夹,已经生成了jdk1.8.0_131文件夹
#查看是否安装成功:
[root@VM-0-3-centos src]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
- 之后配置环境变量,修改/etc/profile 文件,在文件末尾添加以下命令:
#JAVA_HOME路径就是jdk的安装目录
export JAVA_HOME=/usr/java/jdk1.8.0_131
#环境变量是用来指定Java程序搜索类的路径的
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
-
保存退出后,执行
source /etc/profile
让上面的配置生效.source 命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。 -
这时候java运行环境已经搭建完毕
测试:在/usr/java/jdk1.8.0_131目录下建一个test目录,建一个HelloWorld.java类,经过
javac xxx.java
编译源代码,运行java xxx
#进入java目录 [root@VM-0-3-centos ~]# cd /usr/java #进入test目录 [root@VM-0-3-centos ~]# mkdir test #创建HelloWorld.java源文件 [root@VM-0-3-centos test]# touch HelloWorld.java #编码 [root@VM-0-3-centos test]# vim HelloWorld.java public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } } #编译,注意这个类最好别import其他的类,不然找不到这些导入的类 [root@VM-0-3-centos test]# javac HelloWorld.java #执行结果 [root@VM-0-3-centos test]# java HelloWorld Hello world!
java 运行class文件时报错:Error: Could not find or load main class。找不到或无法加载主类.注:Java 1.7以下是这样的Exception in thread “main” java.lang.NoClassDefFoundError: HelloWorld.
问题原因:
java执行class文件是根据CLASSPATH指定的地方来找,CLASSPATH包含所有Java类文件的目录。如果它找不到我们所运行程序的main方法就会抛出上面的错误。在IDE里面编译运行程序很简单,因为它把Classpath设置好了,但是在命令行,就得自己处理了。如果希望它查询当前目录,需要在CLASSPATH中加入“.:”,代表当前目录。
java执行class文件对package的路径是强依赖的。它在执行的时候会严格以当前用户路径为基础,按照package指定的包路径转化为文件路径去搜索class文件。
CLASSPATH和PATH不同,PATH用于定位系统可执行文件或命令,在Windows系统是扩展名为 .exe, .dll的文件,在Linux系统是 .so文件。Path也用来定位java程序的本地库。CLASSPATH是用来定位类文件或JAR文件,java类加载器通过CLASSPATH来查找和加载类。
还有一个原因是:打开编辑器,查看.sh脚本文件,发现原来是脚本是由于在Windows下编写的,所以格式是Windows的,使用NotePad++在右下角改一下脚本格式就可以了
- 实际应用:可以将springboot项目打jar包,发步到服务器上
#方式1:终端前台启动,动态显示日志
java -jar xxxx.jar #运行springboot项目,自带了tomcat组件
java -jar xxxx.jar >log.file 2>&1 &
#启动后,当前ssh窗口会被锁定,不能再操作其他命令,如果需要执行其他命令,则需要打断进程,可按CTRL + C打断程序运行,或直接关闭窗口,程序也会退出。
#方式2:后台启动 jar 包.&代表在后台运行。
#缺点:当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行
java -jar XXX.jar &
#方式3:后台启动jar包,logfile.log为日志输出文件,后台不挂断启动
nohup java -jar xxx1.jar >logfile.log 2>&1 &
#或者是
sudo -u u1 nohup java -jar xxx.jar >logfile.log 2>&1 &
#这个命令中,切换到了 u1 用户来执行,nohup 让程序在后台执行,后面的 log 就是让这个程序的日志输出到当前目录下的logfile.log,当然名称可以随意更改。运行这个命令后会返回程序的 PID,等待一会程序就正常运行了。
#当用 nohub命令启动 jar 包的时候,关闭终端窗口或者 CTRL + C 命令也不会终止程序。如果不指定日志输出文件,则所有的输出都会被重定向到nohub 命令默认的输出文件 nohub.out 的文件中。
#方式4:可以将 jar包链接到/etc/init.d/下,作为服务启动
#方式5:指定配置文件,使用系统默认的log配置,不另行指定日志输入
# 启动/opt/a/目录下的 test.jar ,配置文件使用 pro,日志使用配置文件默认配置,不单独指定。
nohup java -jar /xx/xxx.jar --spring.profiles.active=dev >/dev/null 2>&1 &
#文件描述符有如下:
0 :stdin(标准输入)
1 :stdout(标准输出)
2 :stderr(标准错误)
#2> /dev/null
#代表重定向操作。将标准错误重定向到/dev/null ,即不输出错误信息。
/dev/null 2>&1 & : 等同于 1>/dev/null 2>&1 &, 即把标准输出重定向到/dev/null,并且把标准错误2重定向标准输出1,即标准输出和标准错误都输出到 /dev/null。
#注意:如果服务有自定义日志,那么不需要额外打印到日志文件中,直接使用后台启动方式即可
#方式1:关闭服务(前台启动)
ctrl+c 即可停止
#或者是
ctrl+z 退出到控制台,执行 bg 再执行exit命令
#方式2:关闭服务(后台服务)
#查看启动的java进程,里面会列出该进程的pid信息
ps aux | grep jar
#查看某端口的java进程:
netstat -tlun | grep 8106
#关闭服务(后台服务)
kill -9 pid(进程ID,上诉命令查出的服务进程id)
- 可以将服务启动命令打成一个start.sh脚本文件。linux 下启动 jar包
#!/bin/bash
APPNAME=xxx
#查询为关闭的xxx服务进程的pid
pid=`ps -ef|grep $APPNAME|grep -v grep|grep -v kill|awk '{print $2}'`
#还有残留的该服务进程,关闭掉
if [ ${pid} ]; then
echo 'Stop Process...'
kill -15 $pid
sleep 5
fi
#后台启动该服务,-Xms/-Xmx分配运行内存空间,--nacos.url指定nacos服务器url,打印日志
nohup java -jar -Xms128m -Xmx512m $APPNAME.jar -XX:PermSize=128M -XX:MaxPermSize=256M --nacos.url=192.168.1.12 --nacosspace=uat > ./log/nohup`date +%Y-%m-%d`.out 2>&1 &
#如果--nacos.url没指定,则如下配置文件${nacos.url:192.168.1.12} 也是使用192.168.1.12
#--nacosspace指定nacos命名空间为uat,如果没指定,则使用配置spring.cloud.nacos.config.namespace的值
#-Xms堆内存初始值m -Xmx堆内存最大值m
#1、堆内存:最小1024M,最大1536M。(对象使用的内存)
#2、永久内存:最小128M,最大256M。(类使用的内存,PermGen)
#终端提示该服务启动成功!
echo $! > pid
echo Start Success!
- 可以将服务关闭命令打成一个shutdown.sh脚本文件
#!/bin/bash
ps -ef | grep xxx.jar | grep -v grep | awk '{print $2}' | xargs kill
- 确保Linux的防火墙端口是开启的,如果是云服务器,需要保证云服务器的安全组策略是开放的。
#查看firewall服务状态
systemctl status firewalld
systemctl enable firewalld 开机自启动(默认状态)
systemctl disable firewalld 关闭开机自启
#开启、重启、关闭、firewalld.service服务
#开启
service firewalld start
#重启
service firewalld restart
#关闭
service firewalld stop
#查看防火墙规则
firewall-cmd --list-all #查看全部信息
firewall-cmd --list-ports #只看端口信息
#开启端口
#修改防火墙规则,可以修改:/etc/sysconfig/iptables文件
开端口命令:firewall-cmd --zone=public --add-port=8090/tcp --permanent
重启防火墙:systemctl restart firewalld.service
命令含义:
--zone #作用域
--ādd-port=80/tcp #添加端口,格式为:端口/通讯协议
--remove-port=端口/tcp 从防火墙的规则中删除端口号
--permanent #永久生效,没有此参数重启后失效
--reload 重新加载规则,让新加的端口号起作用,重启防火墙的服务 systemctl restart firew
下一篇:Linux学习-90-Tomcat下载安装(tar压缩包)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123702.html