如何在Eclipse RCP项目中正确包含自建库?

问题描述 投票:0回答:1

在我的 Eclipse RCP 项目中,我使用的是一个自创建的库(库 A),该库也在其他 Java 项目中使用,这些项目不是 Eclipse RCP 项目。

我可以将此库作为 Maven 依赖项添加到目标平台,并且 Tycho 成功地选择它来构建项目。到目前为止,这符合预期。

问题:当我在 Eclipse (IDE) 中打开库时,Eclipse 将 RCP 插件中使用的库(库 A)视为与我的工作区中打开的版本不同。例如,如果我从 RCP 插件中的类跳转到库 A 中的类(通过 CTRL + 单击),Eclipse 将打开 .class 文件,而不是工作区中的 .java 文件。

此外,在 RCP 插件中搜索库 A 中的类也不会出现。

问题:如何配置我的 Eclipse RCP 项目,以便 Eclipse 识别 RCP 插件中使用的库与我工作区中的库相同,并允许在它们之间进行正确的导航和搜索?

java eclipse eclipse-rcp
1个回答
0
投票

由于库 A 是作为普通 JAR 构建的,因此我怀疑人工创建的包装器插件是问题所在。 因此,我通过修改库 A 的

pom.xml
将库 A 转换为 OSGi 包。我补充道:

<packaging>bundle</packaging>

<plugin>
  <groupId>org.apache.felix</groupId>
  <artifactId>maven-bundle-plugin</artifactId>
  <version>5.1.9</version>
  <extensions>true</extensions>
  <configuration>
    <excludeDependencies>*</excludeDependencies>
    <instructions>
      <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
      <BundleVersion>${project.version}</BundleVersion>
      <Export-Package>*</Export-Package>
    </instructions>
  </configuration>
</plugin>

在目标平台定义文件中,我更改了库 A 的条目。 我将

missingManifest
更改为
error
,将
type
更改为
bundle

<location includeDependencyDepth="direct" includeDependencyScopes="compile" includeSource="true" missingManifest="error" type="Maven" label="libA">
  <dependencies>
    <dependency>
      <groupId>com.foo</groupId>
      <artifactId>A</artifactId>
      <version>5.1.0-SNAPSHOT</version>
      <type>bundle</type>
    </dependency>
</location>

起初 Eclipse 没有接受这些更改,因为我的本地和远程 Maven 存储库中仍然有一个较旧的 A-Snapshot,显然也在一些 Eclipse 缓存中。 (增加版本号可能有助于解决此类冲突。) Eclipse 视图目标平台状态对于确定 Eclipse 是使用工作区还是本地 Maven 存储库中的库 A 非常有帮助。

总之,将自己创建的库转换为 OSGi 包解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.