是否可以添加包含java源代码的文件夹作为classpath元素。我尝试了一些东西,似乎classloadr没有拿起java soruce文件?我的一次尝试如下所示......
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 :(得分:2)
我找到了解决问题的方法......我使用以下脏“hack”将类文件夹添加到类路径...
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());
}
}
}
答案 1 :(得分: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();
}
希望有所帮助!
答案 2 :(得分:1)
Java源代码本身并不是JVM可以处理的。类加载器只能加载已编译的类文件。因此,您只能将JAR文件或CLASS文件的内容添加到类路径中。