目录:

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. shell脚本分析mysql慢查询日志(slow log)

    使用percona公司的pt-query-digest分析慢查询日志.分析.统计的结果的比較清晰 #!/bin/sh slowlog_path=/root/slow_query_log everysl ...

  2. shell-判断循环

    shell条件测试 test 每个完整的合理的编程语言都具有条件判断的功能. bash可以使用test命令,[]和()操作,还有if/then结构 字符串判断 -n string 判断字符串长度非零 ...

  3. thttpd源代码解析 定时器模块

    thttpd源代码解析 定时器模块 thttpd是很轻量级的httpserver,可运行文件仅50kB.名称中的第一个t表示tiny, turbo, 或throttling 与lighttpd.mem ...

  4. 第 3 章 第 1 题 精简冗余 if 语句问题 使用数组实现

    问题分析 输入:用户个人收入 输出:该用户要缴纳的个人所得税 约束:不允许使用过多的 if 语句 解答思路 最简单的方法是根据不同的税率区间,创建多个 if 语句来求解.但如此一来便会有 25 个 i ...

  5. C++ 中的几种初始化

    前言 阅读C++教材时,想必你听过复制初始化,直接初始化,值初始化这三个概念吧.笔者本人常将其混淆,遂在此记录下它们的具体含义以便日后查阅. 复制初始化( copy-initialization ) ...

  6. 优化梯度计算的改进的HS光流算法

    前言 在经典HS光流算法中,图像中两点间的灰度变化被假定为线性的,但实际上灰度变化是非线性的.本文详细分析了灰度估计不准确造成的偏差并提出了一种改进HS光流算法,这种算法可以得到较好的计算结果,并能明 ...

  7. I NEED A OFFER! hdu1203

    Description Speakless非常早就想出国,如今他已经考完了全部须要的考试,准备了全部要准备的材料,于是.便须要去申请学校了. 要申请国外的不论什么大学,你都要交纳一定的申请费用,这但是 ...

  8. rac_udev建立磁盘方式安装grid时不识别磁盘

    原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明下面出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlo ...

  9. RabbitMQ的安装与客户端的简单实用

    本文主要内容是RabbitMQ的安装步骤[Windows系统与linux上的安装]及客户端的简单使用. 1.下载 下载地址:http://www.rabbitmq.com/download.html ...

  10. UEFI启动模式下安装Ubuntu 16.04教程【转】

    本文转载自:http://blog.csdn.net/Jesse_Mx/article/details/61425361 前言 最近常帮人安装Ubuntu,也算积累了一些经验.这篇博文主要谈一谈如何在 ...