zoukankan      html  css  js  c++  java
  • ubuntu命令行下java工程编辑与算法(第四版)环境配置

    ubuntu命令行下java工程编辑与算法(第四版)环境配置

    在学习算法(第四版)中的实例时,因需要安装配套的java编译环境,可是在编译java文件的时候总是出各种错误,特在此总结一下。

    ubuntu下java环境配置

    由于网上教程比较多,而且也较全面,特此摆放一个链接,跟着此教程总就可以配置好oracle的java jdk,如果想更加省事,直接在命令行下键入java,会提示安装各种开源java jdk,只需要一个命令即可:

    1. sudo apt-get install xxxx //对应java版本 

    algorithms(第四版)相对应的资料下载

    相对应的算法jar包
    相对应的算法数据
    对应的github,熟悉java的人,可以通过eclipse或idea进行maven和gradle代码配置
    算法这门课的配置流程

    测试安装环境

    跟着官方教程走,环境搭建一般没有问题,测试成功的一个实例

    1. forest@forest-E351:~/java/code$ javac -d . RandomSeq 
    2. forest@forest-E351:~/java/code$ java edu.princeton.cs.algs4.RandomSeq 5 100.0 200.0 
    3. //运行需要指定包名,否则无法运行,总是指出少主类 
    4. 168.00 
    5. 110.52 
    6. 152.05 
    7. 127.17 
    8. 127.25 

    javac 与 java命令

    • javac
      javac用于编译java源文件,生成.class文件
      语法:javac [option] source
      常用的[option]选项:
      A、-classpath <路径>(-cp缩写):指定要使用的类路径或要使用的jar包的路径(jar文件、zip文件(里面都是错啦搜索文件)),使用后
      会覆盖CLASSPATH的设定
      B、-d <路径> :指定源文件编译后生成.class文件的存放位置
    • java
      java用于运行javac编译后生成的.class文件
      语法:java [option] classname [arguments]
      常用的[option]选项:
      A、-classpath <路径>(-cp缩写):指定要使用的类路径或要使用的jar包的路径(jar文件、zip文件(里面都是错啦搜索文件)),使用后
      会覆盖CLASSPATH的设定
      B、[arguments]:传递给main函数的参数
    • 用一个简单实例来阐述上面的使用方法
      类TestT引用类T,其代码分别如下:
    1. package a.b; //所在目录/src/java/code/a/b 
    2. import c.d.T;  
    3. public class TestT {  
    4. public static void main(String[] args) {  
    5. T t = new T();  
    6. t.p();  
    7. }  
    8. }  
    9. package c.d;   //所在目录/src/java/code/tmp/c/d/ 
    10. public class T {  
    11. public void p(){  
    12. System.out.println("class:T");  
    13. }  
    14. }  

    输入javac编译和java执行命令之后

    1. //命令输入钱各个文件所在位置 
    2. forest@forest-E351:~/java/code$ tree 

    3. ├── a 
    4. │   └── b 
    5. │   └── TestT.java 
    6. └── tmp 
    7. └── c 
    8. └── d 
    9. └── T.java 
    10. forest@forest-E351:~/java/code/a/b$ javac -classpath ../../tmp TestT.java  
    11. forest@forest-E351:~/java/code$ tree 

    12. ├── a 
    13. │   └── b 
    14. │   ├── TestT.class    //相对应的字节码生成 
    15. │   └── TestT.java 
    16. └── tmp 
    17. └── c 
    18. └── d 
    19. ├── T.class     //相对应的字节码 
    20. └── T.java 
    21. forest@forest-E351:~/java/code$ java -cp .:tmp a/b/TestT   
    22. //.本地文件夹,表示TestT字节码;tmp用于寻找T字节码;包也是代表目录,tmp不需要详细写成tmp/c/d 
    23. // a/b/TestT用于指定主函数程序 
    24. class:T //程序运行结果 

    从shell脚本来查看java和javac的使用

    一般,一个工程下面都会有lib(引入的必要jar包),classes(保存.class文件),src(.java源代码)三个文件夹。
    java文件夹的目录结构如下,文件之间的关系是Client.java调用了DemoService.java的方法;ServerImpl.java调用了DemoService.java的方法;Server.java调用了ServerImpl.java和DemoService.java的方法;

    编译前的结构图:
    enter description here
    make.sh 编译脚本

    1.  
    2. #!/bin/bash  
    3.  
    4. # Get current position  
    5. TOP_DIR=$(pwd)  
    6.  
    7. # Add all necessary jars  
    8. LIBPATH=lib/commons-codec-1.6.jar:lib/commons-logging-1.1.1.jar 
    9. :lib/httpclient-4.2.5.jar:lib/httpcore-4.2.4.jar 
    10. :lib/junit-4.4.jar:lib/libthrift-1.0.0.jar:lib/log4j-1.2.14.jar 
    11. :lib/servlet-api-2.5.jar:lib/slf4j-api-1.5.8.jar:lib/slf4j-log4j12-1.5.8.jar  
    12.  
    13. #compile java file  
    14. # 编译生成的字节码放入本地目录下classes目录下 
    15. # $LIBPATH 表示DemoService.java所引用的jar包 
    16. #src/com/demo/DemoService.java 根据当前sh脚本所在目录找到所需要编译的程序 
    17. javac -cp $LIBPATH src/com/demo/DemoService.java -d ./classes/.  
    18. javac -cp $TOP_DIR/classes:$LIBPATH src/com/server/ServerImpl.java -d ./classes/.  
    19. javac -cp $TOP_DIR/classes:$LIBPATH src/com/server/Server.java -d ./classes/.  
    20. javac -cp $TOP_DIR/classes:$LIBPATH src/com/client/Client.java -d ./classes/. 

    run.sh运行脚本

    1.  
    2. #!/bin/bash  
    3.  
    4. #Get client/server  
    5. SIDE=$1  
    6.  
    7. # Get current position  
    8. TOP_DIR=$(pwd)  
    9.  
    10. # Add all necessary jars  
    11. LIBPATH=lib/commons-codec-1.6.jar:lib/commons-logging-1.1.1.jar 
    12. :lib/httpclient-4.2.5.jar:lib/httpcore-4.2.4.jar 
    13. :lib/junit-4.4.jar:lib/libthrift-1.0.0.jar 
    14. :lib/log4j-1.2.14.jar:lib/servlet-api-2.5.jar 
    15. :lib/slf4j-api-1.5.8.jar:lib/slf4j-log4j12-1.5.8.jar  
    16.  
    17. #run program  
    18. # 由于所引用的类的字节码都放在一个classes目录下,我们只需要引入一个目录即可 
    19. # $LIBPATH 引入本程序所需要的jar包 
    20. if [ $SIDE == "server" ];then  
    21. java -cp $TOP_DIR/classes:$LIBPATH com/server/Server  
    22. else  
    23. java -cp $TOP_DIR/classes:$LIBPATH com/client/Client  
    24. fi  

    编译后的结构图:
    enter description here

  • 相关阅读:
    MongoDB 学习笔记(七):主从复制与副本集
    MongoDB 学习笔记(六):备份与用户管理
    MongoDB 学习笔记(五):固定集合、GridFS文件系统与服务器端脚本
    MongoDB 学习笔记(四):索引
    MongoDB 学习笔记(三):分页、排序与游标
    MongoDB 学习笔记(一):安装及简单shell操作
    MongoDB 学习笔记(二):shell中执行增删查改
    mongoDB 入门指南、示例
    mongoDB 介绍(特点、优点、原理)
    企业级任务调度框架Quartz(7) 线程在Quartz里的意义(1)
  • 原文地址:https://www.cnblogs.com/forest-wow/p/6915165.html
Copyright © 2011-2022 走看看