`

打包jar 使用第三方jar包

阅读更多
涉及到的编译和打包问题
1.类在包中,如何批量编译包中的类
2.访问数据库要用到 驱动jar包,如何正确将驱动jar包也合并到自己定义的jar包中,而每次执行不需要额外的配置


环境 JDK 1.6  数据库SQL SERVER 2005  jar包 sqljdbc.jar
要求 登录名和密码为 sa,sa ,所有内容都在最后附件中(包含截图,数据库,源码,SQL jar) 可下载尝试
第一部分是图片和步骤说明,特地截图一步一步说明,第二部分是源码贴出,有几个简单的类都在staff包中.

先看第一部分:
1)目录说明:
D:\com 目录下存放我的源代码,这些源代码的包都是 package staff;从源码可以看到.


2)因为需要用到SQL SERVER2005的驱动,因此把sqljdbc.jar也放入 d:\com目录下,并点击右键解压缩(就如同解压.rar文件一样),就能看到有一个 sqljdbc的文件产生


3)sqljdbc文件夹中有一个com文件夹,把com文件夹剪切出来 放到源码区(即d:\com目录下)
说明sqljdbc文件下的com文件夹很显然就是com.microsoft.sqlserver.jdbc 的根目录,最底下 全是.class文件 .


4)在D:\com 目录源码区 再创建一个名称为 menifest的文件,注意不需要后缀


5)用编辑工具打开 menifest ,加入下面内容
Java代码 复制代码  收藏代码
  1. main- class : staff.MainMenu   
main-class: staff.MainMenu 


staff.MainMenu  表示staff包下的MainMenu类是含有main方法的程序启动类
注意: main-class: 冒号后空一格再写 staff.MainMenu
  且 写完第一行后换行 第二行再空一行 让光标能落在第三行的位置,也就是说第一行后要空一行(至于为什么我也没有深究,有时效果没有出来,查了查就发现是这里的问题)


6)写好menifest文件后,就可以进入 cmd窗口 键入以下如图所示的内容,我会说明每一个步骤是做什么的,且将输出何种效果


7)cd /d d:\com 进入D盘com文件夹下的源码区
  d:\com>javac -d d:/com *.java 
  (javac)编译  d:\com目录下 所有的.java源文件  -d d:/com 是指定编译后产生的.class 文件都输出到 d:/com 目录下

  经过上面这个步骤,观察d:/com 目录就会发现  多了一个 staff文件夹,这是编译好后生成的 staff包文件夹,staff文件夹下就是每个源码对应生成的 .class文件了。
 
 

  最后一个动作,其实就是将com目录..子目录下..目录下 和 staff目录下的.class文件打包成 .jar文件
   jar cvmf menifest lvp.jar com/microsoft/sqlserver/jdbc/*.class staff/*.class

   jar 是打包命令  menifest 就是刚才我们自己编写的一个文件  lvp.jar是要输出生成的jar包名称 ,com/microsoft/sqlserver/jdbc/*.class 空格 staff/*.class 是指要打包的.class文件
  
    经过这一步就已经完成了最终的打包动作.
8)执行的看看
 
  通过 java -jar lvp.jar 就可以执行了! 也不会出现因为 sqljdbc.jar找不到而引起的 com.microsoft.sqlserver.jdbc.SQLServerDriver 驱动类无法加载的异常了!


列出一部分测试源码
Java代码 复制代码  收藏代码
  1. package  staff;   
  2.   
  3. import  java.sql.Connection;   
  4. import  java.sql.DriverManager;   
  5. import  java.sql.ResultSet;   
  6. import  java.sql.SQLException;   
  7. import  java.sql.Statement;   
  8.   
  9. /**  
  10.  * 数据库操作对象管理类   
  11.  * --取得数据库连接对象  
  12.  * --关闭相关对象  
  13.  * @author Simon Lv  
  14.  */   
  15. public   class  ConnectionManager {   
  16.   
  17.      /**  数据库驱动类URL */   
  18.      private   static   final  String URL= "com.microsoft.sqlserver.jdbc.SQLServerDriver" ;   
  19.      /** 数据源字符串 */   
  20.      private   static   final  String BASE= "jdbc:sqlserver://localhost:1433;databasename=jspdemo" ;   
  21.      /** 用户名*/   
  22.      private   static   final  String USER= "sa" ;   
  23.      /** 密码*/   
  24.      private   static   final  String PWD= "sa" ;   
  25.      /**数据库连接对象*/   
  26.      private  Connection connection;   
  27.        
  28.      /**  
  29.      * 得到数据库连接对象  
  30.      * @return 数据库连接对象 Connection  
  31.      */   
  32.      public  Connection getConnection(){   
  33.          try  {   
  34.              //加载数据库驱动类   
  35.             Class.forName(URL);   
  36.              //得到数据库连接对象   
  37.             connection = DriverManager.getConnection(BASE,USER,PWD);   
  38.         }  catch  (ClassNotFoundException e) {   
  39.             e.printStackTrace();   
  40.             System.out.println( "数据库驱动类加载失败!请检查!" );   
  41.         }  catch  (SQLException e) {   
  42.             e.printStackTrace();   
  43.             System.out.println( "数据源配置有误!请检查!" );   
  44.         }   
  45.          //返回数据库连接对象   
  46.          return  connection;   
  47.     }   
  48.        
  49.      /**  
  50.      * 关闭所有数据操作对象  
  51.      * @param connection 数据库连接对象  
  52.      * @param pStatement SQL指令执行对象  
  53.      * @param rs 结果集对象  
  54.      */   
  55.      public   void  closeAllResource(Connection connection,Statement pStatement,ResultSet rs){   
  56.          try  {   
  57.              //关闭RS 记录集   
  58.              if  (rs!= null ) {   
  59.                 rs.close();   
  60.             }   
  61.              //关闭SQL 执行执行对象   
  62.              if  (pStatement!= null ) {   
  63.                 pStatement.close();   
  64.             }   
  65.              //关闭数据库连接   
  66.              if  (connection!= null  && !connection.isClosed()) {   
  67.                 connection.close();   
  68.             }   
  69.         }  catch  (SQLException e) {   
  70.             System.out.println( "关闭数据库操作对象时发生错误!请检查!" );   
  71.         }   
  72.     }   
  73. }  
package staff;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 数据库操作对象管理类 
 * --取得数据库连接对象
 * --关闭相关对象
 * @author Simon Lv
 */
public class ConnectionManager {

	/**  数据库驱动类URL */
	private static final String URL="com.microsoft.sqlserver.jdbc.SQLServerDriver";
	/** 数据源字符串 */
	private static final String BASE="jdbc:sqlserver://localhost:1433;databasename=jspdemo";
	/** 用户名*/
	private static final String USER="sa";
	/** 密码*/
	private static final String PWD="sa";
	/**数据库连接对象*/
	private Connection connection;
	
	/**
	 * 得到数据库连接对象
	 * @return 数据库连接对象 Connection
	 */
	public Connection getConnection(){
		try {
			//加载数据库驱动类
			Class.forName(URL);
			//得到数据库连接对象
			connection = DriverManager.getConnection(BASE,USER,PWD);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			System.out.println("数据库驱动类加载失败!请检查!");
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("数据源配置有误!请检查!");
		}
		//返回数据库连接对象
		return connection;
	}
	
	/**
	 * 关闭所有数据操作对象
	 * @param connection 数据库连接对象
	 * @param pStatement SQL指令执行对象
	 * @param rs 结果集对象
	 */
	public void closeAllResource(Connection connection,Statement pStatement,ResultSet rs){
		try {
			//关闭RS 记录集
			if (rs!=null) {
				rs.close();
			}
			//关闭SQL 执行执行对象
			if (pStatement!=null) {
				pStatement.close();
			}
			//关闭数据库连接
			if (connection!=null && !connection.isClosed()) {
				connection.close();
			}
		} catch (SQLException e) {
			System.out.println("关闭数据库操作对象时发生错误!请检查!");
		}
	}
}


Java代码 复制代码  收藏代码
  1. package  staff;   
  2.   
  3. import  java.sql.Connection;   
  4. import  java.sql.PreparedStatement;   
  5. import  java.sql.ResultSet;   
  6. import  java.util.ArrayList;   
  7.   
  8. /**  
  9.  * 数据访问操作对象 执行相应的增 删 改 查操作  
  10.  * @author Simon Lv  
  11.  *  
  12.  */   
  13. public   class  DataAccessManager {   
  14.   
  15.      /**数据库对象管理类对象*/   
  16.     ConnectionManager connManager =  new  ConnectionManager();   
  17.      /**数据库连接对象*/   
  18.     Connection connection;   
  19.      /**SQL执行对象*/   
  20.     PreparedStatement pStatement;   
  21.      /**结果集对象*/   
  22.     ResultSet rSet;   
  23.      /**员工实体类*/   
  24.     Staff staff;   
  25.        
  26.      /**  
  27.      * 执行数据库的增 删 改 操作的方法  1  
  28.      * @param sql 增 删 改的SQL  
  29.      * @return 受影响的行数  
  30.      */   
  31.      public   int  executeSQL(String sql){   
  32.          int  res= 0 //默认受影响的行数为0   
  33.          try  {   
  34.             connection = connManager.getConnection();  //得到数据库连接   
  35.             pStatement = connection.prepareStatement(sql);  //得到SQL操作对象   
  36.             res = pStatement.executeUpdate();  //执行返回受影响行数 的 增 删 改操作   
  37.         }  catch  (Exception e) {   
  38.             System.out.println( "执行数据库 增 删 改操作时发生错误!" );   
  39.              //程序调试阶段可使用 下面的方法   
  40.             System.out.println( "相应的SQL:" +sql);   
  41.         } finally {   
  42.             connManager.closeAllResource(connection, pStatement, rSet);   
  43.         }   
  44.          return  res;   
  45.     }   
  46.        
  47.      /**  
  48.      * 执行数据库的增 删 改 操作的方法 2  
  49.      * @param sql 增 删 改的SQL   
  50.      * @param param [] 参数   
  51.      * @return 受影响的行数  
  52.      */   
  53.      public   int  executeSQL(String sql,String param[]){   
  54.          int  res= 0 //默认受影响的行数为0   
  55.          try  {   
  56.             connection = connManager.getConnection();  //得到数据库连接   
  57.             pStatement = connection.prepareStatement(sql);  //得到SQL操作对象   
  58.                
  59.              if  (param!= null ) {   
  60.                  //循环放入相应的参数   
  61.                  for  ( int  i =  0 ; i < param.length; i++) {   
  62.                     pStatement.setString(i+ 1 , param[i]);   
  63.                 }   
  64.             }   
  65.             res = pStatement.executeUpdate();  //执行返回受影响行数 的 增 删 改操作   
  66.         }  catch  (Exception e) {   
  67.             System.out.println( "执行数据库 增 删 改操作时发生错误!" );   
  68.              //程序调试阶段可使用 下面的方法   
  69.             System.out.println( "相应的SQL:" +sql);   
  70.         } finally {   
  71.             connManager.closeAllResource(connection, pStatement, rSet);   
  72.         }   
  73.          return  res;   
  74.     }   
  75.        
  76.      /**  
  77.      * 执行数据库的增 删 改 操作的方法 3  
  78.      * @param sql 增 删 改的SQL 数组  
  79.      * @param param [] 参数 数组  
  80.      * @return 受影响的行数 数组  
  81.      */   
  82.      public   int  executeSQL(String sql,String param[][]){   
  83.          int  res= 0 //受影响的行数   
  84.          try  {   
  85.             connection = connManager.getConnection();  //得到数据库连接   
  86.             pStatement = connection.prepareStatement(sql); //创建Statement对象   
  87.              if  (param!= null ) {   
  88.                  //循环加入要更新的SQL 语句 增 删 改 语句   
  89.                  for  ( int  i =  0 ; i < param.length; i++) {   
  90.                      //同时为这些SQL 语句 添加参数   
  91.                      for  ( int  j =  0 ; j < param[i].length; j++) {   
  92.                         pStatement.setString(j+ 1 , param[i][j]);   
  93.                     }   
  94.                     pStatement.addBatch(); //批量   
  95.                 }   
  96.             }   
  97.                
  98.             res = pStatement.executeBatch().length;  //批量成功后所影响的行数   
  99.         }  catch  (Exception e) {   
  100.             e.printStackTrace();   
  101.             System.out.println( "执行数据库 增 删 改操作时发生错误!" );   
  102.              //程序调试阶段可使用 下面的方法   
  103.             System.out.println( "相应的SQL:" +sql);   
  104.         } finally {   
  105.             connManager.closeAllResource(connection, pStatement, rSet);   
  106.         }   
  107.          return  res;   
  108.     }   
  109.        
  110.      /**  
  111.      * 得到员工信息一条或多条  
  112.      * @param sql 查询语句  
  113.      * @param param 参数数组  
  114.      * @return 含有员工信息的集合  
  115.      */   
  116.      public  ArrayList<Staff> getStaffInfo(String sql,String param[]){   
  117.          //创建Staff集合 将查询出来的内容放入这个集合中   
  118.         ArrayList<Staff> list =  new  ArrayList<Staff>();   
  119.          try  {   
  120.             connection = connManager.getConnection();  //得到数据库连接   
  121.             pStatement = connection.prepareStatement(sql); //创建Statement对象   
  122.              if  (param!= null ) {   
  123.                  //循环放入相应的参数   
  124.                  for  ( int  i =  0 ; i < param.length; i++) {   
  125.                     pStatement.setString(i+ 1 , param[i]);   
  126.                 }   
  127.             }   
  128.              //得到结果集   
  129.             rSet = pStatement.executeQuery();   
  130.              //循环遍历内容 并将内容放入实体类对象 并封装在集合中   
  131.              while  (rSet.next()) {   
  132.                  //每一行就是一条员工记录   
  133.                 staff =  new  Staff();   
  134.                 staff.setId(rSet.getInt( 1 )); //ID   
  135.                 staff.setName(rSet.getString( 2 ));  //名称   
  136.                 staff.setSex(rSet.getString( 3 ));  //性别   
  137.                 staff.setAge(rSet.getInt( 4 ));  //年龄   
  138.                 staff.setRegTime(rSet.getString( 5 ));  //录入时间   
  139.                    
  140.                  //封装到集合中   
  141.                 list.add(staff);   
  142.             }   
  143.         }  catch  (Exception e) {   
  144.             e.printStackTrace();   
  145.             System.out.println( "执行数据库 增 删 改操作时发生错误!" );   
  146.              //程序调试阶段可使用 下面的方法   
  147.             System.out.println( "相应的SQL:" +sql);   
  148.         } finally {   
  149.             connManager.closeAllResource(connection, pStatement, rSet);   
  150.         }   
  151.          return  list;   
  152.     }   
  153. }  
package staff;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

/**
 * 数据访问操作对象 执行相应的增 删 改 查操作
 * @author Simon Lv
 *
 */
public class DataAccessManager {

	/**数据库对象管理类对象*/
	ConnectionManager connManager = new ConnectionManager();
	/**数据库连接对象*/
	Connection connection;
	/**SQL执行对象*/
	PreparedStatement pStatement;
	/**结果集对象*/
	ResultSet rSet;
	/**员工实体类*/
	Staff staff;
	
	/**
	 * 执行数据库的增 删 改 操作的方法  1
	 * @param sql 增 删 改的SQL
	 * @return 受影响的行数
	 */
	public int executeSQL(String sql){
		int res=0; //默认受影响的行数为0
		try {
			connection = connManager.getConnection(); //得到数据库连接
			pStatement = connection.prepareStatement(sql); //得到SQL操作对象
			res = pStatement.executeUpdate(); //执行返回受影响行数 的 增 删 改操作
		} catch (Exception e) {
			System.out.println("执行数据库 增 删 改操作时发生错误!");
			//程序调试阶段可使用 下面的方法
			System.out.println("相应的SQL:"+sql);
		}finally{
			connManager.closeAllResource(connection, pStatement, rSet);
		}
		return res;
	}
	
	/**
	 * 执行数据库的增 删 改 操作的方法 2
	 * @param sql 增 删 改的SQL 
	 * @param param [] 参数 
	 * @return 受影响的行数
	 */
	public int executeSQL(String sql,String param[]){
		int res=0; //默认受影响的行数为0
		try {
			connection = connManager.getConnection(); //得到数据库连接
			pStatement = connection.prepareStatement(sql); //得到SQL操作对象
			
			if (param!=null) {
				//循环放入相应的参数
				for (int i = 0; i < param.length; i++) {
					pStatement.setString(i+1, param[i]);
				}
			}
			res = pStatement.executeUpdate(); //执行返回受影响行数 的 增 删 改操作
		} catch (Exception e) {
			System.out.println("执行数据库 增 删 改操作时发生错误!");
			//程序调试阶段可使用 下面的方法
			System.out.println("相应的SQL:"+sql);
		}finally{
			connManager.closeAllResource(connection, pStatement, rSet);
		}
		return res;
	}
	
	/**
	 * 执行数据库的增 删 改 操作的方法 3
	 * @param sql 增 删 改的SQL 数组
	 * @param param [] 参数 数组
	 * @return 受影响的行数 数组
	 */
	public int executeSQL(String sql,String param[][]){
		int res=0; //受影响的行数
		try {
			connection = connManager.getConnection(); //得到数据库连接
			pStatement = connection.prepareStatement(sql);//创建Statement对象
			if (param!=null) {
				//循环加入要更新的SQL 语句 增 删 改 语句
				for (int i = 0; i < param.length; i++) {
					//同时为这些SQL 语句 添加参数
					for (int j = 0; j < param[i].length; j++) {
						pStatement.setString(j+1, param[i][j]);
					}
					pStatement.addBatch();//批量
				}
			}
			
			res = pStatement.executeBatch().length; //批量成功后所影响的行数
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("执行数据库 增 删 改操作时发生错误!");
			//程序调试阶段可使用 下面的方法
			System.out.println("相应的SQL:"+sql);
		}finally{
			connManager.closeAllResource(connection, pStatement, rSet);
		}
		return res;
	}
	
	/**
	 * 得到员工信息一条或多条
	 * @param sql 查询语句
	 * @param param 参数数组
	 * @return 含有员工信息的集合
	 */
	public ArrayList<Staff> getStaffInfo(String sql,String param[]){
		//创建Staff集合 将查询出来的内容放入这个集合中
		ArrayList<Staff> list = new ArrayList<Staff>();
		try {
			connection = connManager.getConnection(); //得到数据库连接
			pStatement = connection.prepareStatement(sql);//创建Statement对象
			if (param!=null) {
				//循环放入相应的参数
				for (int i = 0; i < param.length; i++) {
					pStatement.setString(i+1, param[i]);
				}
			}
			//得到结果集
			rSet = pStatement.executeQuery();
			//循环遍历内容 并将内容放入实体类对象 并封装在集合中
			while (rSet.next()) {
				//每一行就是一条员工记录
				staff = new Staff();
				staff.setId(rSet.getInt(1));//ID
				staff.setName(rSet.getString(2)); //名称
				staff.setSex(rSet.getString(3)); //性别
				staff.setAge(rSet.getInt(4)); //年龄
				staff.setRegTime(rSet.getString(5)); //录入时间
				
				//封装到集合中
				list.add(staff);
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("执行数据库 增 删 改操作时发生错误!");
			//程序调试阶段可使用 下面的方法
			System.out.println("相应的SQL:"+sql);
		}finally{
			connManager.closeAllResource(connection, pStatement, rSet);
		}
		return list;
	}
}



这仅仅是一个示例 ,最方便的当然不需要我们自己动手去打包,但是也往往会碰到这样的问题,不需要去尝试太多的命令,也可以一步一步摸索出来。
 
文章虽然说的有点繁琐,但是还是记录下来吧,以后用的时候好找。
引用地址:http://lvp.iteye.com/blog/358635
分享到:
评论

相关推荐

    exe4j打包(包含第三方jar包)

    通过以上步骤,你就可以成功地使用exe4j将包含第三方jar包的Java项目打包为Windows可执行程序了。记住,打包过程中的每一个环节都需要仔细检查,以确保最终的执行文件能够正常运行。希望这个打包过程对你有所帮助!

    Fatjar打包第三方包

    本篇文章将详细解释如何使用Fatjar来打包包含第三方jar包的插件,并在MyEclipse和Eclipse中进行操作。 首先,理解Fatjar的基本概念。Fatjar,又称为“胖Jar”,指的是将所有依赖库(包括第三方jar包)一起打包到...

    Android 混淆打包不混淆第三方jar包

    Android混淆打包不混淆第三方jar包Android 混淆打包不混淆第三方jar包

    android 生成aar/jar包包含第三方jar包没有第三方jar包怎么办

    里面涉及到一个第三方的包,这时候我生成aar/jar包给对方使用的时候,调用不到第三方包的代码,只可以调用我写的类的代码. 问题 我就去网上去寻找,aar/jar包生成包含第三方等问题.网上也有很多答案,我随便发一个别人的...

    eclipse 打包 jar 碰到的问题(包含第三方包)

    总之,打包包含第三方库的Java项目在Eclipse中可以通过多种方式进行,关键在于理解项目结构、类加载机制和构建工具的使用。通过上述方法,你可以成功地解决“eclipse 打包 jar 碰到的问题(包含第三方包)”。

    打包第三方Jar插件

    - 当项目需要发布为可执行的JAR或WAR文件时,需要确保所有依赖的第三方jar包一同被打包。MyEclipse提供了"Export"功能,可以选择"Java" -&gt; "JAR/WAR",在导出过程中,可以配置是否包含依赖的库。 5. **使用Maven或...

    myeclipse打包jar文件包含第三方jar包(文档+工具)

    `FatJar`是一个第三方插件,适用于`Eclipse`和`MyEclipse`,它的主要功能是帮助开发者将所有项目依赖的库文件(即第三方JAR包)打包进最终的可执行JAR中。这样,当用户运行这个单一的JAR文件时,不需要额外配置类...

    Jar打包(解决eclipse无法打包含有第三方架包问题)

    3. **设置打包选项**:在弹出的对话框中,选择要导出的主类(程序入口点),然后在`Libraries`选项卡中添加项目的依赖库,包括所有第三方JAR文件。 4. **生成fat jar**:点击`Finish`,Eclipse会将所有选定的类和库...

    java打包jar、第三方jar包、制作成.bat批处理

    本篇文章将深入探讨如何打包Java项目、如何处理第三方JAR包,并创建一个.bat批处理文件来简化运行流程。 1. **打包Java项目为JAR文件** 打包Java项目通常使用Maven或Gradle等构建工具。在Maven中,可以在pom.xml...

    Ant脚本打包Android程序的demo 多渠道及第三方JAR打包

    build是在build_with_bat的基础上实现的,主要是在compile和dex部分增加了第三jar的打包。 build_mulity_channel是多渠道打包脚本。该脚本需要ant-contrib-1.0b3.jar的支持。包中已包含,需要将其放到ant的lib...

    myeclpse7.5fatjar第三方包打包到压缩包

    "myeclipse7.5fatjar第三方包打包到压缩包"这个标题指的就是使用MyEclipse 7.5版本的集成开发环境,结合fatjar插件,将项目及其依赖的第三方库打包成一个压缩包的过程。 MyEclipse 7.5是一款功能强大的Java EE集成...

    java+swing打包jar转成exe 轻松加载第三方包

    这个过程涉及到将Java的JAR文件转换为Windows平台上的EXE文件,并且还需要处理第三方库的集成。以下是使用exe4j进行此操作的详细步骤和注意事项: 1. **准备阶段**: - 确保你的JAR文件、ICO图标、第三方库(存放...

    spring boot 第三方jar包抽离方案

    通过修改`spring-boot-maven-plugin`的配置,可以排除不需要打包进jar的第三方jar包。可以按maven坐标排除,也可以按组ID排除。在父工程的`etcloud-parent`中定义插件配置,子工程引用父工程配置并可覆盖自定义设置...

    eclipse打包jar插件

    标题中的"eclipse打包jar插件"指的是用于Eclipse的第三方插件,这些插件可以更方便地帮助开发者打包他们的Java项目为JAR格式。通常,这些插件会提供图形化的用户界面,使得设置和打包过程更为直观和高效。 描述中...

    【绝对可行,解决404】jfinal项目打包成jar在控制台运行方法

    先创建一个新的目录,如`dist`,然后把所有的类文件(不包括第三方库)和资源复制到这个目录。接着,执行以下命令: ``` jar cvfm JFinalDemo.jar MANIFEST.MF -C dist . ``` 这条命令会创建一个名为`JFinalDemo...

    jarjar-方便Java打包工具,自定义修改jar包包名

    - **类重命名**:避免类名冲突,尤其是当你使用了多个第三方库时。 - **混淆代码**:在发布开源项目或产品时,可以使用jarjar对敏感类进行重命名,增加反编译的难度。 总的来说,jarjar是一个强大而灵活的工具,它...

    Maven将带有第三方依赖的可执行程序打包示例

    执行程序中有巨多第三方依赖包,要一起打进 jar 包,怎么办? maven-assembly-plugin 插件打第三方依赖包进 jar,spring 有 org.springframework.beans.factory.parsing.BeanDefinitionParsingException 异常怎么办...

    java打包jar方案的优缺点分析及解决方案

    `fat.jar`插件允许开发者将所有依赖的第三方库一起打包进JAR,生成的JAR文件包含了一个完整的运行环境。这种方法的优点是方便,因为用户无需额外管理依赖。然而,它的主要缺点是生成的JAR文件可能非常大,可能导致...

    Android将Activity打包成jar包供第三方调用

    5. **使用jar包**:在第三方应用中,引入生成的jar包,并在需要的地方实例化并启动Activity。由于Activity不在当前应用的上下文中,需要使用`Intent`传递必要的数据,并指定Activity的完整包名。 6. **处理权限和...

Global site tag (gtag.js) - Google Analytics