Java官网现已支持Linux系统 (java官网linux)

: 为开源软件世界打开新局面

Linux系统自诞生以来一直是开源软件世界的重要组成部分,拥有庞大的用户群体和极高的安全性,成为众多软件开发人员和企业的首选系统平台。而Java语言则以其跨平台性和强大的应用性能,也成为当今软件开发领域不可或缺的一部分,应用范围越来越广泛。然而,Java语言在Linux系统上的使用则长期面临着一些挑战,其原因主要在于Java平台和Linux平台之间的不兼容问题。因此,当Java官网宣布其现已支持Linux系统时,对于开源软件世界来说,这是一个开创新局面的重大事件。

对于Java语言在Linux系统上的应用,一直是争议不断。虽然Java平台的跨平台性能够使得Java程序在不同的操作系统上运行,从而使得Java语言可以在Linux系统上得到广泛应用,但Java语言与Linux平台的系统库不兼容,导致开发人员在进行Java程序开发时,需通过各种方式解决平台问题,而且解决方法并不总是稳定可靠的。这不仅增加了Java程序的开发成本和复杂度,还可能导致Java应用程序在Linux系统上的运行出现问题。

因此,当Java官网宣布其即将支持Linux系统时,发出了令人鼓舞的消息。Java官网针对Linux用户开发了一个统一的Java发布库,使得Linux用户可以轻松地在不同的Linux发行版之间使用Java,从而使得Java程序在Linux上的应用开发更加专业、高效和可靠。此外,Java官网还提供了开源工具,使得Linux用户可以在Linux系统上管理Java安装和升级,从而使Java语言在Linux系统上的应用成为可能。

Java语言在Linux系统上的应用,将为开源软件世界带来巨大的变化。作为两个最为流行的开源技术,Java和Linux的相互协作将使得Java语言得到更加普及和应用,同时,Linux也将成为更加强大和安全的应用平台。Java语言在Linux上的成功应用,将吸引更多开源软件开发人员投入到这个领域,推动开源技术的发展。Java语言在Linux上的应用,将为软件开发人员提供更加开放、灵活和高效的开发环境,从而帮助他们更加成功地开发独特的应用程序。

的消息,对于开源软件世界来说是一个具有里程碑意义的重大事件。它将彻底解决Java语言在Linux系统上遇到的问题,为软件开发人员带来更加灵活、高效和可信赖的开发环境,开启了Java和Linux相互协作的新篇章,为全球软件开发领域带来巨大的发展机遇。

相关问题拓展阅读:

java程序里调用linux命令

Java 可以通过 Runtime 调用Linux命令,形式如下:

Runtime.getRuntime().exec(command)

但是这样执行时没有任何输出,因为调用 Runtime.exec 方法将产生一个本地的进程,并返回一个Process子类的实例(注意:Runtime.getRuntime().exec(command)返回的是一个Process类的实例)该实例可用于控含樱茄制颂裂进程或取得进程的相关信息。

由于调用 Runtime.exec 方法所创建的子进程没有自己的终端或控制台,因此该子进程谈察的标准IO(如stdin,stdou,stderr)都通过 Process.getOutputStream(),Process.getInputStream(), Process.getErrorStream() 方法重定向给它的父进程了。

用户需要用这些stream来向子进程输入数据或获取子进程的输出,下面的代码可以取到 linux 命令的执行结果:

try {

String cmd = new String{”/bin/sh”, “-c”, ” ls “};

Process ps = Runtime.getRuntime().exec(cmd);

BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));

StringBuffer = new StringBuffer();

String line;

while ((line = br.readLine()) != null) {

.append(line).append(”\n”);

}

String result = .toString();

System.out.println(result);

} catch (Exception e) {

e.printStackTrace();

}

1.Java调用shell

Java语言以其跨平台性和简易性而著称,在Java里面的lang包里(java.lang.Runtime)提供了一凯历搜个允许Java程序与该程序所运

行的环境交互的接口,这就是Runtime类,在Runtime类里提供了获取当前运行环境的接口。

其中的exec函数返回一个执行shell命令的子进程。exec函数的具体实现形式有以下几种:

public Process exec(String command) throws IOException

public Process exec(String command,String envp) throws

IOException

public Process exec(String command,String envp,File dir) throws

IOException

public Process exec(String cmdarray) throws IOException

public Process exec(String cmdarray, String envp) throws

IOException

public Process exec(String cmdarray, String envp,File dir)

throws IOException

我们在这里主要用到的是之一个和第四个函数,具体方法很简单,就是在exec函数中传递一个代表命令的字符串。exec函数返回的是一个Process类

