设为首页 收藏本站
查看: 534|回复: 0

[经验分享] linux下java项目移植部署心得

[复制链接]

尚未签到

发表于 2016-2-22 08:19:01 | 显示全部楼层 |阅读模式
  一.验证码问题,,在windows下验证码运行正常,到了linux下验证码程序走不通也不抛异常,什么现象都没有就是走不动了,问题可能在于你的linux服务器没有配置成java.awt.headless 可以执行。。。在程序中加入:
  
System.setProperty("java.awt.headless", "true");
  二.netstat -nap |grep java(端口号)  可以查看指定程序的端口情况,或者是指定端口的程序运行情况
  ps -ef | grep java  也是如此
  杀某个端口下的程序,,用ps那个命令查出pid,然后执行kill命令。。强制杀用-9参数。
  三.改变一个文件的权限用命令chmod +x file,,这个是最常用的。。什么权限都+上了。然后就可以执行或者修改
  四.现在使用linux的朋友越来越多了,在linux下做开发首先就是需要配置环境变量,下面以配置java环境变量为例介绍三种配置环境变量的方法。
  
  
  1.修改/etc/profile文件
  如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题。

  (1)用文本编辑器打开/etc/profile

  (2)在profile文件末尾加入:
  JAVA_HOME=/usr/share/jdk1.5.0_05
  PATH=$JAVA_HOME/bin:$PATH
  CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  export JAVA_HOME
  export PATH
  export CLASSPATH

  (3)重新登录

  注解:
  a. 你要将 /usr/share/jdk1.5.0_05jdk 改为你的jdk安装目录

  b. linux下用冒号“:”来分隔路径

  c. $PATH / $CLASSPATH / $JAVA_HOME 是用来引用原来的环境变量的值,在设置环境变量时特别要注意不能把原来的值给覆盖掉了,这是一种常见的错误。

  d. CLASSPATH中当前目录“.”不能丢,把当前目录丢掉也是常见的错误。

  e. export是把这三个变量导出为全局变量。

  f. 大小写必须严格区分。

  2. 修改.bashrc文件  
  这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bashrc文件就可以了。

  (1)用文本编辑器打开用户目录下的.bashrc文件

  (2)在.bashrc文件末尾加入:  
  set JAVA_HOME=/usr/share/jdk1.5.0_05
  export JAVA_HOME
  set PATH=$JAVA_HOME/bin:$PATH
  export PATH
  set CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  export CLASSPATH

  (3)重新登录

  3. 直接在shell下设置变量
  不赞成使用这种方法,因为换个shell,你的设置就无效了,因此这种方法仅仅是临时使用,以后要使用的时候又要重新设置,比较麻烦。

  只需在shell终端执行下列命令:
  export JAVA_HOME=/usr/share/jdk1.5.0_05
  export PATH=$JAVA_HOME/bin:$PATH
  export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  五.class版本问题解决
  Unsupported major.minor version 49.0错误详解
  
一:要解决的问题

我 们在尝鲜 JDK1.5 的时候,相信不少人遇到过 Unsupported major.minor version 49.0 错误,当时定会茫然不知所措。因为刚开始那会儿,网上与此相关的中文资料还不多,现在好了,网上一找就知道是如何解决,大多会告诉你要使用 JDK 1.4 重新编译。那么至于为什么,那个 major.minor 究竟为何物呢?这就是本篇来讲的内容,以使未错而先知。

我觉得我是比 较幸运的,因为在遇到那个错误之前已研读过《深入 Java 虚拟机》第二版,英文原书名为《Inside the Java Virtual Machine》( Second Edition),看时已知晓 major.minor 藏匿于何处,但没有切身体会,待到与 Unsupported major.minor version 49.0 真正会面试,正好是给我验证了一个事实。

首先我们要对 Unsupported major.minor version 49.0 建立的直接感觉是:JDK1.5 编译出来的类不能在 JVM 1.4 下运行,必须编译成 JVM 1.4 下能运行的类。(当然,也许你用的还是 JVM 1.3 或 JVM 1.2,那么就要编译成目标 JVM 能认可的类)。这也解决问题的方向。

二:major.minor 栖身于何处

何谓 major.minor,且又居身于何处呢?先感性认识并找到 major.minor 来。

写一个 Java Hello World! 代码,然后用 JDK 1.5 的编译器编译成,HelloWorld.java



public static void "Hello, World!" package com.unmi; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }

