在 Eclipse 中公开服务器的 classpath/debug 源查找
Exposing a server's classpath/debug source lookup in Eclipse
我正在开发一个提供 WST 服务器适配器(如 Tomcat、Jetty 等)的 Eclipse 插件 - Sling IDE Tooling.
实际服务器是一个 Java 应用程序,因此它确实有一个类路径。我有兴趣将该类路径公开给 Eclipse,以便
- 用户可以看到部署在该服务器上的内容
- 我可以在调试时填充源查找路径
我知道如何找出服务器上部署的内容,但如何将其公开给 Eclipse?
IVMConnector.connect
接受一个 ILaunch
参数,该参数又包含一个 ISourceLocator
。源定位器有一个 ISourceContainer
个实例的列表。
源容器实例是根据已解析的 IRuntimeClasspathEntry
列表构建的。一些例子:
List<IRuntimeClasspathEntry> classpathEntries = new ArrayList<>();
// 1. Adding a IJavaProject as a classpath entry
classpathEntries.add(JavaRuntime.newProjectRuntimeClasspathEntry(javaProject));
// 2. Adding external jar files
classpathEntries.add(JavaRuntime.newArchiveRuntimeClasspathEntry(jarPath));
// 3. Adding a JRE entry
classpathEntries.add(JavaRuntime.computeJREEntry(launch.getLaunchConfiguration()));
然后需要解析类路径条目并将其转换为源容器
// 4. resolve the classpath entries
IRuntimeClasspathEntry[] resolved = JavaRuntime.resolveSourceLookupPath(classpathEntries.toArray(new IRuntimeClasspathEntry[0]), launch.getLaunchConfiguration());
// 5. convert them to source references
ISourceContainer[] containers = JavaRuntime.getSourceContainers(resolved));
此时源c
我正在开发一个提供 WST 服务器适配器(如 Tomcat、Jetty 等)的 Eclipse 插件 - Sling IDE Tooling.
实际服务器是一个 Java 应用程序,因此它确实有一个类路径。我有兴趣将该类路径公开给 Eclipse,以便
- 用户可以看到部署在该服务器上的内容
- 我可以在调试时填充源查找路径
我知道如何找出服务器上部署的内容,但如何将其公开给 Eclipse?
IVMConnector.connect
接受一个 ILaunch
参数,该参数又包含一个 ISourceLocator
。源定位器有一个 ISourceContainer
个实例的列表。
源容器实例是根据已解析的 IRuntimeClasspathEntry
列表构建的。一些例子:
List<IRuntimeClasspathEntry> classpathEntries = new ArrayList<>();
// 1. Adding a IJavaProject as a classpath entry
classpathEntries.add(JavaRuntime.newProjectRuntimeClasspathEntry(javaProject));
// 2. Adding external jar files
classpathEntries.add(JavaRuntime.newArchiveRuntimeClasspathEntry(jarPath));
// 3. Adding a JRE entry
classpathEntries.add(JavaRuntime.computeJREEntry(launch.getLaunchConfiguration()));
然后需要解析类路径条目并将其转换为源容器
// 4. resolve the classpath entries
IRuntimeClasspathEntry[] resolved = JavaRuntime.resolveSourceLookupPath(classpathEntries.toArray(new IRuntimeClasspathEntry[0]), launch.getLaunchConfiguration());
// 5. convert them to source references
ISourceContainer[] containers = JavaRuntime.getSourceContainers(resolved));
此时源c