型的类的实例。Process类主要用来控制进程,获取进程信息等作用。(具体信息及其用法请参看Java doc)。

1)执行简单的命令的方法:

代码如下:

上面的代码首先是声明了一个代表命令的字符串commands,它代表了ls -l

这个命令。之后我们用Runtime.getRuntime().exec(commands)来生成一个子进程来执行这个命令,如果这句话运行成功,则

命令 ls -l 运行成功(由于没有让它显示,不会显示ls -l

的结果)。后面的流操作则是获取进程的流信息,并把它们一行行输出到屏幕。2)执行带有参数的命令(尤其是参数需要用引号的)时则需要用String的数组来表示整个命令,而且要用转义符把引号的特殊含义去除,例如我们要执行

find / -name “*mysql*” -print 时,用如下代码

Java 可以通过 Runtime 调用Linux命令,形式如下:

Runtime.getRuntime().exec(command)

但是这样执行时没有任何输出,因为调用 Runtime.exec 方法将产生一个本地的进程,并返回一个Process子类的实例(注意烂兆:Runtime.getRuntime().exec(command)返回的是一个Process类的实例)该实例可用于控制进程或取得进程的相关信息。

由于调用 Runtime.exec 方法所创建的子进程没有自己的终端或控制台,因此该子进程的标准IO(如stdin,stdou,stderr)都通过 Process.getOutputStream(),Process.getInputStream(), Process.getErrorStream() 方法重定向给它的父进程了。

用户需要用这些stream来向子进程输入数据或获取子进程的输出,下面的代码可以取到 linux 命令的盯历执行结果:

以下方法支持Linux和windows两个系统的命令行调用。还用到了apache的lang工具包commons-lang3-3.1.jar来判断操作系统类型、也用仿纳到了和log4j-1.2.16.jar来打印日志。至于rm -rf 是否能成功删除文件,可以手动去调用命令行试试颂大闹。

