【发布时间】:2015-03-25 10:33:10
【问题描述】:
我有一个奇怪的场景,我让客户在他的工作区编辑几个类。我有一个可执行的 jar,他将把它放在项目的 lib 文件夹中。在其中一个菜单中,它应该调用客户在其工作区中编辑的 java 类。
如何让 Jar 调用工作区中的 Java 类?
【问题讨论】:
标签: java eclipse jar classpath
我有一个奇怪的场景,我让客户在他的工作区编辑几个类。我有一个可执行的 jar,他将把它放在项目的 lib 文件夹中。在其中一个菜单中,它应该调用客户在其工作区中编辑的 java 类。
如何让 Jar 调用工作区中的 Java 类?
【问题讨论】:
标签: java eclipse jar classpath
ProcessBuilder pb = new ProcessBuilder("/path/to/java", "-cp", "packagename.Class");
pb.directory(new File("preferred/working/directory"));
Process p = pb.start();
这适用于 main 方法。
或者:
InputStream fileInputStream = new FileInputStream("c:/..../TestClass.class");
byte rawBytes[] = new byte[fileInputStream.available()];
fileInputStream.read(rawBytes);
Class<?> regeneratedClass = this.defineClass("testpack.TestClass",rawBytes, 0, rawBytes.length);
System.out.println(regeneratedClass.getMethod("getSimpleMethod", null).invoke(regeneratedClass.newInstance(), null));
【讨论】:
你的场景很奇怪;你真的应该考虑一个不同的设计。
当客户在 Eclipse 中运行代码时:检查客户正在使用的“运行”配置可能就足够了。有一个“类路径”选项卡 - 您可以使用它来指定本地编译的类优先于提供给客户的 JAR。
如果他从命令行运行您的应用程序,那么您必须提供相应的类路径 - 确保那些“本地覆盖”位于包含“旧”版本类的 JAR 之前。
作为替代方案,您可以提供允许客户构建重新打包的 JAR 文件的构建脚本/指导。
编辑:
您是否可以提供您的 JAR 文件没有应该来自客户的类?如果类只存在于客户工作区中……至少您不必担心将使用哪个版本的类(因为它们只有一个版本!)
【讨论】: