Java程序示例:动态加载和执行Jar包
{"title":"Java程序示例:动态加载和执行Jar包","description":"本示例演示了如何通过配置文件获取Jar包地址和名称,动态加载并执行Jar包的main方法,并传递参数。示例代码包含了路径处理、Jar包存在性检查、类加载、方法反射调用等步骤。","keywords":"Java, Jar, 动态加载, 执行, main方法, 配置文件, 反射, 传参, 参数","content":""Java程序示例:通过配置文件获取jar包地址、名字,并加载程序中判断地址末尾是否包含斜杠、自动拼接jar包地址,获取jar包时判断是否存在,jar包在打包时已指定main方法,调用jar包main方法且指定传参内容:以下是一个示例的Java程序,它通过配置文件获取jar包地址和名字,并加载程序中判断地址末尾是否包含斜杠,自动拼接jar包地址。然后,它会判断jar包是否存在,如果存在,就调用jar包的main方法并指定传参。\n\njava\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.IOException;\nimport java.util.Properties;\nimport java.util.jar.JarEntry;\nimport java.util.jar.JarFile;\nimport java.lang.reflect.Method;\n\npublic class Main {\n public static void main(String[] args) {\n try {\n // 加载配置文件\n Properties properties = loadProperties(\"config.properties\");\n \n // 获取jar包地址和名字\n String jarPath = properties.getProperty(\"jar.path\");\n String jarName = properties.getProperty(\"jar.name\");\n \n // 判断地址末尾是否包含斜杠,自动拼接jar包地址\n if (!jarPath.endsWith(\"/\")) {\n jarPath = jarPath + \"/\";\n }\n \n // 完整的jar包地址\n String jarFilePath = jarPath + jarName;\n \n // 判断jar包是否存在\n File jarFile = new File(jarFilePath);\n if (!jarFile.exists()) {\n System.out.println(\"Jar file does not exist: \" + jarFilePath);\n return;\n }\n \n // 加载jar包\n JarFile file = new JarFile(jarFile);\n JarEntry entry = file.getJarEntry(\"Main.class\");\n \n // 获取main方法\n Class<?> clazz = Class.forName(\"Main\");\n Method method = clazz.getMethod(\"main\", String[].class);\n \n // 调用jar包的main方法并指定传参\n method.invoke(null, (Object) args);\n \n // 关闭jar文件\n file.close();\n } catch (Exception e) {\n e.printStackTrace();\n }\n }\n \n private static Properties loadProperties(String fileName) throws IOException {\n String filePath = Main.class.getClassLoader().getResource(fileName).getPath();\n Properties properties = new Properties();\n properties.load(new FileInputStream(filePath));\n return properties;\n }\n}\n\n\n上述示例中,假设配置文件名为config.properties,内容如下:\n\n\njar.path=/path/to/jar/\njar.name=myJar.jar\n\n\n你需要将配置文件config.properties放在类路径下,如src/main/resources目录下。\n\n请注意,示例中的Main类名是示例的,如果你的jar包中的类名不同,请相应地修改。\n\n此外,示例中假设你的jar包中的主类名为Main,如果你的jar包中的主类名不同,请相应地修改。\n\n最后,示例中调用了jar包的main方法,并将传入的参数直接传递给了该方法。如果你需要传递不同的参数,可以根据需要修改。
原文地址: https://www.cveoy.top/t/topic/p4vV 著作权归作者所有。请勿转载和采集!