2010-06-27 12 views
6

¿Cómo construyo una aplicación SWT usando el repositorio Eclipse P2 y el plugin Maven tycho-p2?Uso de Maven tycho-p2-plugin con SWT

+0

Me gustaría ver esto también - buena suerte con una respuesta :) – javamonkey79

+0

No puedo encontrar el detalle de su problema. Necesitas más información. – Kane

+0

@Kane: ¿Cuál es la causa del mensaje de error "No se pudo determinar el paquete de fragmentos de implementación de SWT"? ¿Qué información falta en mi POM? –

Respuesta

4

Puede definir los entornos de destino para el complemento 'configuración de plataforma de destino'. Independientemente de que esté construyendo RCP o características para múltiples entornos, puede dejar que su función incluya los fragmentos de swt para estos hosts.

 <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> 

de fragmentos en 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

Estoy construyendo un complemento (' eclipse-plugin') Tengo la entrada 'environments' y tengo los complementos necesarios en mi repositorio p2 local, pero Tycho no puede decidir cuál elegir. –

2

Tycho le permite compilar & compilar cosas basadas en eclipse, incluyendo complementos, funciones y aplicaciones RCP. En la página oficial del proyecto hay toneladas de buenos tutoriales, pero en mi caso utilicé el proyecto de muestra (http://git.eclipse.org/c/tycho/org.eclipse.tycho-demo.git/tree/itp04-rcp).

Sin embargo, si no es necesario construir algunos plugins o una aplicación RCP, creo que no es necesario Tycho: sólo puede importar SWT como una dependencia experto normal y construir su aplicación de esa manera ...

+0

Ese ejemplo se ve bien pero eso no explica cómo funciona. Mi problema es que recibo un mensaje de error ("No se pudo determinar el paquete de fragmentos de implementación de SWT") y no tengo idea de cómo deshacerme de él.Es probable que me falte algún detalle, ya que todos los ajustes obvios en mi proyecto son los mismos que en la demostración. –

+0

+1, el ejemplo RCP de tycho demuestra cómo crear una aplicación para múltiples entornos, como Windows y Linux. – Kane

+0

@Kane: No estoy creando un producto RCP sino un paquete que depende de SWT. –

2

He encontrado el problema. Fondo: estoy construyendo el plugin editor que Xtext genera para DSL.

El complemento depende de org.eclipse.swt;version=3.7.0. El packaging es eclipse-plugin. Soy listing all the necessary environments in my parent POM.

El repositorio p2 es un duplicado local en mi disco duro que llene al exportar una definición de destino (* .target file).

El problema es que exportar una definición de destino creará algo que se parece mucho a un repositorio de p2, pero hay diferencias sutiles.

Por ejemplo, debe definir un entorno de destino (Linux/Windows/Mac, x86/x86_64, win32/cocoa/gtk) en el archivo de definición de destino. Si no especifica nada, Eclipse utilizará la plataforma actual. Si usa "*", todos los fragmentos SWT se omitirán.

Esto significa que: La exportación contiene todos los fragmentos SWT (30 plugins en la carpeta plugins/), que se mencionan en la contents.jarpero el artifact.jar sólo enumera el fragmento SWT única que coincide con su plataforma actual (es decir, el haz plus las fuentes).

Esto no es suficiente para Tycho.

Solución: Crear un acuerdo de recompra p2 adecuado el uso de este pequeño script:

# 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 

Ejecutar este interior de una instalación de Eclipse de trabajo.