2010-05-03 42 views
2

是否可以将包含java源代码的文件夹添加为类路径元素。我已经尝试了一些东西,似乎classloadr没有拿起java soruce文件?我的一个尝试如下所示......在运行时将包含Java源代码的文件夹添加到类路径中

File uncompressedSrc = new File("uncompressed" + File.separator + "src" + File.separator); 
URL uncompressedSrcURL = null; 
try { 
    uncompressedSrcURL = new URL("file://" 
     + uncompressedSrc.getAbsolutePath()); 
} catch (MalformedURLException e) { 
    e.printStackTrace(); 
} 
URL elements[] = { uncompressedSrcURL }; 
new URLClassLoader(elements, ClassLoader.getSystemClassLoader()); 
+0

的Java **源文件**不属于在类路径上。 classpath是JVM查找** class **文件(编译后的源代码)的目录和JAR文件的集合。 – Jesper 2010-05-03 07:49:10

回答

2

我已经找到了解决我的问题......我用下面的脏“黑客”添加文件夹到类路径...

public static void addUrl(URL u) { 
    URLClassLoader sysloader = (URLClassLoader) ClassLoader 
      .getSystemClassLoader(); 
    Class<URLClassLoader> sysclass = URLClassLoader.class; 

    try { 
     Method method = sysclass.getDeclaredMethod("addURL", parameters); 
     method.setAccessible(true); 
     method.invoke(sysloader, new Object[] { u }); 
    } catch (Throwable t) { 
     t.printStackTrace(); 
     try { 
      throw new IOException(
        "Error, could not add URL to system classloader"); 
     } catch (IOException e) { 
      logger.log(Level.SEVERE, e.getMessage()); 
     } 
    } 
} 
+0

我还添加了一个github,用于使用github的人克隆。并且,希望可以轻松解决同样的问题... git://gist.github.com/387972.git – markovuksanovic 2010-05-03 11:02:47

1

对不起。我通过你的问题方式掠过速度。

正如@Daniel所说,JVM无法读取.java文件,只能读取.class文件。

的java的文件可以这里描述的编程编译成类文件,并加载到JVM:Programmatically Compile and Execute with Java

的关键成分是以下

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
StandardJavaFileManager filemanager = compiler.getStandardFileManager(null, null, null); 

try { 
    Iterable compilationUnits = filemanager.getJavaFileObjects(file); 
    compiler.getTask(null, filemanager, null, null, null, compilationUnits).call(); 

    filemanager.close(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

希望帮助!

+0

好的,但是如果我将文件夹添加为java -cp参数,则甚至可以扫描.java文件。如果我使用URLClassloader它似乎跳过java文件... – markovuksanovic 2010-05-03 09:08:46

+0

嗯..我怀疑你会得到那个工作。除非你挖出类路径并以编程方式自己扫描它,否则我认为JVM会忽略类路径中的java文件。 – aioobe 2010-05-03 09:13:15

1

Java源代码不是JVM自己可以处理的东西。只有编译的类文件可以由类加载器加载。所以你只能将JAR文件或CLASS文件的内容添加到类路径中。

相关问题