java编译包_java命令行从编译到打jar包到执行

本文详细介绍了如何使用Java命令行进行编译和执行,包括不包含额外jar包和包含额外jar包的情况。内容涵盖javac编译、jar包打包、java命令运行,并给出了脚本完成编译执行的示例,特别适用于Java项目的自动化构建流程。
摘要由CSDN通过智能技术生成

目录:

一. 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,该项目结构如下:

e7e9700b20419c2420e875a577933af6.png

bin:必须新建一个空的bin文件,用于存放生成.class文件

src:源码文件,包含我们写的.java文件

src/com/zc/javaproject/test/HelloJava.java

src/com/zc/javaproject/test1/HelloWorld.java

命令行运行:(在JavaProject目录下)

35a3a83d88d3415017a8e21c35bc6a4a.png

# -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.classbin/com/zc/javaproject/test1/HelloWorld.class

ii)我们新建JavaProject,该项目结构如下:

ef99cc9c7947218f5ece15687c7d00da.png

假设你的这个包放在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.classbin/com/zc/javaproject/test1/HelloWorld.class

2. 包含额外的jar包

我们新建Class2Json,该项目结构如下:

10b657bdbb41fcda3abfb8b83550285d.png

假设你的这个包放在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包:

6785f72cc6cda4bc74411587c0ad8476.png

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

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包

三、 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

执行结果如下:

a584467dc6192a026e77590f3a90f171.png

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

执行结果如下:

e8ab5c01d9cf13aa30c20dc5da85a452.png

2. jar包执行

因为META-INF/MANIFEST.MF指明了jar包以及主类:

java -jar Class2Json.jar

e8ab5c01d9cf13aa30c20dc5da85a452.png

四、 脚本完成编译执行

在Class2Json目录下:

0c06d1730e727fb058413141a33c2826.png

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

结果:

71fc6df58f1cb9bb67732769af176abd.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值