目录:

一. 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包到执行的更多相关文章

  1. java命令行执行程序解决依赖外部jar包的问题

    用java命令行直接执行程序,如果这个程序需要引用外部jar包.就不能单纯用java xx来执行 如果你的jar包和程序就在一个目录: 编译 javac -cp D:\yy\yy.jar,D\xx\x ...

  2. java在cmd下编译引用第三方jar包

    java在cmd下编译引用第三方jar包 转 https://blog.csdn.net/qq_21439971/article/details/53924594 获取第三方jar包 第三包我们可以引 ...

  3. 命令行通过入参调用jar包

    命令行通过入参调用jar包 最近因为项目需要,需要实现一个功能,即定时执行服务器上的一个脚本去对数据库的数据进行业务处理,要操作的数据库有很多种,mysql.db2.oracle.sqlserver等 ...

  4. java打jar包 命令行cmd在当前路径打jar包

    不尝试就永远不会知道真相. 今天搞webservice,需要将服务单独拉出来发布.打jar包的时候要打成aar包,所以用到cmd下的打jar包的命令. 当前路径打jar包,一定要先进到这个文件夹,然后 ...

  5. Linux java 命令行编译 jar包

    Java 命令行编译成class,然后在打包成jar文件. 编译成class javac -classpath $CLASS_PATH -d class ./src/Hello.java 可以通过ja ...

  6. Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包

    一,实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path-.将依赖包添加到工程中后,eclipse不报错了.但是用Maven命令 mv ...

  7. 【Java】【转】在命令行中编译和运行java

    原文:http://blog.csdn.net/u010900574/article/details/50792353 同时加载编译多个jar包和java文件 在个人平常使用或者当我们把代码部署到Li ...

  8. Java 命令行编译项目

    如果是用Exlipse, 第三方的包可以放在eclipse文件夹的jre包的lib文件夹中! (初学者的一些总结-高手们勿喷哈-) 原因: 以前一直用Eclispe编程环境运行Java.非常舒服,就像 ...

  9. Java命令行的基本编译运行

    1.编译 编写MyProgram.java文件,内容如下: public class MyProgram { public static void main(String[] args) { Syst ...

随机推荐

  1. 如何重建一个损坏的调用堆栈(callstack)

    原文作者:Aaron Ballman原文时间:2011年07月04日原文地址:http://blog.aaronballman.com/2011/07/reconstructing-a-corrupt ...

  2. hdu 2842(矩阵高速幂+递推)

    题意:一个中国环的游戏,规则是一个木棒上有n个环.第一个环是能够任意放上或拆下的,剩下的环x假设想放上或拆下必须前一个环x-1是放上的且前x-2个环所有是拆下的,问n个环最少多少次操作能够所有拆掉. ...

  3. 快速上手npm

    1.npm的安装和更新 2.npm的常用操作 3.npm的常用配置项 4.npm常用命令速查表

  4. Kristen Grauman

    http://www.cs.utexas.edu/~grauman/ CV         Publications         Code           Data        Short ...

  5. Java泛型擦除

    Java泛型擦除: 什么是泛型擦除? 首先了解一下什么是泛型?我个人的理解:因为集合中能够存储随意类型的对象.可是集合中最先存储的对象类型一旦确定后,就不能在存储其它类型的对象了,否则,编译时不会报错 ...

  6. 【LeetCode with Python】 Sort List

    博客域名:http://www.xnerv.wang 原题页面:https://oj.leetcode.com/problems/sort-list/ 题目类型: 难度评价:★ 本文地址:http:/ ...

  7. 两个经典的文件IO程序示例

    前言 本文分析两个经典的C++文件IO程序,提炼出其中文件IO的基本套路,留待日后查阅. 程序功能 程序一打印用户指定的所有文本文件,程序二向用户指定的所有文本文件中写入数据. 程序一代码及其注释 # ...

  8. 开源流媒体服务器--EasyDarwin

    欢迎加入我们的开源流媒体服务器项目:EasyDarwin, EasyDarwin是在Apple开源流媒体服务器Darwin Streaming Server(v6.0.3)基础上进行开发和维护的免费开 ...

  9. javaweb开发之javaBean

    一.JavaBean简介 JavaBean是使用Java语言开发的一个可重用的组件,在JSP的开发中可以使用JavaBean减少重复代码,使整个JSP代码的开发更简洁.JSP搭配JavaBean来使用 ...

  10. mount available

    Mount (computing), the process of making a file system accessible mount (Unix), the utility in Unix- ...