- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
(注意 - 最终解决方案如下)
在我的插件中,我试图创建一个 IJavaProject
(使用 Eclipse JDT,代码在最后),它创建一个 Java 项目,几乎完全就像 IJavaProject 是由开发人员(或使用该插件的人)创建的一样。我能够从 PDE 创建 IJavaProject
,并且工作正常,但我需要模仿 PDE 中创建项目时产生的 IResourceChangeEvents
,以匹配在开发人员工作区中创建 Java 项目时产生的 IResourceChangeEvents
。
我正在使用我的 IResourceChangeListener
测量“IResourceChangeEvents”(它使用访问者,并且应该是正确的 - 查看代码 here )。在开发人员工作区中创建 Java 项目时,我正在测量以下 IResourceChangeEvents
:
CHANGE-ROOT (1 child)
ADD-PROJECT (5 children)
ADD-FILE ".classpath"
ADD-FILE ".project"
ADD-FOLDER ".settings" ADD-FILE ".prefs"
ADD-FOLDER ".bin"
ADD-FOLDER ".src"
当我在 PDE 中使用 Eclipse JDT 创建 IJavaProject
时(代码在最后),我测量了这些 IResourceChangeEvents
:
C-R
C-P
ADD-FILE ".project"
C-R
C-P "JavaProject"
C-R
C-P
CHANGE-FILE ".project"
C-R
C-P
ADD-FOLDER "bin"
C-R
C-P
C-F
ADD-FILE ".project"
C-R
C-P
ADD-FILE ".classpath"
C-R
C-P
ADD-FOLDER "src"
C-R
C-P
CHANGED-FILE ".classpath"
其中,C-R
是 CHANGED-ROOT
,C-P
是 CHANGED-PROJECT
,C-F
是 CHANGED-FILE
。
关于创建 IJavaProject
的其他方法有什么建议吗?
这是我的 IJavaProject
创建代码:
public static IJavaProject getJavaProject(IProject project) throws CoreException
{
return getJavaProject(project, "src", "bin");
}
public static IJavaProject getJavaProject(IProject project, String sourceFolderPath,
String binFolderPath) throws CoreException
{
if (!project.exists())
// This creates ADDED (.project)
ResourceUtility.createProject(project);
System.out.println("setting description nature id's.");
IProjectDescription description = project.getDescription();
description.setNatureIds(new String[] {JavaCore.NATURE_ID});
System.out.println("setting project description.");
// Creates CHANGED (JavaProject/.project)
project.setDescription(description, null);
System.out.println("Creating project.");
// Does not do anything.
IJavaProject javaProject = JavaCore.create(project);
IFolder binFolder = project.getFolder(binFolderPath);
// Creates ADDED (JavaProject/bin)
binFolder.create(false, true, null);
javaProject.setOutputLocation(binFolder.getFullPath(), null);
System.out.println("Installing VM.");
List<IClasspathEntry> entries = new ArrayList<>();
IVMInstall vmInstall = JavaRuntime.getDefaultVMInstall();
System.out.println("JDTUtil: vmInstall: " + vmInstall);
LibraryLocation[] locations = JavaRuntime.getLibraryLocations(vmInstall);
System.out.println("JDTUtil: lib locations: " + locations);
// Creates ADDED (JavaProject/bin/.project) - ignored by RCL
for (LibraryLocation element: locations)
{
entries.add(JavaCore.newLibraryEntry(element.getSystemLibraryPath(), null, null));
}
// add libs to project class path
// Creates ADDED (JavaProject/.classpath)
javaProject.setRawClasspath(entries.toArray(new IClasspathEntry[entries.size()]), null);
//
IFolder sourceFolder = project.getFolder(sourceFolderPath);
// Creates ADDED (JavaProject/src)
sourceFolder.create(false, true, null);
IPackageFragmentRoot root = javaProject.getPackageFragmentRoot(sourceFolder);
IClasspathEntry[] oldEntries = javaProject.getRawClasspath();
IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length + 1];
System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length);
newEntries[oldEntries.length] = JavaCore.newSourceEntry(root.getPath());
// Creates CHANGED (JavaProject/.classpath)
javaProject.setRawClasspath(newEntries, null);
return javaProject;
}
最终解决方案
正如下面的答案中提到的,我对资源更改事件进行了批处理,这导致 Eclipse 构建 IJavaProject 的方式与不进行批处理时的方式大不相同,而且效率更高。因此,我的 IJavaProject 创建现在与 Eclipse 用于 IJavaProject 创建的内部资源树表示相匹配(WOOHOO!)。
这是我的最终解决方案:
public static IJavaProject getJavaProjectBatched(final IProject project, final String sourceFolderPath,
final String binFolderPath) throws CoreException
{
IWorkspaceRunnable r = new IWorkspaceRunnable()
{
@Override public void run(@Nullable IProgressMonitor monitor) throws CoreException
{
if (!project.exists())
ResourceUtility.createProject(project);
IProjectDescription description = project.getDescription();
description.setNatureIds(new String[] {JavaCore.NATURE_ID});
project.setDescription(description, null);
IFolder binFolder = project.getFolder(binFolderPath);
binFolder.create(false, true, null);
final IFolder sourceFolder = project.getFolder(sourceFolderPath);
sourceFolder.create(false, true, null);
final IJavaProject javaProject = JavaCore.create(project);
javaProject.setOutputLocation(binFolder.getFullPath(), null);
IPackageFragmentRoot root = javaProject.getPackageFragmentRoot(sourceFolder);
IClasspathEntry[] newEntries = new IClasspathEntry[1];
newEntries[0] = JavaCore.newSourceEntry(root.getPath());
javaProject.setRawClasspath(newEntries, null);
}
};
project.getWorkspace().run(r, null,IWorkspace.AVOID_UPDATE, null);
@SuppressWarnings("null") @NonNull IJavaProject javaProject = JavaCore.create(project);
return javaProject;
}
这是新的资源树,它与我上面需要的资源树相匹配(不包括 .settings
文件夹 - 只是手动创建的工件)。
CHANGE-ROOT (1 child)
ADD-PROJECT (4 children)
ADD-FILE ".classpath"
ADD-FILE ".project"
ADD-FOLDER ".bin"
ADD-FOLDER ".src"
最佳答案
尝试以下两件事:
使用 IWorkspaceRunnable 的实现将所有资源更改批处理到单个事务中。这应该会使更改看起来更像创建项目资源增量。
确保在运行代码之前已从磁盘中删除该项目。看起来您已从工作区中删除了它,但没有从文件系统中删除它。
关于java - Eclipse PDE : Mimicking IResourceChangeEvents for IJavaProject creation between PDE and developer's workspace?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22494353/
我目前正在尝试通过实现非标准边界条件来求解 FEniCS 中的 Monge-Ampere 方程。 边界条件,要求解的梯度必须将原域的边界映射到另一个规定的域。 当目标域被规定为单位圆时,实现起来非常简
关于 Eclipse PDE 开发的问题:我为 Eclipse 编写了一个小插件,并具有以下内容 * 一个 org.eclipse.ui.texteditor.ITextEditor * 行号 如何自
我正在尝试使用 FiPy 解决非线性 PDE HJB 方程,但是我在将 PDE 转换为正确的 FiPy 语法时遇到了一些困难: 我试过类似的东西: eqX = TransientTerm() == -
关于Eclipse PDE开发的问题:我为Eclipse写了一个小插件,有以下内容* 一个org.eclipse.ui.texteditor.ITextEditor* 行号 如何自动跳转到该行并标记它
(注意 - 最终解决方案如下) 在我的插件中,我试图创建一个 IJavaProject (使用 Eclipse JDT,代码在最后),它创建一个 Java 项目,几乎完全就像 IJavaProject
我对 Processing 还是比较陌生。我们正在考虑在一个小型展览中循环展示我们的处理工作。有没有办法循环播放多个 PDE?我知道我可以导出为帧,然后将它们组合成更长的可循环播放的 Quicktim
我目前正在尝试让我的 headless (headless) pde-build 工作,但我被困在一个我不知道如何继续的地方。 问题是如何定义相关的目标平台来编译插件。 我有一个带有以下调用的 bui
当您使用 Eclipse PDE(插件开发环境)时,有一个术语“目标平台”。这究竟是什么意思? 最佳答案 目标平台指定您正在为其开发插件的 Eclipse 配置。这是由可用的插件和功能集定义的。它默认
在寻找巴恩斯利蕨分形的实现时,我遇到了一个具有 .pde 扩展名的实现。哪种编程语言使用此扩展? Implementation Page 最佳答案 此代码来自Processing.org,一个基于Ja
在 PDE 项目中,有没有办法从文件系统添加第三方包作为我的项目的依赖项?我希望做 BND 工具允许的相同事情;将一个包添加到本地存储库,然后从该包中导入项目中的包。我不想使用 maven osgi
我有以下基于 ARM 的 SoC 的规范: L1 数据缓存 = 32 KB、64 B/行、2 路、LRU L2 缓存 = 1 MB、64 B/行、16 路 L1 数据 TLB(用于加载):32 个条目
我为 Eclipse 创建了一个 View 插件。我可以从项目中导出 jar,并且运行得很好。我正在尝试创建一个 Ant 构建脚本来自动化它。 我通过执行以下操作从 Eclipse 创建了两个 Ant
我已经安装了面向 Java 开发人员的 eclipse IDE(Helios Service Release 2) 我现在如何在此基础上安装插件开发环境 (PDE)?我认为应该可以从更新站点安装它,就
在 PDE 项目中,有没有办法从文件系统添加第三方包作为我的项目的依赖项?我希望做 BND 工具允许的相同事情;将一个包添加到本地存储库,然后从该包中导入项目中的包。我不想使用 maven osgi
所以我正在读这篇文章FAQ : 它提到了不可用的getLog()方法。我当前的类基本上是扩展AbstractHandler。我该如何使用这个? 最佳答案 如果您让 Eclipse 为您创建 Activ
我是一名学生,作为年度项目的一部分,我正在开发 eclipse 插件。 我遇到了一个奇怪的问题并尝试修复它 2 天: 我在 plugin.xml 中添加了 3 种新类型的标记。 我为每个标记添加了 a
我通过 PDE 创建了一个 Eclipse 插件。我可以通过将项目作为“eclipse 应用程序”运行来尝试该插件,到目前为止没有问题。但是,我想导出项目并收到此错误: C:\Users\ErayT\
我编写了一个函数,对二维列表中的数组元素求和并将它们添加到一维列表中: ArrayList sumList(ArrayList list,int side){ ArrayList sums
我对在相当大的 eclipse 工作区中升级依赖插件、功能和产品中的版本号的过程有很多困惑。 我对现有插件中的 Java 代码进行了 API 更改,因此需要增加版本标识符的主要部分。此插件用作给定功能
这是从 Numerical Computing-Kincaid 的书第 15 章修改的问题。(不是物理学) 如何正确实现边界条件?条件是 u(0,y,t) = u(x,0,t) = u(nx,y,t)
我是一名优秀的程序员,十分优秀!