zoukankan      html  css  js  c++  java
  • 如何用javac 和java 编译运行整个Java工程

    转自:http://blog.csdn.net/huagong_adu/article/details/6929817

            前言:本文教你怎么用javac和java命令,以及如何利用脚本(shell或bat)方便处理,并用简单的实例展示这些用法。

            IDE是把双刃剑,它可以什么都帮你做了,你只要敲几行代码,点几下鼠标,程序就跑起来了,用起来相当方便。你不用去关心它后面做了些什么,执行了哪些命令,基于什么原理。然而也是这种过分的依赖往往让人散失了最基本的技能,当到了一个没有IDE的地方,你便觉得无从下手,给你个代码都不知道怎么去跑。好比给你瓶水,你不知道怎么打开去喝,然后活活给渴死。
            之前用惯了Myeclipse,Java文件编译运行的命令基本忘得一干二净。现在项目出了原型,放到服务器上去测试,SSH一登陆上服务器就傻眼了,都是命令行,以前程序图标什么的都成了浮云,程序放上去了不知道怎么去编译运行,只能补补课了,下面做下补课笔记。
    一、javac命令
            
    javac 用于编译Java文件,格式为:
            java [options]  [sourcefiles] [@files]
            其中:
            options:命令行选项;
            sourcefiles:一个或多个要编译的源文件;
            @files:一个或多个对源文件进行列表的文件,有时候要编译的文件很多,一个个敲命令会显得很长,也不方便修改,可以把要编译的源文件列在文件中,在文件名前加@,这样就可以对多个文件进行编译,对编译一个工程很有用,方便,省事。
            有几个比较重要的选项:
            -d 用于指定编译成的class文件的存放位置,缺省情况下不指定class文件的存放目录,编译的class文件将和源文件在同一目录下;
            -classpath 可以简写成-cp,用于搜索编译所需的class文件,指出编译所用到的class文件的位置,如jar、zip或者其他包含class文件的目录,指定该选项会覆盖CLASSPATH的设定;
            -sourcepath用于搜索编译所需的源文件(即java文件),指定要搜索的源文件的位置,如jar、zip或其他包含java文件的目录;
            需要注意windows下和linux下文件路径分隔符和文件列表(即-classpath和-sourcepath指定的文件)分隔符的区别:
            windows下文件路径分隔符用 ,文件列表分隔符用分号 ;
            linux下文件路径分隔符用 / ,文件列表分隔符用冒号 :
    二、java命令
            
    java 用于执行程序,格式如下:
            java [options] classfile
            options:命令行选项,一般用于 -classpath 指定要执行的文件所在的位置以及需要用到的类路径,包括jar、zip和class文件目录,会覆盖CLASSPATH的设定
    三、脚本
            
    如果要敲的命令很长,每次要编译运行的时候都要重新敲一遍,这是一件很痛苦的事情,所以用脚本可以大大方便你的工作量。在linux下用shell脚本,windows下用bat批处理程序。因为是在linux下,我这里只是简单介绍一下shell,关于bat批处理程序的语法自己百度一下,不难。
    1. 开头
            linux有很多不同的shell,通常使用bash(bourne again shell),程序必须以下面的行开始:
            #!/bin/sh
            #!用来告诉系统用后面的参数来执行程序,这里使用的是/bin/sh
            要使你的脚本能够执行,还必须让这个文件有可执行权限,使用下面命令更改文件权限:
            chmod +x filename
    2. 注释
            以#开始的句子表示注释,一直到这行结束,多写注释有利于以后重新看的时候知道自己在做什么
    3. 变量
            shell的脚本的变量都是字符串,不用申明类型,定义的时候直接  变量=值  即可,用到变量的的时候用 $变量 或者 ${变量},echo命令用于打印,举个例子:

    [python] view plaincopy
     
    1. #!/bin/sh  
    2. # 定义变量words,值为hello world  
    3. words="hello world"  
    4. # 打印变量words的值  
    5. echo $words  

    4. 命令
            shell脚本里面可以直接任意使用linux命令,要用到什么命令直接敲进去即可。记住一些常用的命令:
            cd                   打开目录
            ls -l                 显示目录信息
            rm -fr              递归删除目录及下面的文件,不提示信息
            mkdir              创建目录
            pwd                显示当前路径
            kill -9 pid        强制杀掉某个进程号的进程
            pkill                杀掉某个名字的进程
            ps aux            显示运行进程信息
            netstat -pan 查看网络端口监听情况
    四、例子

            下面是文件compile,用于编译整个java工程,把编译的文件放到指定目录下:

    [python] view plaincopy
     
    1. #!/bin/sh  
    2. # Define some constants  
    3. ONSSERVER=ONSServer  
    4. PROJECT_PATH=/root/iot-oid  
    5. JAR_PATH=$PROJECT_PATH/lib  
    6. BIN_PATH=$PROJECT_PATH/bin  
    7. SRC_PATH=$PROJECT_PATH/src/$ONSSERVER  
    8.   
    9. # First remove the sources.list file if it exists and then create the sources file of the project  
    10. rm -f $SRC_PATH/sources  
    11. find $SRC_PATH/com -name *.java > $SRC_PATH/sources.list  
    12.   
    13. # First remove the ONSServer directory if it exists and then create the bin directory of ONSServer  
    14. rm -rf $BIN_PATH/$ONSSERVER  
    15. mkdir $BIN_PATH/$ONSSERVER  
    16.   
    17. # Compile the project  
    18. javac -d $BIN_PATH/$ONSSERVER -classpath $JAR_PATH/jdom.jar:$JAR_PATH/oro-2.0.8.jar @$SRC_PATH/sources.list  

            下面是文件run,用于执行程序:

    [python] view plaincopy
     
    1. #!/bin/sh  
    2.   
    3. # Define some constants  
    4. ONSSERVER=ONSServer  
    5. PROJECT_PATH=/root/iot-oid  
    6. JAR_PATH=$PROJECT_PATH/lib  
    7. BIN_PATH=$PROJECT_PATH/bin  
    8.   
    9. # Run the project as a background process  
    10. nohup java -classpath $BIN_PATH:$JAR_PATH/jdom.jar:$JAR_PATH/oro-2.0.8.jar com.ONSServer.DoUDPRequest &  

            以上是对javac、java和shell脚本的简单总结,用的比较简单,如有错误,欢迎指正!
            个人原创,脑力产品,实属不易,欢迎转载,转载请注明出处!

    参考文献:
            javac和java命令:
    http://jeffchen.iteye.com/blog/395671
    http://www.blogjava.net/pdw2009/archive/2008/06/12/207413.html?opt=admin
            shell编程:
    http://bbs.chinaunix.net/thread-391751-1-1.html
    http://hi.baidu.com/zccamy/blog/item/b5220f94517de10e7bf48057.html

  • 相关阅读:
    Eclipse,到了说再见的时候了——Android Studio最全解析
    iOS 获取当前时间以及计算年龄(时间差)
    USACO inflate
    Hauntbox:用于控制你的自己主动化、电子创意家居的开源硬件盒子
    使用开源的PullToRefreshScrollView scrollTo和scrollby遇到的问题
    iOS "The sandbox is not in sync with the Podfile.lock"解决方式
    [衣裳饰品]谈谈西装、手工西装和西装定制_时尚资讯_天涯论坛
    高级服装制版师、高级男女西服全套裁艺培训、带学徒
    中式男装制作
    关于意大利马兰戈尼时装与设计学院_马兰戈尼学院
  • 原文地址:https://www.cnblogs.com/x_wukong/p/4462416.html
Copyright © 2011-2022 走看看