Java调用jar包中的方法
Util.java
@Component public class Util { public static String jarPath; public static String classUrl; public static String credentialUrl; public static String szUserName; public static String szPassWord; @Value("${encryption.jarPath}") public void setJarPath(String jarPath) { EncryptionUtil.jarPath = jarPath; } @Value("${encryption.classUrl}") public void setClassUrl(String classUrl) { EncryptionUtil.classUrl = classUrl; } @Value("${encryption.szUserName}") public void setSzUserName(String szUserName) { EncryptionUtil.szUserName = szUserName; } @Value("${encryption.szPassWord}") public void setSzPassWord(String szPassWord) { EncryptionUtil.szPassWord = szPassWord; } /** * 读取jar包 * @param jarPath jar包存放的路径,可以是部署服务所在的linux上 */ public static void loadJar(String jarPath) { File jarFile = new File(jarPath); if (!jarFile.exists()) { throw new RuntimeException("找不到jar包"); } // 从URLClassLoader类中获取类所在文件夹的方法,jar也可以认为是一个文件夹 Method method = null; try { method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class); } catch (NoSuchMethodException | SecurityException e1) { e1.printStackTrace(); } // 获取方法的访问权限以便写回 boolean accessible = method.isAccessible(); try { method.setAccessible(true); // 获取系统类加载器 URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader(); URL url = jarFile.toURI().toURL(); method.invoke(classLoader, url); } catch (Exception e) { e.printStackTrace(); } finally { method.setAccessible(accessible); } } /** * * @param data * @throws Exception */ public static String test(String data){ String szResult = null; try { byte[] dataByte = data.getBytes("UTF-8"); loadJar(jarPath); Class<?> clazz = Class.forName(classUrl); Object instance = clazz.newInstance(); Object logInResult = clazz.getDeclaredMethod("LogIn", String.class, String.class).invoke(instance,szUserName,szPassWord); Object logInIErrCodeObj = clazz.getField("iErrCode").get(logInResult); int logInCode = (Integer)logInIErrCodeObj; if (logInCode != 0) { Object logInIErrMsgObj = clazz.getField("szErrMsg").get(logInResult); String logInIErrMsg = (String)logInIErrMsgObj; throw new RuntimeException(logInIErrMsg); } } catch (Exception e) { e.printStackTrace(); } return szResult; } }
application.yml
encryption: jarPath: C:\a\WAsecurity.jar classUrl: Wasecurity.IscJcrypt szUserName: test szPassWord: test