需要 Apache commons-lang3 作为使用 Tycho 构建的 Eclipse 插件的依赖项

Need Apache commons-lang3 as dependency of an Eclipse plugin built with Tycho

我正在度过那些夜晚之一...... 我正在使用 Tycho(Maven 扩展)开发 Eclipse 插件,有时我只想使用 org.apache.commons 中的 class StringUtils。经过一些研究,我能找到的唯一方法是在我的 pom.xml 父文件中添加以下代码:

  <dependencies>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.3.2</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.eclipse.tycho</groupId>
        <artifactId>tycho-maven-plugin</artifactId>
        <version>${tycho.version}</version>
        <extensions>true</extensions>
      </plugin>

      <plugin>
        <groupId>org.eclipse.tycho</groupId>
        <artifactId>target-platform-configuration</artifactId>
        <version>${tycho.version}</version>
        <configuration>
            <pomDependencies>consider</pomDependencies>
          <environments>
            <environment>
              ...

这没有用,我尝试过的任何其他解决方案也没有用。 我是第一次使用 Maven,所以也许我遗漏了一些东西(或很多东西)...... 有人有想法吗?我会非常感激 :o)

听起来您需要 "upgrade" 才能使用 target platform 来定义您的目标。

您如何在您的开发环境中实现这种依赖性?如果您没有使用目标平台,那么您将继承开发中安装的任何插件(即默认目标平台)。

创建目标平台

首先创建目标平台。我建议使用 Target Platform Definition DSL and Generator 创建和编辑目标平台。

轨道 tpd 文件看起来像这样

target "name"

with source requirements

location "http://download.eclipse.org/tools/orbit/downloads/drops/R20150519210750/repository/" mars-orbit {
    org.apache.commons.lang3
}

location "http://download.eclipse.org/releases/mars" mars-release {
    org.eclipse.platform.feature.group
    org.eclipse.equinox.executable.feature.group
    org.eclipse.e4.rcp.feature.group
    org.eclipse.ui.trace
    org.eclipse.pde.feature.group
}

此示例使用已为第三方创建的 OSGi 包。您可以选择哪个版本的 orbit 并浏览 Orbit Site 上的所有可用包。您还可以在 tpd 编辑器中使用自动完成功能。

Tycho 使用目标平台

target 文件放入新插件中。将目标文件命名为与插件相同的名称。 (例如 com.example.releng.targetplatform.target 是本例中目标文件的名称。)

在这个项目中,一个 pom 看起来像这样:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <artifactId>com.example.releng.targetplatform</artifactId>
  <packaging>eclipse-target-definition</packaging>
  <parent>
    <groupId>com.example</groupId>
    <artifactId>com.example.releng</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <relativePath>../com.example.releng</relativePath>
  </parent>
</project>

您可以像这样配置(在您的 releng pom.xml 中)目标配置:

<plugin>
    <groupId>org.eclipse.tycho</groupId>
    <artifactId>target-platform-configuration</artifactId>
    <version>${tycho-version}</version>
    <configuration>
        <target>
            <artifact>
                <groupId>eGui</groupId>
                <artifactId>com.example.releng.targetplatform</artifactId>
                <version>1.0.0-SNAPSHOT</version>
            </artifact>
        </target>
    </configuration>
</plugin>

教程

看看 Code & Me's excellent tutorial on Tycho,它更详细,从新项目到完整的 Tycho 经历了许多步骤。

您的配置看起来是正确的。因此,如果它不起作用,您可能缺少 MANIFEST.MF 中的依赖项声明。为此,例如在该文件中添加 Require-Bundle: org.apache.commons.lang3

背景:对于 Tycho 而言,POM 中的依赖项并不自动意味着您的包也自动具有此依赖项。这仅意味着工件将被添加到目标平台(假设 pomDependencies=consider 已配置并且工件是 OSGi 包 - 在您的情况下两者都是正确的)。一旦它进入目标平台,它就可以用来解析在你的包的 MANIFEST.MF.

中声明的依赖项