命令行环境下Java编译运行

1. java的运行机制的基本概念:

源文件 也就是我们熟知的.java文件。

类文件  .class文件是编译器由.java文件编译而成。众所周知,Java的跨平台性在于Java虚拟机(JVM)这一层对硬件的隔离,而.class文件可以理解为JVM中的执行文件(自己的理解,可能不太准确)。里面存储的是java字节码,javabytecode 是基于栈的(stackbased)(关于字节码和JVM更详细的官方解释可以参照 The JavaVirtual Machine Specification ,如果嫌那本书太厚,另外再推荐一本 Programmingfor the Java Virtual Machine)。

编译 Java的编译一般是指从源文件(.java文件)到类文件(.class文件)的转化过程。在JDK命令行中是 javac 命令(javacompiler的缩写~跟C语言木关系的~)

运行 在JVM中执行.class文件。是 java 命令。

2. linux 下安装jdk

首先在linux下安装jdk,如果出现提示权限不够(且root下也提示权限不够),可用#ls-l filename命令查看一下,如果显示类似如:

-rw-rw-rw- 1 root root ….

则表示任何用户都没有可执行权限(即使是root用户)。

解决方法:

#chmod a+x filename

这样,安装好后,就可以接下来进行环境变量的配置了。

我们需要设置三个环境变量:JAVA_HOME、PATH 和 CLASSPATH。

JAVA_HOME:该环境变量的值就是 Java 所在的目录,一些 Java 版的软件和一些 Java 的工具需要用到该变量,设置 PATH 和 CLASSPATH 的时候,也可以使用该变量以方便设置。

PATH:指定一个路径列表,用于搜索可执行文件的。执行一个可执行文件时,如果该文件不能在当前路径下找到,则依次寻找 PATH 中的每一个路径,直至找到。或者找完 PATH 中的路径也不能找到,则报错。Java 的编译命令  (javac),执行命令 (java)和一些工具命令 (javadoc, jdb 等) 都在其安装路径下的 bin 目录中。因此我们应该将该路径添加到 PATH 变量中。

CLASSPATH:也指定一个路径列表,是用于搜索 Java 编译或者运行时需要用到的类。在 CLASSPATH 列表中除了可以包含路径外,还可以包含.jar 文件。Java 查找类时会把这个  .jar 文件当作一个目录来进行查找。通常,我们需要把 JDK 安装路径下的 jre/lib/rt.jar (Linux: jre/lib/rt.jar)包含在 CLASSPATH 中。

PATH 和 CLASSPATH 都指定路径列表,列表中的各项 (即各个路径) 之间使用分隔符分隔。在 Windows 下,分隔符是分号 (;),而在 Linux 下,分隔符是冒号  (:)。

目前这两步,服务器JDK安装和环境变量设置都已经弄好了。

3. 编译运行命令

编译

javac [-d] [-o] [-verbose] [-classpath][-sourcepath]

-d, 指定生成的.class文件存放目录,一般省略则默认放在java源文件同一目录下

-o, 这个选项告诉javac优化内联的static,final以及privite成员函数所产生的码。

-verbose,此选项告知java显示出有关被编译的源文件和任何被调用类库的信息。如-verbose:class能看到各种加载的信息,-verbose:gc 是garbagecollection 的信息

-classpath,设定要用到的类路径,可以是目录,jar文件,zip文件(里面都是class文件),值得注意的是,此classpath中的内容是会覆盖掉环境变量CLASSPATH里面的设定。也可以省略,省略则默认使用环境变量$CLASSPATH路径。

所以一般classpath的设定都是:当前目录加环境变量CLASSPATH设置目录,如

javac  -classpath .:$CLASSPATH    abc.java java基本类一般都在JDK环境变量$CLASSPATH中指定好路径了

自己需要用到的第三方类一般都放在文件当前目录下,用.指定路径即可

若自己需要添加一些类可以在.:$CLASSPATH后面添加“:类的具体路径”。

-sourcepath, 设定要编译的java文件路径,可以是目录,jar文件,zip文件(里面都是java文件)。

若编译的是jar包中的主类文件abc.java时,一般编译整个包javac edu.test.jar或者包文件夹javac ./edu/test。

一般当java文件中有多个需要编译时,可以逐一列出,也可以将文件名列在一个文件中,名称间用空格或者回车行来进行分隔,然后在命令行中使用该列表名,名字前冠以@字符,如:

javac @usr/test/sourcefile.list             目录usr/test 下的sourcefile.list

说明

1)一般,对于只有一个出口主函数main,其他java文件是以内联类的形式被主函数调用的多个java文件组成的工程来说,编译时只需要对出口主函数main所在java文件编译即可,工程中的其他java文件会自动关联编译。

2)对于程序中调用到了第三方类或者package的情况,则一般先需要在程序文件中加入import第三方类或者jar包.*  如

import edu.test.abc  引用jar包edu.test下的abc.java,如果直接引用文件夹的话,则是edu/test文件夹下的abc.java文件。为稳妥,一般都引用整个包内文件import edu.test.*。

(jar包名对应文件夹路径,将某个路径文件夹下的所有java文件进行打包即为jar包,引用时可以直接引用文件夹)

编译时需要将jar包路径或者文件夹根目录,如edu的路径加入到classpath中。一般常把jar包或者根文件夹拷贝到当前目录下,指定classpath为.,编译器自动会从当前目录开始寻找。

运行

java [-classpath] [-sourcepath]

