在linux命令行 下学习编写java

雨点打透心脏的1/2处 2022-09-19 12:23 282阅读 0赞

对于新手来讲, 使用eclipse 等IDE来学习java是最为方便和效率的. 学习Java能令程序猿深刻地理解面向对象的编程思想 .

但Java 是一个跨平台的编程语言. 本文介绍下在命令行下学习java 的一个方案.

当然, Linux下也有eclipse IDE, 但在命令下学习能让人更深刻地理解CLASSPATH env variable的概念, javac java 命令的使用. 在工作中, 很多大型项目java代码都必须在unix服务器上编译, 反正就是提供1个别的java 学习方案啦.

1. 编写代码

1.1 目录结构

很多Java初学者教材的例子都会利用javac 命令编译java文件, 把编译后的class文件生成到源代码的当前目录下.

但我建议应该一开始就应该把源代码目录和编译后class的目录分开.

下面是1个列子

  1. gateman@TFPC ant_test $ tree
  2. .
  3. |-- build
  4. | `-- classes
  5. | `-- hello
  6. | `-- ant
  7. |-- build.xml
  8. `-- src
  9. `-- main
  10. `-- hello
  11. `-- ant
  12. `-- HelloAnt.java

如上面的目录结构, ant_test是1个项目文件夹.

其中src/main 目录用来存放源代码文件

build/classes 就用来存放编译后的class 文件了, 跟eclipse生成的项目结构类似.

1.2 文本编辑器

在命令下文本编辑工具无非就是vim, emacs, nano 了…

个人建议用vim, 当然使用居有gui的gvim, gedit等会更方便, 这些文本编辑器也居然语法高亮功能, 但是文本补全没有eclipse等IDE强大, 不过我建议新手还是老实得1个1个字符自己敲好一点.

下面我在/src/main下新写了1个java文件 ./hello/ant/HelloAnt.java

  1. package hello.ant;
  2. public class HelloAnt{
  3. public static void main(String[] args){
  4. System.out.println("hello ant, it's the my meeting with ant!\n");
  5. }
  6. }

注意这个文件包含了包层次 hello.ant

2. 编译代码

可以一开始尝试使用javac 来编译源代码. 但是当你写的源代码文件越来越多, 互相引用的时候, 使用javac就可能要执行多次不太方便了, 当然可以类似c语言一样使用makefile.

我没利用过makefile来编译java项目, 不过我估计跟c语言makefile的写法是差不多的.

这里我介绍下1个更流向的java编译工具 ant. 本屌公司也是用ant来编译java的.

就利用上面的目录结构作为例子.

在项目文件夹的根目录下新建1个build.xml

  1. <?xml version="1.0" encoding="GB2312" ?>
  2. <!-- a project, maybe includes many groups of tasks(targets) -->
  3. <project default="main" basedir=".">
  4. <!-- one of the tasks(target) -->
  5. <target name="main">
  6. <!-- compile -->
  7. <javac srcdir="src\main\hello\ant" destdir="build\classes">
  8. <!-- run -->
  9. <java classname="hello.ant.HelloAnt">
  10. <classpath>
  11. <pathelement path="build\classes"/>
  12. </classpath>
  13. </java>
  14. </target>
  15. </project>

其中上面的运行部分不添加也没所谓. 关键是compile的部分.

编写好build.xml后

在项目根目录下执行

ant -file build.xml 就可以编译了

  1. gateman@TFPC ant_test $ ant -file build.xml
  2. Buildfile: /media/store1/Studies/Java/java_start/ant_test/build.xml
  3. main:
  4. [javac] /media/store1/Studies/Java/java_start/ant_test/build.xml:10: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
  5. [javac] Compiling 1 source file to /media/store1/Studies/Java/java_start/ant_test/build/classes
  6. [java] hello ant, it's the my meeting with ant!
  7. [java]
  8. BUILD SUCCESSFUL
  9. Total time: 1 second

如果在build.xml 添加了运行部分, ant还会在编译后执行一次. 如上面的输出.

3. 运行class文件

ant编译后, 会把生成的class文件放到build/classes目录下(根据build.xml的设置).

我们可以利用java命令来单独执行行生成后的class

建议先查看下$CLASSPATH 变量, 如果添加了当前目录”.”的话就驱动哦啊

build/classes 下

执行 java hello.ant.HelloAnt

注意要把包层次补全了. 不如提示会找不到class

  1. gateman@TFPC classes $ java hello.ant.HelloAnt
  2. hello ant, it's the my meeting with ant!

如果想在其他目录执行那个class文件, 则必须利用-classpath 参数指定目录

如:

  1. gateman@TFPC ant_test $ pwd
  2. /home/gateman/Studies/Java/java_start/ant_test
  3. gateman@TFPC ant_test $ java -classpath ./build/classes hello.ant.HelloAnt
  4. hello ant, it's the my meeting with ant!
  5. gateman@TFPC ant_test $

4. 调试class文件

安装了jdk后, 我们可以利用jdb来调试java编译后的class

跟gdb 一样, 使用jdb的前提是编译时加入调试信息, 也就是在javac 后面加上-g 参数.

如果使用ant编译的话, 则要在 build.xml的 条目里添加两个属性: debug 和 debuglevel

  1. <javac srcdir="src\main\hello\ant" destdir="build\classes" debug="on" debuglevel="lines,vars,source"/>

具体怎么使用这里就不详细讲了, 估计跟gdb差不多.

  1. gateman@TFPC ant_test $ jdb -classpath ./build/classes hello.ant.HelloAnt
  2. 正在初始化jdb...
  3. > run
  4. 运行hello.ant.HelloAnt
  5. 设置未捕获的java.lang.Throwable
  6. 设置延迟的未捕获的java.lang.Throwable
  7. >
  8. VM 已启动: hello ant, it's the my meeting with ant!
  9. 应用程序已退出

发表评论

表情:
评论列表 (有 0 条评论,282人围观)

还没有评论,来说两句吧...

相关阅读