目录:

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. docker安全最佳实践概述

    /************************************************* * Author : Samson * Date : 08/07/2015 * Test plat ...

  2. Ubuntu Server 12.04 乱码

    sudo vim /etc/default/locale 将 下面的内容修改 LANG="zh_CN.UTF-8" LANGUAGE="zh_CN:zh" 修改 ...

  3. ios开发动物园管理 继承多态的实现

    // // main.m // 继承 // // #import <Foundation/Foundation.h> #import "Animal.h" #impor ...

  4. disabled和readonly

    项目中,有一个input控件,input的值需要通过点击一个javascript链接,从弹出的对话框中所列出的项中选择.而不能从input框中直接输入. 刚开始将input的disabled属性设置为 ...

  5. Python之Numpy库常用函数大全(含注释)

    前言:最近学习Python,才发现原来python里的各种库才是大头! 于是乎找了学习资料对Numpy库常用的函数进行总结,并带了注释.在这里分享给大家,对于库的学习,还是用到时候再查,没必要死记硬背 ...

  6. hdu5261单调队列

    题意特难懂,我看了好多遍,最后还是看讨论版里别人的问答,才搞明白题意,真是汗. 其实题目等价于给n个点,这n个点均匀分布在一个圆上(知道圆半径),点与点之间的路程(弧长)已知,点是有权值的,已知,点与 ...

  7. EasyRTMP手机直播推送rtmp流flash无法正常播放问题

    本文转自EasyDarwin团队Kim的博客:http://blog.csdn.net/jinlong0603/article/details/52960750 问题简介 EasyRTMP是EasyD ...

  8. windows下使用DOS命令删除大文件

    首先进入DOS命令窗口: 1.进入到将要删除的目录: 执行命令: rmdir /s/q 文件夹名称 2.删除指定文件: 进入文件的目录下,找到要删除的文件名称+扩展名:例如111.jpg执行命令: d ...

  9. linux杂谈(十三):代理server

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/linux_player_c/article/details/24707457 1.代理server的 ...

  10. [Java SE] 字符串连接

    Java 支持多种字符串连接方式,总结如下: package cn.spads.tool.string; import java.text.MessageFormat; /** * <b> ...