2010-06-27 54 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安裝內。