-classpath和编译时一致,指定运行时要搜索的类路径。需要注意的是,由于所要执行的类也是要搜索的类的一部分,所以一定要把这个类的路径也放到classpath设置里,故在要执行的类的路径里执行java命令时,一定要加上.表示当前目录也搜索。

-sourcepath 指需要运行的目标文件名(不要后缀名),如编译javac a.java则运行java a。若运行的是jar包中的主类文件时需要指出包路径并要在class名前带上完整的包名,如java edu,test.abc。且该包的根目录(edu所在文件夹路径)需要包含在classpath中。

说明:

1)文件搜索时,系统只会向下,从指定目录向其子目录搜索,不会溯源向其父祖目录搜索。

2)运行时,classpath应同时包含执行的目录和调用类的目录,一般两者放在同一根目录下,运行时在根目录下运行。不然会出现错误找不到运行的main函数。如

调用的类文件./com/bao/ws/h.class,执行文件为./com/bao/bs/a.class,classpath应包含.路径

Linux下Java 编译运行说明的更多相关文章

  1. Windows/Linux javac/java编译运行引入所需的jar包

    > Windows 假设要引用的jar放在D:/test目录下,名字为t1.jar, java源文件放在D:/test/src目录下,名字为t2.java. 编译: javac  -cp  d: ...

  2. linux下怎么编译运行C语言程序?

    linux下的C语言编译器是gcc,C++的编译器是g++. linux下编程可以使用编辑器vi或vim,建议使用vim,因为它有语法高亮显示.程序编写好后,假设你的程序名为test.c,可以使用gc ...

  3. linux下如何编译运行c程序

    GCC是Linux操作系统下一个非常重要的源代码编译工具,有着许多重要的选项,支持许多不同语言的编译,如C.C++.Ada.Fortran.Objective.Perl.Python.Ruby以及Ja ...

  4. 如何用javac 和java 编译运行整个Java工程 (转载)【转】在Linux下编译与执行Java程序

    如何用javac 和java 编译运行整个Java工程 (转载)  http://blog.csdn.net/huagong_adu/article/details/6929817 [转]在Linux ...

  5. Windows/Linux下引用jar包,并用javac/java编译运行

    Windows/Linux下引用jar包,并用javac/java编译运行,有需要的朋友可以参考下. 1> Windows 假设要引用的jar放在D:/test目录下,名字为t1.jar, ja ...

  6. JAVA 基础开发环境 vscode 搭建 Windows下VSCode编译运行简单java

    JAVA 基础开发环境 vscode 搭建 来源 https://www.cnblogs.com/freewsf/p/7744728.html 对于使用 Visual Studio Code 的 Ja ...

  7. Linux下java nohup 后台运行关闭后进程停止的原因,不挂断后台运行命令

    Linux下java nohup 后台运行关闭后进程停止的原因,不挂断后台运行命令 今天写sh脚本发现一终止命令程序就停止运行了,检查了很久才发现后面少了个&字符导致的!错误写法:nohup ...

  8. linux下java调用.so文件的方法1: JNI

    摘自http://blog.163.com/squall_smile/blog/static/6034984020129296931793/ https://my.oschina.net/simabe ...

  9. linux下Java环境的配置

    linux下Java环境的配置 现在用linux的朋友越来越多了,前几天就有两个朋友问我linux下怎么配置java环境,我想还有很多朋友想了解学习这方面的东西,就写一个完全一点的linux java ...

随机推荐

  1. An NIO.2 primer--reference

    Part 1: The asynchronous channel APIs The More New I/O APIs for the Java™ Platform (NIO.2) is one of ...

  2. Response乱码的解决方法

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletExcept ...

  3. Linux下安装GAMS建模优化工具

    1.下载GAMS wget http://d37drm4t2jghv5.cloudfront.net/distributions/24.5.6/linux/linux_x64_64_sfx.exe 2 ...

  4. js获取元素transform参数得出的个人理解

    之前写页面的时候有试过想用js获取某些元素的translate的数值什么的,但是translate又是transform的子样式(勉强说说),理所当然就是先获取transform样式,再读里面的值. ...

  5. 关于自己的ES6使用姿势

    ES6今年开始学的,从看文档到实践,以下是自己使用过的一些ES6的东西: 1:for-of 语法: 最喜欢的还是它支持了break/continue的语法,而且还修改了for-in的缺陷,简要写法: ...

  6. 深入理解Javascript变量作用域

    在学习JavaScript的变量作用域之前,我们应当明确几点: a.JavaScript的变量作用域是基于其特有的作用域链的. b.JavaScript没有块级作用域. c.函数中声明的变量在整个函数 ...

  7. ios>android>javaee

    外面就业很多年的认识给出来我这个结论,请问各位有什么看法?

  8. 反射+javacsv+scv文件构建资源获取

    1.反射之前已经写过,大家可以在http://www.cnblogs.com/myadmin/p/5282628.html中大概了解下.同时请大家指正. javacsv.jar:java中用来处理cs ...

  9. [DEncrypt] MySecurity--安全加密/Base64/文件加密 (转载)

    点击下载 MySecurity.zip 这个类是关于加密,解密的操作,文件的一些高级操作1.MySecurity  加密字符串2.MySecurity  加密字符串 密钥为系统默认 012345678 ...

  10. asp.net <%%> <%#%><%=%><%@%><%$%>用法与区别

    1.<% %>用来绑定后台代码 如: < % for(int i=0;i<100;i++) { Reaponse.Write(i.ToString()); } %> 2. ...