eclipse插件开发,使用扩展点newWizards,将已有java工程目录加载到当前workspace中 ? 10

如题,最近在研究写一个新建工程的插件,现在遇到一个坑,求大神解答。如何将已有的java工程import到当前工作空间下?最终效果类似使用file->import现有工程项... 如题,最近在研究写一个新建工程的插件,现在遇到一个坑,求大神解答。
如何将已有的java工程import到当前工作空间下?最终效果类似使用file->import现有工程项目的结果,且可类似普通项目可编辑。
PS: 已有的java工程可以获取到路径,但可能不会在workspace中。
只有这些财富值,求帮助~
展开
 我来答
若以下回答无法解决问题,邀请你更新回答
无畏口碑7
2016-05-21 · TA获得超过1118个赞
知道小有建树答主
回答量:1282
采纳率:63%
帮助的人:429万
展开全部
1、在普通Java工程下使用以下代码就行:
view sourceprint?1 String currentDir=System.getProperty("user.dir");
2、但是,在插件开发中,以上代码得到的是Eclipse的安装目录,如果想得到我们的代码所在的目录,则需要
view sourceprint?01 import java.io.File;
02 import java.io.IOException;
03 import java.net.MalformedURLException;
04 import java.net.URL;
05 import java.security.CodeSource;
06 import java.security.ProtectionDomain;
07
08 public class GetPath {
09
10 public static String getPathFromClass(Class cls) throws IOException {
11 String path = null;
12 if (cls == null) {
13 throw new NullPointerException();
14 }
15 URL url = getClassLocationURL(cls);
16 if (url != null) {
17 path = url.getPath();
18 if ("jar".equalsIgnoreCase(url.getProtocol())) {
19 try {
20 path = new URL(path).getPath();
21 } catch (MalformedURLException e) {
22 }
23 int location = path.indexOf("!/");
24 if (location != -1) {
25 path = path.substring(0, location);
26 }
27 }
28 File file = new File(path);
29 path = file.getCanonicalPath();
30 }
31 return path;
32 }
33
34 private static URL getClassLocationURL(final Class cls) {
35 if (cls == null)
36 throw new IllegalArgumentException("null input: cls");
37 URL result = null;
38 final String clsAsResource = cls.getName().replace('.', '/')
39 .concat(".class");
40 final ProtectionDomain pd = cls.getProtectionDomain();
41 if (pd != null) {
42 final CodeSource cs = pd.getCodeSource();
43 if (cs != null)
44 result = cs.getLocation();
45 if (result != null) {
46 if ("file".equals(result.getProtocol())) {
47 try {
48 if (result.toExternalForm().endsWith(".jar")
49 || result.toExternalForm().endsWith(".zip"))
50 result = new URL("jar:"
51 .concat(result.toExternalForm())
52 .concat("!/").concat(clsAsResource));
53 else if (new File(result.getFile()).isDirectory())
54 result = new URL(result, clsAsResource);
55 } catch (MalformedURLException ignore) {
56 }
57 }
58 }
59 }
60 if (result == null) {
61 final ClassLoader clsLoader = cls.getClassLoader();
62 result = clsLoader != null ? clsLoader.getResource(clsAsResource)
63 : ClassLoader.getSystemResource(clsAsResource);
64 }
65 return result;
66 }
67 }
以上代码可以得到指定类的绝对地址,如果想得到工程地址,只要把后面的字符串剪掉。
3、下面的代码
view sourceprint?1 String packageName = this.getClass().getResource("").getPath();
2 packageName = packageName.replace("/", "\\");
可以得到所在类的地址,但是在插件开发中得到的并非是绝对地址。在插件开发中可以结合2和3的代码得到当前工程的绝对地址: view sourceprint?01 String packageName = this.getClass().getResource("").getPath();
02 packageName = packageName.replace("/", "\\");
03 System.out.println("包名:"+packageName);
04 String projectPath = null;
05 try {
06 String packageFullName = GetPath.getPathFromClass(this.getClass());
07 projectPath = packageFullName.substring(0,
08 packageFullName.indexOf(packageName) + 1);
09 System.out.println("工程路径:"+projectPath);
10 } catch (IOException e1) {
11 projectPath = null;
12 e1.printStackTrace();
13 }
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式