7

如何使用 Eclipse P2 存储库和 Maven tycho-p2-plugin 构建 SWT 应用程序?

4

3 回答 3

5

您可以为“target-platform-configuration”插件定义目标环境。无论您正在为多个环境构建 RCP 或功能,您都可以让您的功能包含这些主机的 swt 片段。

        <plugin>
            <groupId>org.eclipse.tycho</groupId>
            <artifactId>target-platform-configuration</artifactId>
            <version>${tycho-version}</version>
            <configuration>
                <resolver>p2</resolver>
                <environments>
                    <environment>
                        <os>linux</os>
                        <ws>gtk</ws>
                        <arch>x86</arch>
                    </environment>
                    <environment>
                        <os>win32</os>
                        <ws>win32</ws>
                        <arch>x86</arch>
                    </environment>
                    <environment>
                        <os>solaris</os>
                        <ws>gtk</ws>
                        <arch>sparc</arch>
                    </environment>
                </environments>
            </configuration>
        </plugin>

feature.xml 中的片段

   <plugin
         id="org.eclipse.swt"
         download-size="0"
         install-size="0"
         version="0.0.0"
         unpack="false"/>

   <plugin
         id="org.eclipse.swt.gtk.linux.x86"
         os="linux"
         ws="gtk"
         arch="x86"
         download-size="0"
         install-size="0"
         version="0.0.0"
         fragment="true"
         unpack="false"/>

   <plugin
         id="org.eclipse.swt.win32.win32.x86"
         os="win32"
         ws="win32"
         arch="x86"
         download-size="0"
         install-size="0"
         version="0.0.0"
         fragment="true"
         unpack="false"/>
于 2011-11-02T09:12:09.270 回答
2

我发现了问题。背景:我正在构建 Xtext 为 DSL 生成的编辑器插件。

该插件依赖于org.eclipse.swt;version=3.7.0. packagingeclipse-plugin。_ 我在我的父 POM 中列出了所有必要的环境

p2 存储库是我硬盘上的一个本地镜像,我通过导出目​​标定义(*.target 文件)来填充它。

问题是导出目标定义会创建一些看起来很像 p2 存储库但存在细微差别的东西。

例如,您必须在 Target Definition 文件中定义一个目标环境(Linux/Windows/Mac、x86/x86_64、win32/cocoa/gtk)。如果您不指定任何内容,Eclipse 将使用当前平台。如果使用“*”,所有 SWT 片段都将被省略。

这意味着:导出包含所有 SWT 片段(文件夹中的 30 个插件plugins/),它们在 中被提及,contents.jar artifact.jar仅列出了与您当前平台匹配的单个 SWT 片段(即包加上源)。

这对第谷来说还不够。

解决方案:使用这个小脚本创建一个适当的 p2 存储库:

# Where you exported the Target Definition
dir="$HOME/3.7.1-from-target-platform"

# Where the result should be written. Must be != dir
dest="$HOME/3.7.1-from-target-platform-fixed"

# Make sure subsequent invocations don't try to merge old stuff
rm -rf "$dest"

# Prepend "file:" to create a URL from the path
dest="file:$dest"

echo "Merging $dir..."
./eclipse -nosplash \
    -application org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher \
    -metadataRepository "$dest" \
    -artifactRepository "$dest" \
    -repositoryName "3.7.1 Indigo Repository" \
    -source "$dir" \
    -compress -append -publishArtifacts

在工作的 Eclipse 安装中运行它。

于 2011-11-02T14:37:22.193 回答
2

Tycho 允许您构建和编译基于 Eclipse 的东西,包括插件、功能和 RCP 应用程序。在官方项目页面上有很多很好的教程,但就我而言,我使用了示例项目(http://git.eclipse.org/c/tycho/org.eclipse.tycho-demo.git/tree/itp04 -rcp )。

但是,如果您不需要构建一些插件或 RCP 应用程序,我认为您不需要 tycho:您只需将 SWT 作为正常的 maven 依赖项导入并以这种方式构建您的应用程序...

于 2011-11-01T10:54:35.067 回答