JAVA 命令行运行java项目

时间:2022-02-14 15:05:17
多年以来 一直使用的是IDE 来写java 项目,导致很多的最基础的东西都渐渐模糊了. 最近遇到一个问题就是如果命令行来运行一个java项目
当然这不是初学的那个运行 HelloWord.java ,而是一整个有多个包,多个java文件同时还有jar包依赖的一个项目
ok 先来复习一下运行HelloWord.java 首先cd 到HelloWord.java 的目录 然后: javac HelloWord.java  编译java文件, 然后会生成 HelloWord.class文件 然后执行 class文件 java HelloWord.class 如下图: JAVA 命令行运行java项目


上面是简单的 简单的编译运行的复习, 但是回到现在运行一整个项目, 冒失好像不是那么好运行的了
当然,如果用IDE 把项目导出为可执行的jar 包得话, 直接 用名 java -jar demo.jar 就可直接运行了, 这里说得时自己去编译然后执行
首先编译 javac 项目结构如图: JAVA 命令行运行java项目
带有一个简单的jar包 1. 首先cd 到 javaDemo 工程目录下 运行如下命令: javac -d bin/ src/com/czy/Main.java src/com/czy/Teacher.java src/com/czy/student/Student.java -cp lib/lib.jar 
-d bin/ 表示把编译的文件 放到bin 目录下面 src/com/czy/Main.java src/com/czy/Teacher.java src/com/czy/student/Student.java 后面这些都是 相应的java文件, 所有的java文件都需要编译
后面的 -cp lib/lib.jar  表示 吧 lib.jar 加到 classpath中去, 不然编译会出错如图: JAVA 命令行运行java项目

ok 看下编译好的文件 JAVA 命令行运行java项目


ok 接下来 运行项目 java -cp bin/:lib/lib.jar com.czy.Main
-cp bin/:lib/lib.jar 表示 吧相应的 class 文件加入到 class path 中 后面则是 具体的 类名 com.czy.Main 需要注意的是 bin/:lib/lib.jar 使用:隔开  所有的依赖包都需要加入到 classpath中去
项目运行如下 JAVA 命令行运行java项目

ok 一个简单的java 工程就运行完了 但是  貌似有些繁琐,  需要手动键入 java文件 以及相应的jar包 很是麻烦, so 可以用 shell 来脚本来简化相关操作  shell 文件整理如下:
#!/bin/bash
echo "build start"

JAR_PATH=libs
BIN_PATH=bin
SRC_PATH=src

# java文件列表目录
SRC_FILE_LIST_PATH=src/sources.list

#生所有的java文件列表
rm -f $SRC_PATH/sources
find $SRC_PATH/ -name *.java > $SRC_FILE_LIST_PATH

#删除就的编译文件 生成bin目录
rm -rf $BIN_PATH/
mkdir $BIN_PATH/

#生成依赖jar包 列表
for file in ${JAR_PATH}/*.jar;
do
jarfile=${jarfile}:${file}
done
echo "jarfile = "$jarfile

#编译
javac -d $BIN_PATH/ -cp $jarfile @$SRC_FILE_LIST_PATH

#运行
java -cp $BIN_PATH$jarfile com.zuiapps.danmaku.server.Main



有一点需要注意的是,  javac -d $BIN_PATH/ -cp $jarfile @$SRC_FILE_LIST_PATH 在要编译的文件很多时候,一个个敲命令会显得很长,也不方便修改, 可以把要编译的源文件列在文件中,在文件名前加@,这样就可以对多个文件进行编译, 以上就是吧java文件放到 $SRC_FILE_LIST_PATH 中去了 文件内容如下: JAVA 命令行运行java项目


总结: 编译 :      1. 需要编译所有的java文件      2. 依赖的java 包都需要加入到 classpath 中去      3. 最后设置 编译后的 class 文件存放目录  即 -d bin/      4. java文件过多是可以使用  @$SRC_FILE_LIST_PATH 把他们放到一个文件中去 运行:    1.需要吧 编译时设置的bin目录和 所有jar包加入到 classpath 中去


产考文章: http://blog.csdn.net/huagong_adu/article/details/6929817