private String callCmd(String cmd) throws InterruptedException, UnHandledOSException, ExecuteException {

if(SystemUtils.IS_OS_LINUX){

try {

// 使用Runtime来执行command,生成Process对象

Process process = Runtime.getRuntime().exec(

new String { “/bin/sh”, “-c”, cmd });

int exitCode = process.waitFor();

// 取得命令结果的输出流

InputStream is = process.getInputStream();

// 用一个读输出流类去读

InputStreamReader isr = new InputStreamReader(is);

// 用缓冲器读行

BufferedReader br = new BufferedReader(isr);

String line = null;

StringBuilder  = new StringBuilder();

while ((line = br.readLine()) != null) {

System.out.println(line);

.append(line);

}

is.close();

isr.close();

br.close();

return .toString();

} catch (java.lang.NullPointerException e) {

System.err.println(“NullPointerException ” + e.getMessage());

logger.error(cmd);

} catch (java.io.IOException e) {

System.err.println(“IOException ” + e.getMessage());

}

throw new ExecuteException(cmd + “执行出错!”);

}

if(SystemUtils.IS_OS_WINDOWS){

Process process;

try {

//process = new ProcessBuilder(cmd).start();

String param_array = cmd.split(“+”);

ProcessBuilder pb = new ProcessBuilder(param_array);

process = pb.start();

/*process=Runtime.getRuntime().exec(cmd);*/

int exitCode = process.waitFor();

InputStream is = process.getInputStream();

InputStreamReader isr = new InputStreamReader(is);

BufferedReader br = new BufferedReader(isr);

String line;

StringBuilder  = new StringBuilder();

while ((line 野罩= br.readLine()) != null) {

System.out.println(line);

.append(line);

}

is.close();

isr.close();

br.close();

return .toString();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

throw new ExecuteException(cmd + “执行出错!”);

}

throw new UnHandledOSException(“不支持本操作系统”);

}

 

以下是测试代码

public class ExecuteCmdCommand {

static Logger logger = Logger.getLogger(ExecuteCmdCommand.class.getName());

public static void main(String args) throws InterruptedException, UnHandledOSException, ExecuteException {

// TODO Auto-generated method stub

ExecuteCmdCommand executeCmdCommand = new ExecuteCmdCommand();

if(SystemUtils.IS_OS_LINUX){

executeCmdCommand.callCmd(“ls -al”);

}else if(SystemUtils.IS_OS_WINDOWS){

executeCmdCommand.callCmd(“dir”);

}else{

System.out.println(“不支持的OS”);

}

}

public class ExecuteException extends Exception {

 

    public ExecuteException() {

super();

// TODO Auto-generated constructor stub

    }

 

    public ExecuteException(String arg0) {

super(arg0);

// TODO Auto-generated constructor stub

    }

 

     

}

public class UnHandledOSException extends Exception {

public UnHandledOSException() {

super();

// TODO Auto-generated constructor stub

}

public UnHandledOSException(String arg0) {

super(arg0);

// TODO Auto-generated constructor stub

}

}

private String callCmd(String cmd) throws InterruptedException, UnHandledOSException, ExecuteException {

if(SystemUtils.IS_OS_LINUX){

try {

  // 使用Runtime来执行command,生成Process对象

  Process process = Runtime.getRuntime().exec(

new String { “/bin/sh”, “-c”, cmd });

  int exitCode = process.waitFor();

  // 取得命令结果的输出流

  InputStream is = process.getInputStream();

  // 用一个读输出流类去读

  InputStreamReader isr = new InputStreamReader(is);

  // 用缓冲器读行

  BufferedReader br = new BufferedReader(isr);

  String line = null;

  StringBuilder  = new StringBuilder();

  while ((line = br.readLine()) != null) {

      System.out.println(line);

      .append(line);

  }

  is.close();

  isr.close();

  br.close();

  return .toString();

} catch (java.lang.NullPointerException e) {

  System.err.println(“NullPointerException ” + e.getMessage());

  logger.error(cmd);

} catch (java.io.IOException e) {

  System.err.println(“IOException ” + e.getMessage());

}

throw new ExecuteException(cmd + “执行出错!”);

}

if(SystemUtils.IS_OS_WINDOWS){

Process process;

try {

  //process = new ProcessBuilder(cmd).start();

  String param_array = cmd.split(“+”);

  ProcessBuilder pb = new ProcessBuilder(param_array);

  process = pb.start();

  /*process=Runtime.getRuntime().exec(cmd);*/

  int exitCode = process.waitFor();

  InputStream is = process.getInputStream();

  InputStreamReader isr = new InputStreamReader(is);

  BufferedReader br = new BufferedReader(isr);

  String line;

  StringBuilder  = new StringBuilder();

 

  while ((line = br.readLine()) != null) {

      System.out.println(line);

      .append(line);

  }

  is.close();

  isr.close();

  br.close();

  return .toString();

} catch (IOException e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

}

throw new ExecuteException(cmd + “执行出错!”);

}

throw new UnHandledOSException(“不支持本操作系统”);

    }

如何将javaweb项目部署到linux下

一般都在windows下开发的,现在部署到linux下:

1,将此槐老项目达成war包(用eclipse,项目右键–Export–选择war file)

2,将tomcat(用winSCP当然你也可以用secureCRT,用securCRT需要建立sftp(即上传文件的目录),用put tomcat命令)考到ilunx对应的目录下

3,然后将项目的war包放到tomcat的webapps目录下

4,启动tomcat(命令:./startup.sh(linux下启动tomcat是.sh文件而非.bat文件))

遇到问题如下:

运行./startup.sh 是报错

-bash: ./startup.sh: Permission denied

原因:明基没有运行.sh的权限

解决:chmod 777 *.sh

755 代表用户对该文件拥有读,写,执行的权限,同组其他人员拥有执行和读的权限,没有写的权限,其他用户的权限和同组人员权限一样。

777代表,user,group ,others ,都有读写和可执行权限。

获得权限后再运行./startup.sh命令时报错:

This file is needed to run this program

原因:该文件需要一个运行环境(即配置jdk环境变量)

解决:JAVA_HOME=/usr/java/jdk1.6.0_25/(当然这个目录根据自己的jdk安装目录)

然后在运行./startup.sh 提示:

Using CATALINA_BASE: /usr/local/sarft/apache/apache-tomcat-6.0.29

Using CATALINA_HOME: /usr/local/sarft/apache/apache-tomcat-6.0.29

Using CATALINA_TMPDIR: /usr/local/sarft/apache/apache-tomcat-6.0.29/temp

Using JRE_HOME: /usr/java/jdk1.6.0_25/

Using CLASSPATH: /usr/local/森升sarft/apache/apache-tomcat-6.0.29/bin/bootstrap.jar

如果提示以上信息表明 tomcat启动成功!

大功告成,运行项目,正常跑起!

PS:这个应该属于很初级的,不过对于本人来说,毕竟是之一次,从发现问题,到解决问题也许到了一些。

java官网linux的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java官网linux,Java官网现已支持Linux系统,java程序里调用linux命令,如何将javaweb项目部署到linux下的信息别忘了在本站进行查找喔。


数据运维技术 » Java官网现已支持Linux系统 (java官网linux)