用 JDK 1.5 的 javac -d . HelloWorld.java 编译出来的字节码 HelloWorld.class 用 UltraEdit 打开来的内容如图所示:


DSC0000.jpg

从 上图中我们看出来了什么是 major.minor version 了,它相当于一个软件的主次版本号,只是在这里是标识的一个 Java Class 的主版本号和次版本号,同时我们看到 minor_version 为 0x0000,major_version 为 0x0031,转换为十制数分别为0 和 49,即 major.minor 就是 49.0 了。

三:何谓 major.minor 以及何用

Class 文件的第 5-8 字节为 minor_version 和 major_version。Java class 文件格式可能会加入新特性。class 文件格式一旦发生变化,版本号也会随之变化。对于 JVM 来说,版本号确定了特定的 class 文件格式,通常只有给定主版本号和一系列次版本号后,JVM 才能够读取 class 文件。如果 class 文件的版本号超出了 JVM 所能处理的有效范围,JVM 将不会处理该 class 文件。

在 Sun 的 JDK 1.0.2 发布版中,JVM 实现支持从 45.0 到 45.3 的 class 文件格式。在所有 JDK 1.1 发布版中的 JVM 都能够支持版本从 45.0 到 45.65535 的 class 文件格式。在 Sun 的 1.2 版本的 SDK 中,JVM 能够支持从版本 45.0 到46.0 的 class 文件格式。

1.0 或 1.2 版本的编译器能够产生版本号为 45.3 的 class 文件。在 Sun 的 1.2 版本 SDK 中,Javac 编译器默认产生版本号为 45.3 的 class 文件。但如果在 javac 命令行中指定了 -target 1.2 标志,1.2 版本的编译器将产生版本号为 46.0 的 class 文件。1.0 或 1.1 版本的 JVM 上不能运行使用-target 1.2 标志所产生的 class 文件。

JVM 实现的 第二版中修改了对 class 文件主版本号和次版本号的解释。对于第二版而言,class 文件的主版本号与 Java 平台主发布版的版本号保持一致(例如:在 Java 2 平台发布版上,主版本号从 45 升至 46),次版本号与特定主平台发布版的各个发布版相关。因此,尽管不同的 class 文件格式可以由不同的版本号表示,但版本号不一样并不代表 class 文件格式不同。版本号不同的原因可能只是因为 class 文件由不同发布版本的 java 平台产生,可能 class 文件的格式并没有改变。

上面三段节选自《深入 Java 虚拟机》,啰嗦一堆,JDK 1.2 开启了 Java 2 的时代,但那个年代仍然离我们很远,我们当中很多少直接跳在 JDK 1.4 上的,我也差不多,只是项目要求不得不在一段时间里委屈在 JDK 1.3 上。不过大致我们可以得到的信息就是每个版本的 JDK 编译器编译出的 class 文件中都带有一个版本号,不同的 JVM 能接受一个范围 class 版本号,超出范围则要出错。不过一般都是能向后兼容的,知道 Sun 在做 Solaris 的一句口号吗?保持对先前版本的 100% 二进制兼容性,这也是对客户的投资保护。



解决方案:遇到这个问题就只有重新的编译项目,,然后部署,,一个J2EE项目是在被导入的时候编译,首先要修改IDE所用jdk的版本,,然后把项目导入进去以后再单独修改项目的jdk版本,,具体的修改看图片。。

DSC0001.png
 
  
DSC0002.png
 
DSC0003.png
 
DSC0004.png
 就这几个地方就可以了。。


六.su的应用
功能:变更用户
用法:su [-flmp][--help][--version][-][-c <指令>][-s][用户帐号]
参数:
-c<指令>或--command=<指令>:执行完指定的指令后,即恢复原来的身份
--session-command=COMMAND:跟-c相同,但是不生成新的会话
-f或--fast:适用于csh与tsch,使shell不用去读取启动文件
-.-l或--login:改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,LOGNAME,PATH变量
-m,-p或--preserve-environment:变更身份时,不要变更环境变量
-s或--shell= :指定要执行的shell
--help:显示帮助
--version :显示版本信息


例子:su回车直接是切换到root用户
su - 用户名  切换到用户并且带着所有的全局环境变量
sudo 用户  则是带着用的权限
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-181063-1-1.html 上篇帖子: Linux 中断学习之小试牛刀篇 下篇帖子: Linux sock_sendpage空指针漏洞分析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表