zoukankan      html  css  js  c++  java
  • JAVA和JAVAC 命令行;java 带有包名编译并运行,附带外部依赖jar包运行

    因为欣赏所以转载 , 原文地址

    http://www.cnblogs.com/JeffChen/archive/2008/01/15/1039708.html

    http://blog.csdn.net/czw698/article/details/44353453  

    javac和java命令行中的-classpath选项

    这是个很基础的问题,但是因为基本上都是用现有的IDE工具 来开发java程序,所以很少有人意识到这一点。
    javac
    -classpath,设定要搜索类的路径,可以是目录,jar文件,zip文件(里面都是class文件),会覆盖掉所有在CLASSPATH里面的设定。
    -sourcepath, 设定要搜索编译所需java 文件的路径,可以是目录,jar文件,zip文件(里面都是java文件)。
    所以一个完整的javac命令行应该是这样的,
    假设abc.java在路径c:src里面,在任何的目录的都可以执行以下命令来编译。
    javac -classpath c:classes;c:jarabc.jar;c:zipabc.zip -sourcepath c:sourceproject1src;c:sourceproject2 libsrc.jar;c:sourceproject3libsrc.zip c:srcabc.java

    表示编译需要c:classed下面的class文件,c:jarabc.jar里面的class文件,c:zipabc.zip里面的class文件
    还需要c:sourceproject1src下面的源文件,c:sourceproject2 libsrc.jar里面的源文件,c:sourceproject3libsrc.zip里面的源文件,
    注意:jar,zip里面的源文件不会有什么改动,目录下的源文件,有可能会被重新编译。
    java
    -classpath, 设定要搜索的类的路径,可以是目录,jar文件,zip文件(里面都是class文件),会覆盖掉所有的CLASSPATH的设定。
    由于所要执行的类也是要搜索的类的一部分,所以一定要把这个类的路径也放到-classpath的设置里面。
    表现在,在要执行的类的路径里面执行java时,一定要添加上点号(.)标示本目录也要搜索。

    假设abc.class在路径c:src里面
    可以在任何路径下执行以下命令
    java -classpath c:classes; c:jarabc.jar;c:zipabc.zip;c:src abc

    问题:如果main.class属于c:jarabc.jar,并且在com.cnblogs.jeffchen这个包里,那么执行java -classpath c:classes;c:jarabc.jar;c:zipabc.zip;com.cnblogs.jeffchen.main即可, 但是如果classpath中包含多个jar包呢?并且其他jar包中也有com.cnblogs.jeffchen会发生什么情况?错误?

    在windows下,
    文件路径的分割符为反斜杠     
    类或者java文件列表的分割符为分号 ;

    在linux下
    文件路径的分隔符位斜杠 /
    类或者java文件列表的分隔符为冒号 :

    一个linux下编译和运行的例子
     /usr/local/java/bin/javac -classpath /tmp/javatest/lib/mail-1.3.3.jar -d /tmp/javatest/bin/ /tmp/javatest/src/jp/co/realseed/Capability.java

    /usr/local/java/bin/java -classpath /tmp/javatest/lib/mail-1.3.3.jar:/tmp/javatest/bin/ jp.co.realseed.Capability

    -----------------------------------------------------------------

    今天写了个测试程序,带有包名,竟然忘记了怎么编译和运行,所以现在记下来

    1 带包程序的编译与运行

    1.  
      package test;
    2.  
       
    3.  
      public class HiveJdbcClient {
    4.  
       
    5.  
      public static void main(String[] args) {
    6.  
      System.out.println("-------------------");
    7.  
      }
    8.  
       
    9.  
      }

    程序中带有包名,编译应该使用

    javac -d . HiveJdbcClient.java

    这里在当前目录会生成一个 test目录,里面就是 HiveJdbcClient.class 文件

    运行的时候命令:

    java test.HiveJdbcClient

    运行结果:

    -------------------


    2 对于需要依赖其他jar的运行

    在实际的运行中,可能需要依赖额外的jar包,那么javac 和 java 应该怎么做呢

    使用 java -cp 指定依赖的jar包就可以。例子如下:

    HiveJdbcClient.java

    #package test;
     
    import java.sql.Connection;
     
     
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    // import org.apache.hive.jdbc.HiveDriver;
     
    public class HiveJdbcClient {
     
        private static String driverName = "org.apache.hive.jdbc.HiveDriver";
     
        public boolean run() {
     
            try {
                Class.forName(driverName);
                Connection con = null;
                con = DriverManager.getConnection(
                        "jdbc:hive2://192.168.17.15:10000/hivedb", "hiveuser", "hiveuser");
                Statement stmt = con.createStatement();
                ResultSet res = null;
     
                String sql = "select count(*) from test_data";
     
                System.out.println("Running: " + sql);
                res = stmt.executeQuery(sql);
                System.out.println("ok");
                while (res.next()) {
                    System.out.println(res.getString(1));
     
                }
                return true;
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("error");
                return false;
            }
     
        }
     
        public static void main(String[] args) throws SQLException {
            HiveJdbcClient hiveJdbcClient = new HiveJdbcClient();
            hiveJdbcClient.run();
        }
     
    }
    1. 里面的代码里,我们依赖了hive的jdbc jar 包,在编译和运行时我们也要加上依赖的jar包,需要注意的是,使用 java -cp 有额外的jar的时候:在Linux下面ClassPath前面是一个点号加一个冒号;在Windows下面ClassPath前面是一个点号加一个分号
    javac -cp .;D:ochadoop4.0.1hive-0.13.1-cdh5.2.1-och4.0.1user_libhive--jdbc-0.13.1-cdh5.2.1.jar HiveJdbcClient.java

    运行命令:

    java -cp .;D:ochadoop4.0.1hive-0.13.1-cdh5.2.1-och4.0.1user_libhive-jdbc-0.13.1-cdh5.2.1.jar HiveJdbcClient

    这样就可以了

    如果我们把代码中的 package 注释打开(该文件又多了一个包)
    那么,编译时使用:

    javac -cp .;D:ochadoop4.0.1hive-0.13.1-cdh5.2.1-och4.0.1user_libhive--jdbc-0.13.1-cdh5.2.1.jar -d . HiveJdbcClient.java

    运行命令:

    java -cp .;D:ochadoop4.0.1hive-0.13.1-cdh5.2.1-och4.0.1user_libhive-jdbc-0.13.1-cdh5.2.1.jar test.HiveJdbcClient

    这样就可以了

    -d .(点) :代表的是把class 文件打到哪个目录里

    如有错误,恳求读者指出,发送到wu13213786609@outlook.com。
  • 相关阅读:
    LVS基于DR模式负载均衡的配置
    Linux源码安装mysql 5.6.12 (cmake编译)
    HOSt ip is not allowed to connect to this MySql server
    zoj 3229 Shoot the Bullet(无源汇上下界最大流)
    hdu 3987 Harry Potter and the Forbidden Forest 求割边最少的最小割
    poj 2391 Ombrophobic Bovines(最大流+floyd+二分)
    URAL 1430 Crime and Punishment
    hdu 2048 神、上帝以及老天爷(错排)
    hdu 3367 Pseudoforest(最大生成树)
    FOJ 1683 纪念SlingShot(矩阵快速幂)
  • 原文地址:https://www.cnblogs.com/WLCYSYS/p/13865776.html
Copyright © 2011-2022 走看看