2010-06-27 57 views
6

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

+0

我想看到这个 - 祝你好运,但答案:) – javamonkey79 2010-06-28 05:11:12

+0

我找不到你的问题的细节。需要更多信息。 – Kane 2011-11-02 05:10:50

+0

@Kane:什么原因导致错误信息“无法确定SWT实施片段包”?我的POM中缺少哪些信息? – 2011-11-02 08:17:36

回答

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"/> 
+0

我正在构建一个插件(' eclipse-plugin')我有'environments'条目,并且在本地p2仓库中有必要的插件,但Tycho无法决定选择哪一个。 – 2011-11-02 09:24:34

2

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

不过,如果你并不需要建立一些插件或RCP应用程序,我想你不需要第谷:你刚才可以导入SWT作为一个正常的Maven的依赖,建立自己的应用程序,方法...

+0

这个例子看起来不错,但并不能解释它是如何工作的。我的问题是,我收到一条错误消息('无法确定SWT实现片段包'),我不知道如何摆脱它。这可能是我错过的一些细节,因为我的项目中所有明显的设置都与演示中的相同。 – 2011-11-01 17:12:44

+0

+1,tycho的RCP示例演示了如何为多个环境(如Windows和Linux)构建应用程序。 – Kane 2011-11-02 05:11:42

+0

@Kane:我没有构建RCP产品,而是依赖于SWT的捆绑软件。 – 2011-11-02 08:19:05

2

我发现这个问题。背景:我正在构建Xtext为DSL生成的编辑器插件。这个插件取决于org.eclipse.swt;version=3.7.0packagingeclipse-plugin。我是listing all the necessary environments in my parent POM

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

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

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

这意味着:出口包含,它们在contents.jar提及,但在artifact.jar只列出符合你当前平台的单一SWT片段的所有SWT片段(在plugins/文件夹30个插件)(即包加来源)。

这对Tycho来说还不够。

解决方案:使用这个小脚本适当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安装内。