我有一个项目的.classpath文件,其中包含所有类路径条目。现在它有以下条目 -
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
</classpathentry>
现在,从这个条目开始,我想通过编程方式找到所有通过java代码与这个库相关联的jar文件?有没有办法阅读所有的罐子?
答案 0 :(得分:2)
"con" is a container like JRE它与您的应用程序中的父类加载器有关。这个conatiner定义了自己的类路径,可以在运行时读取:
public static void main(String[] args) {
ClassLoader classLoader = ClassLoader.getSystemClassLoader();
ClassLoader parentClassLoader = classLoader.getParent();
System.out.println("Project jars: ");
readJars(classLoader);
System.out.println("Container jars: ");
readJars(parentClassLoader);
}
private static void readJars(ClassLoader classLoader) {
URLClassLoader urlClassLoader = (URLClassLoader) classLoader;
URL[] urls = urlClassLoader.getURLs();
for(URL url: urls){
String filePath = url.getFile();
File file = new File(filePath);
if(file.exists() && file.isFile()) {
//Apply additional filtering if needed
System.out.println(file);
}
}
}
答案 1 :(得分:2)
以下是调查运行Eclipse JEE Kepler,同时阅读2016年夏季检查并在启动时调试Eclipse的源代码。
在工作区根文件夹中有一个文件.metadata.plugins \ org.eclipse.jdt.core \ variablesAndContainers.dat。 JavaModelManager从方法loadVariablesAndContainers读取此文件。
这是JavaModelManager的源代码 https://git.eclipse.org/c/e4/org.eclipse.jdt.core.git/tree/model/org/eclipse/jdt/internal/core/JavaModelManager.java
在variablesAndContainers.dat中,我相信每个项目都有一个条目,每个项目都有一个容器。您可以在文件中将容器名称视为String。
流程继续 JavaModelManager $ VariablesAndContainersLoadHelper.loadContainers(IJavaProject)
从此处,该文件读取类路径条目数的计数。对于每个条目,它然后使用方法VariablesAndContainersLoadHelper.loadClasspathEntry读取容器。这将创建一个表示Java容器的类路径条目数组。它作为JavaModelManager.PersistedClasspathContainer保存在内存中。
如果您正在创建独立应用程序,那么这就是您要寻找的。 如果要创建Eclipse插件,请检查JavaModelManager.getClasspathContainer的行为。
你必须研究这些代码,并且可能会调试很多Eclipse初创公司以找出文件的整个格式。