目录:

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. Use the command of tar to multi-part archive method.

    We usually meet the package too large to upload internat space when upload have a limited .So we nee ...

  2. .NET MVC 4 实现用户注册功能

    初学MVC,踩了不少坑,所以通过实现一个用户注册功能把近段时间学习到的知识梳理一遍,方便以后改进和查阅. 问题清单: l 为什么EF自动生成的表名后自动添加了s? l 如何为数据库初始化一些数据? l ...

  3. C#特性类的使用

    特性类的使用过程: 第一步:定义一个特性类,定义一些成员来包含验证时需要的数据:第二步:创建特性类实例:创建一个特性类的实例,里面包含着验证某一个属性或者字段需要的数据.将该实例关联到某个属性上面.第 ...

  4. php判断某字符串是否不以数字或其他特殊字符开头

    if(preg_match("/^[^\d-.,:]/",$addr)){ echo $addr.'不是数字或其他特殊字符开头'; }

  5. secureCRT与vim配置

    折腾了一天,给服务器新装了centos系统,用crt连接,vim用着很不习惯. 修改配色,快捷键啥的都不怎么起效. 后来发现.crt里的会话选项-终端-仿真 里配成xtream,使用颜色方案就可以了.

  6. EasyDarwin开源流媒体服务器提供的RTMP直播推送库

    EasyRTMP EasyRTMP是什么? EasyRTMP是一个EasyDarwin配套使用,也可以单独使用的RTMP推送库,通过EasyRTMP我们就可以避免接触到稍显复杂的RTMP推送流程,只需 ...

  7. ESXi 5.5 RTL9168E网卡驱动 找到网卡

    如果你对专业服务器的价格望而却步,恰巧又想在普通的PC上安装ESXi,恰巧又是ESXi 5.5版本,那么这篇文章中提及的问题你可能会遇到,并能给你提供一些帮助. 1.成功安装重启以后提示“no boo ...

  8. POJO对象建立规则

    1.所有POJO类属性必须使用包装数据类型,RPC方法的返回值和参数必须使用包装数据类型. 说明:POJO类属性没有初值是提醒使用者在使用时,必须自己显示的进行赋值,任何NPE问题,或者入库检查,都由 ...

  9. Javascript的参数详解

    函数可以有参数也可以没有参数,如果定义了参数,在调用函数的时候没有传值,默认设置为undefined 在调用函数时如果传递参数超过了定义时参数,jS会忽略掉多余参数 jS中不能直接写默认值,可以通过a ...

  10. appium(11)-java-client

    Welcome to the Appium Java client wiki! This framework is an extension of the Selenium Java client. ...