zoukankan      html  css  js  c++  java
  • Eclipse用Runnable JAR file方式打jar包,并用该jar包进行二次开发

    目录:

    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包,才可以运行。
  • 相关阅读:
    【Collect】免费图片库网站推荐(国外高清可商用)
    "One or more types required to compile a dynamic expression cannot be found. Are you missing references to Microsoft.CSharp.dll and System.Core.dll?"的解决方法
    "从客户端中检测到有潜在危险的 Request.Form 值"的解决方案汇总
    Fira Code:适合程序员的编程字体
    【Notepad++】notepad++主题和字体设置(非常好看舒服的)
    【sql server】"已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行" 解决方案
    【SQL】sql update 多表关联更新方法总结
    【C#】 List按指定字段的给出的自定义顺序进行排序
    3 常量与变量
    2 go语言的基础
  • 原文地址:https://www.cnblogs.com/zhangchao0515/p/9520827.html
Copyright © 2011-2022 走看看