目录:

1.eclipse创建Java项目(带jar包的)

2. eclipse用Export的Runnable JAR file方式打jar包(带jar包的)

打jar包

1)class2json1.jar  (把引入的json相关的jar包转换成class,还有自己的类)

2)class2json2.jar (引入的json相关的jar包保留在该jar包内,还有自己的类)

3)class2json3.jar (只有自己的类)

3. 用该jar包进行二次开发

    命令行测试

Java变成测试jar包

        1) 新建TestClass2Json1项目,测试第一个jar包

2) 还是在TestClass2Json1项目中,测试第二个jar包 (先把引入的jar包去掉)

        3) 还是在TestClass2Json1项目中,测试第三个jar包(先把引入的jar包去掉)

1.eclipse创建Java项目(带jar包的)

eclipse,创建java Project项目后,右键项目new一个名为lib的file Folder,用来存放需要的额外jar包,本项目需要用到JSON,所以需要引入相关jar包。

我设计了三个类,分别是 PersonData.java、DataClass2Json.java以及 TestDataClass2Json.java,具体代码如下所示:

PersonData.java是个人员数据类,主要存储人员数据的。

package com.zc.dataclass.main;

import java.io.Serializable;

public class PersonData implements Serializable {
private static final long serialVersionUID = 1L; private String xm; //姓名
private String xb; //性别
private String sr; //生日
public String getXm() {
return xm;
}
public void setXm(String xm) {
this.xm = xm;
}
public String getXb() {
return xb;
}
public void setXb(String xb) {
this.xb = xb;
}
public String getSr() {
return sr;
}
public void setSr(String sr) {
this.sr = sr;
} }

DataClass2Json.java 主要是将数据类转换成JSON

package com.zc.class2json.trans.main;

import java.util.List;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject; /**
* @author zhangchao
* @date 2018-08-22
* 将数据类转换成Json格式数据
*/
public class DataClass2Json {
public JSONObject data2JsonObj(Object obj) {
JSONObject jsonObj = JSONObject.fromObject(obj);
return jsonObj;
} public JSONArray data2JsonArr(Object obj) {
JSONArray jsonArr = JSONArray.fromObject(obj);
return jsonArr;
} public JSONArray data2JsonArr(List<Object> list) {
JSONArray jsonArr = JSONArray.fromObject(list);
return jsonArr;
}
}

TestDataClass2Json.java 测试

package com.zc.class2json.trans.test;

import java.util.ArrayList;
import java.util.List; import com.zc.class2json.trans.main.DataClass2Json;
import com.zc.dataclass.main.PersonData; import net.sf.json.JSONArray;
import net.sf.json.JSONObject; public class TestDataClass2Json { public static void main(String[] args) {
// TODO Auto-generated method stub
List<PersonData> listPD = getPersonData();
DataClass2Json dcj = new DataClass2Json();
JSONArray jsonArr = dcj.data2JsonArr(listPD);
System.out.println(jsonArr.toString());
//System.out.println(dcj.data2JsonObj(listPD).toString()); PersonData pd1 = new PersonData();
pd1.setXm("张三");
pd1.setXb("男");
pd1.setSr("1988-07-20");
JSONObject jsonObj = dcj.data2JsonObj(pd1);
System.out.println(jsonObj.toString()); JSONArray jsonArr1 = dcj.data2JsonArr(pd1);
System.out.println(jsonArr1.toString());
} /*
* 获取类数据
*/
public static List<PersonData> getPersonData() {
PersonData pd1 = new PersonData();
pd1.setXm("李四");
pd1.setXb("男");
pd1.setSr("1991-01-12"); PersonData pd2 = new PersonData();
pd2.setXm("张楠");
pd2.setXb("女");
pd2.setSr("1995-05-10"); List<PersonData> pd = new ArrayList<PersonData>();
pd.add(pd1);
pd.add(pd2);
//System.out.println(""); return pd;
}
}

运行结果如下所示:

