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命令
  • 如何将javaweb项目部署到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下的信息别忘了在本站进行查找喔。

香港服务器首选树叶云,2H2G首月10元开通。
树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/159842.html<

(0)
管理的头像管理
上一篇2025-03-17 11:58
下一篇 2025-03-17 11:59

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注