需要 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.
中声明的依赖项
我正在度过那些夜晚之一......
我正在使用 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.