[{"sr":"1991-01-12","xb":"男","xm":"李四"},{"sr":"1995-05-10","xb":"女","xm":"张楠"}]
{"sr":"1988-07-20","xb":"男","xm":"张三"}
[{"sr":"1988-07-20","xb":"男","xm":"张三"}]

2. eclipse用Export的Runnable JAR file方式打jar包(带jar包的)

右键该项目选择Export,弹出的对话框,选择Java中的Runnable JAR File

点击next

    

Launch configuration  选择jar包默认运行的主类(包含main方法),Export destination 选择jar包的存放位置以及名称。

之后是3种打Runnable JAR file方式的方式,我们每个都试了下,分别对应class2json1.jar、class2json2.jar以及 ( class2json3.jar 和 class2json3_lib)

library handling中,(自己这三种都试一下)
第一个为提取extract需要的依赖的库或jar合成到jar文件里;
(把自己的项目class以及lib中jar包中的class,混合在一起);
其它项目中直接引用该jar包,不需要加入它所需的额外jar包,就可以执行我们的类(但可能和项目引入的额外jar包引起jar包冲突);命令行也可以直接运行 java -jar XXX.jar
第二个则仅仅打包依赖库到jar文件;
(把依赖的外部jar包,引入我们jar文件中)
其它项目中直接引用该jar包,但需要加入它所需的额外jar包,才可以执行我们的类,造成jar包重复;命令行也可以直接运行 java -jar XXX.jar
第三个则把依赖库放到一个文件夹中。
(没有外部依赖的jar包,只有自己的类)
其它项目中直接引用该jar包,需要加入它所需的额外jar包,就可以执行我们的类;命令行也需要引入依赖jar包,才能运行 java -jar XXX.jar

由项目可知,运行我们的项目包括3部分:

1: 我们自己编写的java
2: java运行jdk中的jar包
3.:我们引入的额外的jar包

 

1)class2json1.jar  (把引入的json相关的jar包转换成class,还有自己的类)

com:中都是我自己写的类编译后的class文件
META-INF:
net:引入的JSON相关jar包中的类,转化成class
org:引入的JSON相关jar包中的类,转化成class

2)class2json2.jar (引入的json相关的jar包保留在该jar包内,还有自己的类)

com:中都是我自己写的类编译后的class文件
META-INF:
org:是eclipse自动生成的jar包加载类
下面就是引入的相关jar包

3)class2json3.jar (只有自己的类)

com:中都是我自己写的类编译后的class文件
META-INF:

class2json3_lib

所以class2json3.jar 和class2json3_lib在一个文件下,命令行才可以执行,因为META-INF/MANIFEST.MF,即该jar包会关联class2json3_lib中这些相关jia包

Manifest-Version: 1.0
Class-Path: . class2json3_lib/commons-beanutils-1.8.0.jar class2json3_
lib/commons-collections-3.2.1.jar class2json3_lib/commons-lang-2.4.ja
r class2json3_lib/commons-logging-1.1.3.jar class2json3_lib/ezmorph-1
.0.6.jar class2json3_lib/json-lib-2.3-jdk15.jar
Main-Class: com.zc.class2json.trans.test.TestDataClass2Json

3. 用该jar包进行二次开发

命令行测试:

我们现在命令行测试一下:

java -jar class2json1.jar
java -jar class2json2.jar
java -jar class2json3.jar

结果:

其实:

class2json1.jar和class2json2.jar都可以单独运行;
而 class2json3.jar不能单独运行,必须和class2json3_lib放在一起。

Java变成测试jar包

1) 新建TestClass2Json1项目,测试第一个jar包

TestJar1.java  和最开始的项目的主类一样,只是类名不一样

