在开发eclipse插件时,我可以使用“Add Jars”获取jar文件的绝对路径吗?

时间:2016-12-27 02:13:39

标签: java eclipse eclipse-plugin

我正在编写一个eclipse插件。在插件中,我编写了一个函数,可以为我创建一个命令字符串。该字符串包含“-cp jar_path”。 jar路径是从eclipse“add jars”按钮配置的(在项目的属性配置中,“add jars”位于“java build path - > libraries”下。)。我需要获取jar文件的绝对路径,但是使用“add jars”我只能使用以下代码获取相对路径。我知道使用“添加外部罐子”是可以的,但我必须使“添加罐子”工作。有什么办法吗? 另一个问题是:如果右键单击“引用库”下添加的jar并单击“显示 - >属性”,IDE可以获取jar的绝对位置。我想也许IDE可以从workspace / .metadata / .plugins / com.eclipse.core.resources / .projects中获取它。 但即使这是真的,我仍然无法直接读取这些文件,因为普通读者无法解析这种格式。

IPackageFragmentRoot[] roots = JavaCore.create(project).getPackageFragmentRoots();
for(IPackageFragmentRoot root : roots)
{
    IClasspathEntry entry = root.getResolvedClasspathEntry();
    if(IClasspathEntry.CPE_LIBRARY == entry.getEntryKind())
    {    
        root.getRawClasspathEntry();
        String cp = entry.getPath().toOSString();
    }
}

2 个答案:

答案 0 :(得分:0)

如果您有工作空间相对路径,则可以使用以下内容将其转换为绝对位置:

IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();

IPath rootPath = root.getLocation();

IPath fullPath = rootPath.append("/project/container/file");

答案 1 :(得分:0)

solved by myself, thank you, greg-449!
String cp;
if (root.isArchive() && root.isExternal())
    cp = root.getResolvedClasspathEntry().getPath().toOSString();
else if (root.isArchive() && !root.isExternal())
    cp = root.getResource().getLocation().toString();