使用带有SWT的Maven tycho-p2-plugin

时间:2010-06-27 18:09:03

标签: java maven swt tycho p2

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

3 个答案:

答案 0 :(得分:4)

您可以为“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"/>

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

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

该插件取决于org.eclipse.swt;version=3.7.0packagingeclipse-plugin。我是listing all the necessary environments in my parent POM

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

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

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

这意味着:导出包含所有SWT片段(plugins/文件夹中的30个插件),contents.jar 中提到了它们,但artifact.jar仅列出了单个# 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 与您当前平台匹配的SWT片段(即捆绑加上来源)。

这对第谷来说还不够。

解决方案:使用这个小脚本创建一个合适的p2 repo:

{{1}}

在正常运行的Eclipse安装中运行它。