如何从Jar中读取工作空间中的Java文件?

时间:2015-03-25 10:33:11

标签: java eclipse jar classpath

我有这个奇怪的场景,我让客户端在他的工作区中编辑几个类。我有一个可执行jar,他将放在项目的lib文件夹中。在其中一个菜单中,它应该调用客户端在其工作区中编辑的java类。

如何让Jar调用工作区中的Java类?

2 个答案:

答案 0 :(得分:2)

ProcessBuilder pb = new ProcessBuilder("/path/to/java", "-cp", "packagename.Class"); 
pb.directory(new File("preferred/working/directory"));
Process p = pb.start();

这适用于主要方法。

或者:

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)); 

答案 1 :(得分:0)

你的情景非常奇怪;你应该考虑一个不同的设计。

当客户在eclipse中运行代码时:它可能足以检查&#34;运行&#34;您的客户正在使用的配置。有一个&#34; Classpath&#34; tab - 您可以使用它来指定本地编译的类优先于给予客户的JAR。

如果他从命令行运行您的应用程序,那么您必须提供相应的类路径 - 确保那些&#34;本地覆盖&#34;来到JAR前面,其中包含了#34;年龄较大的&#34;类的版本。

作为替代方案,您可以提供构建脚本/指南,允许客户构建重新打包的JAR文件。

编辑:

您是否有可能提供您的JAR文件没有应该来自客户的类?如果类只存在于客户工作区...至少你不必担心将使用哪个版本的类(因为它们只有一个版本!)