¿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
Respuesta
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"/>
Estoy construyendo un complemento ('
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 ...
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. –
+1, el ejemplo RCP de tycho demuestra cómo crear una aplicación para múltiples entornos, como Windows y Linux. – Kane
@Kane: No estoy creando un producto RCP sino un paquete que depende de SWT. –
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.jar
pero 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.
- 1. ¿Cómo se puede construir una aplicación SWT con Maven
- 2. Crear una aplicación SWT de arquitectura múltiple con Maven
- 3. SWT problema con syncExec()
- 4. JFreeChart con SWT
- 5. Comparar SWT con SWING
- 6. Proyecto Scala SWT con SBT
- 7. Uso de las extensiones de Liquibase con Maven
- 8. DSL/Rubyish wrapper para SWT para el uso en JRuby?
- 9. uso del complemento maven enforcer
- 10. ¿Cómo uso las compilaciones nocturnas de Scala 2.9 con maven?
- 11. El uso de Maven para el despliegue
- 12. SWT: tabla con celdas que abarcan columnas
- 13. Mostrar diálogo modal principal con SWT
- 14. Crear un botón personalizado con SWT
- 15. Problema con el diseño: autogrow label (SWT)
- 16. Uso de múltiples repositorios en Maven
- 17. ¿Qué plugin maven uso para AspectJ?
- 18. swt tutoriales o guías
- 19. Copiando porciones de imágenes swt de Java con alpha
- 20. SWT/JFace: eliminar widgets
- 21. BufferedImage a SWT imagen
- 22. Creando documentación con maven
- 23. Java SWT: widgetSeleccionado vs widgetDefaultSelected
- 24. SWT No More Handles
- 25. Validación en texto swt
- 26. Configuración de colores en SWT
- 27. compilación SWT - problema de redibujado
- 28. Scrolling SWT Table programmatically
- 29. SWT Tamaño máximo compuesto
- 30. SWT: diseños anidados con ScrolledComposite excede el espacio disponible
Me gustaría ver esto también - buena suerte con una respuesta :) – javamonkey79
No puedo encontrar el detalle de su problema. Necesitas más información. – Kane
@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? –