import java.util.ArrayList;
import java.util.List; import com.zc.class2json.trans.main.DataClass2Json;
import com.zc.dataclass.main.PersonData; import net.sf.json.JSONArray;
import net.sf.json.JSONObject; public class TestJar1 { public static void main(String[] args) {
// TODO Auto-generated method stub
List<PersonData> listPD = getPersonData();
DataClass2Json dcj = new DataClass2Json();
JSONArray jsonArr = dcj.data2JsonArr(listPD);
System.out.println(jsonArr.toString());
//System.out.println(dcj.data2JsonObj(listPD).toString()); PersonData pd1 = new PersonData();
pd1.setXm("张三");
pd1.setXb("男");
pd1.setSr("1988-07-20");
JSONObject jsonObj = dcj.data2JsonObj(pd1);
System.out.println(jsonObj.toString()); JSONArray jsonArr1 = dcj.data2JsonArr(pd1);
System.out.println(jsonArr1.toString());
} /*
* 获取类数据
*/
public static List<PersonData> getPersonData() {
PersonData pd1 = new PersonData();
pd1.setXm("李四");
pd1.setXb("男");
pd1.setSr("1991-01-12"); PersonData pd2 = new PersonData();
pd2.setXm("张楠");
pd2.setXb("女");
pd2.setSr("1995-05-10"); List<PersonData> pd = new ArrayList<PersonData>();
pd.add(pd1);
pd.add(pd2);
//System.out.println(""); return pd;
} }

结果:

[{"sr":"1991-01-12","xb":"男","xm":"李四"},{"sr":"1995-05-10","xb":"女","xm":"张楠"}]
{"sr":"1988-07-20","xb":"男","xm":"张三"}
[{"sr":"1988-07-20","xb":"男","xm":"张三"}]

结论:

我们只是引入了class2json1.jar,就可以运行。
注意,不要再在项目里引入json相关jar包,会冲突

2) 还是在TestClass2Json1项目中,测试第二个jar包 (先把引入的jar包去掉)

  

因此,只引入class2json2.jar会报错,因为不识别头部的json包。原因是该jar包内部的json相关的jar包不能被外部的Java文件识别。

所以还要再引入json相关jar包,如下。因此这种方法不适合Java二次开发。

这时就没有报错,结果如下:

结果:

[{"sr":"1991-01-12","xb":"男","xm":"李四"},{"sr":"1995-05-10","xb":"女","xm":"张楠"}]
{"sr":"1988-07-20","xb":"男","xm":"张三"}
[{"sr":"1988-07-20","xb":"男","xm":"张三"}]

结论:

我们只是引入了class2json2.jar,不可以执行,因为该jar包内部的json相关的jar包不能被外部的Java文件识别。必须再引入json相关jar包,才可以运行。

3) 还是在TestClass2Json1项目中,测试第三个jar包(先把引入的jar包去掉)

  

因此,只引入class2json3.jar会报错,因为不识别头部的json包。原因是jar文件只有自己的class文件,没有json相关jar包的class。

所以还要再引入json相关jar包,如下。

这时就没有报错,结果如下:

结果:

[{"sr":"1991-01-12","xb":"男","xm":"李四"},{"sr":"1995-05-10","xb":"女","xm":"张楠"}]
{"sr":"1988-07-20","xb":"男","xm":"张三"}
[{"sr":"1988-07-20","xb":"男","xm":"张三"}]

结论:

我们只是引入了class2json3.jar,不可以执行,因为缺少json相关jar包。必须再引入json相关jar包,才可以运行。

