java命令行从编译到打jar包到执行
目录:
一. javac编译
1. 没有额外的jar包
2. 包含额外的jar包
二、 jar打jar包
三、 java运行
1. java命令执行
2. jar包执行
四、 脚本完成编译执行
整个过程模拟Eclipse的Java Project项目,包括src,以及生成的.class文件在bin中,还可能有lib,包含额外的jar包。
一. javac编译
1. 没有额外的jar包
i)我们新建JavaProject,该项目结构如下:

bin:必须新建一个空的bin文件,用于存放生成.class文件
src:源码文件,包含我们写的.java文件 src/com/zc/javaproject/test/HelloJava.java
src/com/zc/javaproject/test1/HelloWorld.java
命令行运行:(在JavaProject目录下)

# -d 指定.class的生成目录
javac -d bin ./src/com/zc/javaproject/test/*.java ./src/com/zc/javaproject/test1/*.java # -classpath
# 使用了-classpath,使得编译器在寻找HelloWorld类的时候以bin为根目录,根据根目录和package名,类名最终定位了需要用的(已编译出来的)HelloWorld类。
javac -d bin -classpath bin ./src/com/zc/javaproject/test/*.java ./src/com/zc/javaproject/test1/*.java # -sourcepath
# 在编译条件里面加入-verbose可以很清楚的看到,编译器在寻找HelloWorld类的时候,以src为根目录,根据根目录和package名,类名最终定位了需要用的(源代码)HelloWorld类。
javac -d bin -sourcepath src ./src/com/zc/javaproject/test/*.java ./src/com/zc/javaproject/test1/*.java #
javac -d bin -sourcepath src -classpath bin ./src/com/zc/javaproject/test/*.java ./src/com/zc/javaproject/test1/*.java
结果:bin中生成和src目录相对应的.class文件,类似eclipse中的bin。
bin/com/zc/javaproject/test/HelloJava.class
bin/com/zc/javaproject/test1/HelloWorld.class
ii)我们新建JavaProject,该项目结构如下:

假设你的这个包放在src文件夹下,src的父目录为JavaProject,sourcelist.txt也事先新建在JavaProject文件夹下。首先将这个包中你需要编译的java文件相对于src的路径注册到sourcelist.txt文件中;接着在project文件夹中新建一个bin文件夹
bin:必须新建一个空的bin文件,用于存放生成.class文件
src:源码文件,包含我们写的.java文件
sourcelist.txt:编译单位其实就是单个的java文件,为了达到同时编译多个java文件的目的,可以将所需编译的java文件路径保存在一个txt中,比如sourcelist.txt,以换行为分隔符(这个过程称为类文件注册)。
src/com/zc/javaproject/test/HelloJava.java
src/com/zc/javaproject/test1/HelloWorld.java
sourcelist.txt内容如下:(必须指定具体的java)
./src/com/zc/javaproject/test/HelloJava.java
./src/com/zc/javaproject/test1/HelloWorld.java
命令行运行:(在JavaProject目录下)
javac -d bin -sourcepath src -classpath bin @sourcelist.txt
结果:bin中生成和src目录相对应的.class文件,类似eclipse中的bin。
bin/com/zc/javaproject/test/HelloJava.class
bin/com/zc/javaproject/test1/HelloWorld.class
2. 包含额外的jar包
我们新建Class2Json,该项目结构如下:

假设你的这个包放在src文件夹下,src的父目录为Class2Json,sourcelist.txt也事先新建在Class2Json文件夹下。首先将这个包中你需要编译的java文件相对于src的路径注册到sourcelist.txt文件中;接着在project文件夹中新建一个bin文件夹
bin:必须新建一个空的bin文件,用于存放生成.class文件
lib:包含需要的额外的jar包
src:源码文件,包含我们写的.java文件
sourcelist.txt:编译单位其实就是单个的java文件,为了达到同时编译多个java文件的目的,可以将所需编译的java文件路径保存在一个txt中,比如sourcelist.txt,以换行为分隔符(这个过程称为类文件注册)。 src/com/zc/class2json/trans/main/DataClass2Json.java
src/com/zc/class2json/trans/test/TestDataClass2Json.java
src/com/zc/dataclass/main/PersonData.java
lib中jar包:

sourcelist.txt内容如下:(必须指定具体的java)
./src/com/zc/class2json/trans/main/DataClass2Json.java
./src/com/zc/class2json/trans/test/TestDataClass2Json.java
./src/com/zc/dataclass/main/PersonData.java
命令行运行:(在Class2Json文件下) linux下用冒号:分隔开,Windows下用分号;隔开。参考 https://blog.csdn.net/myfmyfmyfmyf/article/details/53179395
javac -d bin -sourcepath src -classpath .:lib/commons-beanutils-1.8.0.jar:lib/commons-collections-3.2.1.jar:lib/commons-lang-2.4.jar:lib/commons-logging-1.1.3.jar:lib/ezmorph-1.0.6.jar:lib/json-lib-2.3-jdk15.jar @sourcelist.txt
javac -d bin -sourcepath src -classpath .:bin:lib/commons-beanutils-1.8.0.jar:lib/commons-collections-3.2.1.jar:lib/commons-lang-2.4.jar:lib/commons-logging-1.1.3.jar:lib/ezmorph-1.0.6.jar:lib/json-lib-2.3-jdk15.jar @sourcelist.txt
或者
lib=.:bin:lib/commons-beanutils-1.8.0.jar:lib/commons-collections-3.2.1.jar:lib/commons-lang-2.4.jar:lib/commons-logging-1.1.3.jar:lib/ezmorph-1.0.6.jar:lib/json-lib-2.3-jdk15.jar
javac -d bin -sourcepath src -classpath $lib @sourcelist.txt
结果:bin中生成和src目录相对应的.class文件,类似eclipse中的bin。
./bin/com/zc/class2json/trans/main/DataClass2Json.class
./bin/com/zc/class2json/trans/test/TestDataClass2Json.class
./bin/com/zc/dataclass/main/PersonData.class
二、 jar打jar包
参考我的博客 jar命令打jar包
三、 java运行
1. java命令执行
1)对于 JavaProject项目
对于第一个不含jar包的项目,在JavaProject目录下:
// java -cp/-classpath 相对/绝对路径 类
java -cp bin com.zc.javaproject.test.HelloJava
java -classpath bin com.zc.javaproject.test.HelloJava
java -cp bin com/zc/javaproject/test/HelloJava
java -classpath bin com/zc/javaproject/test/HelloJava
执行结果如下:

2)对与Class2Json项目
对于含jar包的项目,在Class2Json目录下: 使用java命令的-classpath或-cp选项,或设置CLASSPATH
java -cp .:bin:lib/commons-beanutils-1.8.0.jar:lib/commons-collections-3.2.1.jar:lib/commons-lang-2.4.jar:lib/commons-logging-1.1.3.jar:lib/ezmorph-1.0.6.jar:lib/json-lib-2.3-jdk15.jar com.zc.class2json.trans.test.TestDataClass2Json
java -cp .:bin:lib/commons-beanutils-1.8.0.jar:lib/commons-collections-3.2.1.jar:lib/commons-lang-2.4.jar:lib/commons-logging-1.1.3.jar:lib/ezmorph-1.0.6.jar:lib/json-lib-2.3-jdk15.jar com/zc/class2json/trans/test/TestDataClass2Json
或者
lib=.:bin:lib/commons-beanutils-1.8.0.jar:lib/commons-collections-3.2.1.jar:lib/commons-lang-2.4.jar:lib/commons-logging-1.1.3.jar:lib/ezmorph-1.0.6.jar:lib/json-lib-2.3-jdk15.jar
java -cp $lib com.zc.class2json.trans.test.TestDataClass2Json
执行结果如下:

2. jar包执行
因为META-INF/MANIFEST.MF指明了jar包以及主类:
java -jar Class2Json.jar

四、 脚本完成编译执行
在Class2Json目录下:

bin:空的
lib:需要额外的jar包
src:源码
class2json.sh:执行脚本
sourcelist.txt:
sourcelist.txt内容如下:(必须指定具体的java)
./src/com/zc/class2json/trans/main/DataClass2Json.java
./src/com/zc/class2json/trans/test/TestDataClass2Json.java
./src/com/zc/dataclass/main/PersonData.java
创建class2json.sh,内容如下:
#!/bin/bash
#设置临时变量
lib=.:bin:lib/commons-beanutils-1.8.0.jar:lib/commons-collections-3.2.1.jar:lib/commons-lang-2.4.jar:lib/commons-logging-1.1.3.jar:lib/ezmorph-1.0.6.jar:lib/json-lib-2.3-jdk15.jar
#编译
javac -encoding UTF-8 -d bin -sourcepath src -classpath $lib @sourcelist.txt
#运行
java -cp $lib com.zc.class2json.trans.test.TestDataClass2Json
运行:
bash class2json.sh
或者sh class2json.sh
或者
chmod +x class2json.sh
./class2json.sh
结果:

java命令行从编译到打jar包到执行的更多相关文章
- java命令行执行程序解决依赖外部jar包的问题
用java命令行直接执行程序,如果这个程序需要引用外部jar包.就不能单纯用java xx来执行 如果你的jar包和程序就在一个目录: 编译 javac -cp D:\yy\yy.jar,D\xx\x ...
- java在cmd下编译引用第三方jar包
java在cmd下编译引用第三方jar包 转 https://blog.csdn.net/qq_21439971/article/details/53924594 获取第三方jar包 第三包我们可以引 ...
- 命令行通过入参调用jar包
命令行通过入参调用jar包 最近因为项目需要,需要实现一个功能,即定时执行服务器上的一个脚本去对数据库的数据进行业务处理,要操作的数据库有很多种,mysql.db2.oracle.sqlserver等 ...
- java打jar包 命令行cmd在当前路径打jar包
不尝试就永远不会知道真相. 今天搞webservice,需要将服务单独拉出来发布.打jar包的时候要打成aar包,所以用到cmd下的打jar包的命令. 当前路径打jar包,一定要先进到这个文件夹,然后 ...
- Linux java 命令行编译 jar包
Java 命令行编译成class,然后在打包成jar文件. 编译成class javac -classpath $CLASS_PATH -d class ./src/Hello.java 可以通过ja ...
- Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包
一,实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path-.将依赖包添加到工程中后,eclipse不报错了.但是用Maven命令 mv ...
- 【Java】【转】在命令行中编译和运行java
原文:http://blog.csdn.net/u010900574/article/details/50792353 同时加载编译多个jar包和java文件 在个人平常使用或者当我们把代码部署到Li ...
- Java 命令行编译项目
如果是用Exlipse, 第三方的包可以放在eclipse文件夹的jre包的lib文件夹中! (初学者的一些总结-高手们勿喷哈-) 原因: 以前一直用Eclispe编程环境运行Java.非常舒服,就像 ...
- Java命令行的基本编译运行
1.编译 编写MyProgram.java文件,内容如下: public class MyProgram { public static void main(String[] args) { Syst ...
随机推荐
- ios文件系统文件目录操作
对于一个运行在iPhone得app,它只能访问自己根目录下得一些文件(所谓sandbox). 一个app发布到iPhone上后,目录结构如下: 1.其中获取 app root 可以用 NSHomeDi ...
- C语言关键字—-sizeof 、typedef、const、static、register、extern、#define
关键字:sizeof .#define.typedef.const.static.register.extern sizeof 1. 作用:求数据所占得内存空间大小 2. 本质:求数据得类型所占的内存 ...
- FALSE_IT
本文讲一个实用的语法糖(suger),很不错,攻克了我实际工作中的问题. 如果你写了这样一个类: class Executor { int step1(); void step2(); int ste ...
- websotrom 2016.2 license Server
license server” 输入:http://114.215.133.70:41017 仅供学习测试使用,支持正版.
- import caffe时出错:can not find module skimage.io
import caffe时出错:can not find module skimage.io //以下内容在ubuntu16.4上实际验证过.注意大小写的.----20170605 在命令行输入Py ...
- Install Server Backup Manager on CentOS, RHE, and Fedora
Skip to end of metadata Added by Internal, last edited by Internal on Aug 25, 2014 Go to start of me ...
- React项目结构
任何一种语言.框架,在真正上手的时候,多多少少会想想怎么安排项目结构(正所谓磨刀不误砍柴工),React也不例外. google了下,拿下面3篇博客来说道说道. (1) how-to-better-o ...
- Activiti实战
说实话,接触Activiti已经是3年前的事情,那时候组里想做一个流程自动化的application,并且记录用户点击.做单量等.第一次听说Activiti,感觉挺好奇的,遂看了下相关的文档跟同事的代 ...
- mongodb学习之:mongo安装以及远程访问
在linux下通过apt-get install mongo的方式一键式安装mongo 安装后mongo的配置文件位于/etc/mongodb.conf. 里面有mongo的各项配置,文件内容如下:重 ...
- Sqoop hive导出到mysql[转]
通过Sqoop将Hive表数据导入到MySQL通常有两种情况. 第一种是将hive上某张表的全部数据导入到mysql对应的表中. 第二种是将hive上某张表中的部分数据导入到mysql对应的表中. 两 ...