Eclipse用Runnable JAR file方式打jar包,并用该jar包进行二次开发的更多相关文章

  1. sts安装出现could not find jar:file解决办法,could not find jar:file,sts安装

    标题sts插件下载好但是安装出错 我的eclipse是4.5.2,在官方网站https://spring.io/tools3/sts/legacy下载,压缩包的名字为:spring-tool-suit ...

  2. java eclipse打jar包和执行jar中的main函数

    jar包使用eclipse打包步骤 右键需要打包的项目->选择Export 到这里有两种打包的方式 1.如果项目中没有使用其他第三方包等,则直接选择下图中的第一种即可(JAR file) 2.如 ...

  3. eclipse 中的 jar file 和 runnable jar file的区别

    转自于:http://blog.csdn.net/lijiecong/article/details/6266234 java最难学的就是角落的东东了,不愧叫做java平台.搜索了一把总算明白了. 直 ...

  4. eclipse中jar file与runnable jar file的区别

    直接运行 .class的方法     java  -cp .  com.network.Chat  , 不用加.class后缀 从eclipse中export 的jar file,仅仅是把.class ...

  5. eclipse 导出Runnable JAR file ,双击无法执行原因与解决 双击后闪退的原因 批处理java打包文件 @echo off start javaw -jar *.jar

    eclipse 导出Runnable JAR file 导出后如果系统没有JRE,双击无法运行,需要用命令方法 安装后解决,如图 双击后闪退的原因,通过执行 java -jar TingGe.jar ...

  6. eclipse中export 的jar file与 runnable jar file的区别

    (1)直接运行 .class的方法     java  -cp .  com.guangfa.demo1  , 不用加.class后缀 .-cp 是 -classpath 缩写,是指定类运行所依赖其他 ...

  7. 有关 MyEclipse->export runnable jar file选项 launch configuration里面没有可以选择的东西的解决方法

    为什么eclipse里export-->runnable jar file-->的launch configuration里面没有可以选择的东西或者新写的main方法却找不到呢? 将你程序 ...

  8. eclipse export runnable jar(导出可执行jar包)

    eclipse export runnable jar(导出可执行jar包) runnable jar可以执行的 如果要导出可运行的JAR文件,需要选择Runnable Jar File. 1. 选择 ...

  9. Eclipse混淆文件导入Android Studio Gradle编译报input jar file is specified twice

    Eclipse项目中的混淆配置文件 复制到AS中 在混淆的过程中提示如下错误     Error:Execution failed for task ':app:proguardDemoRelease ...

随机推荐

  1. 显卡接口PCI、VGA、PCIE

    转:1.PCIe扫盲系列博文连载 2.http://blog.sina.com.cn/s/blog_a73f94190102w2j2.html 1.AGP(Accelerated Graphics P ...

  2. 可空类型Nullable

    Nullable类型: 值类型变量默认为0,不可空,为了使它可空,出现了Nullable类型,类型前面加?  变为引用类型 值类型是没有null值的,比如int,DateTime,它们都有默认值.举个 ...

  3. css实现轮播效果图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 【BZOJ2625】[Neerc2009]Inspection 最小流

    [BZOJ2625][Neerc2009]Inspection Description You are in charge of a team that inspects a new ski reso ...

  5. c++的运算符的重载

    1 什么是c++运算符的重载 c++运算符的重载就是说对+.-.>.<等运算符进行重新定义,这样的话,除了基本的类型,所有的类都可以进行基本的运算了,用起来非常方便.特别是用在各种算法中. ...

  6. MySQL常用语句汇总--持续更新(2017-08-10)

    修改表的字段结构: 表:mission_picture,新增字段:content,字段类型:text ALTER TABLE mission_picture ADD content text:

  7. HLS切片机

    参考: 1,linux下搭建生成HLS所需的.ts和.m3u8文件http://www.cnblogs.com/mystory/archive/2013/04/07/3006200.html2,iPh ...

  8. Java+Jsoup实现网页内容抓取

    不知不觉毕业快一年了,工作逐渐趋于平淡,从一个对编程了解得很少甚至完全一窍不通的小小菜,终于成为了一枚小菜,总而言之,算是入了IT这一行.这大半年马马虎虎做了三个项目,有安卓项目,有Java Web项 ...

  9. UIBezierPath(转)

    @import url(/css/cuteeditor.css); @import url(/css/cuteeditor.css); @import url(http://i.cnblogs.com ...

  10. java to Json or Json to JavaBean

    今天练习,放这里,以后再补充 这里使用的jar包是 net.sf.json.JSONObject package yh.test.t1118; import net.sf.json.JSONArray ...