2010-12-03 13 views
40

Nuestra empresa utiliza Maven. Usamos el administrador de repositorio Nexus para almacenar nuestras instantáneas y lanzamientos.¿Herramienta para gestionar/alojar repositorios propios de p2?

Actualmente, estamos desarrollando un producto basado en Eclipse. Usamos Tycho para hacer eso.

El problema es el siguiente: En nuestro producto basado en Eclipse tenemos muchas características. Nuestra idea es construir cada característica (o grupo de características) por separado y ponerlas en repositorios internos de p2. Cuando una característica requiere otra característica, apuntamos la plataforma objetivo al repositorio interno necesario de p2.

Actualmente, creamos la aplicación con Tycho. Hacemos que nuestras funciones sean "implementables", por lo que Tycho produce un sitio P2 en target. Empujamos ese sitio P2 a nuestro servidor y luego ejecutamos Eclipse FeaturesAndBundlesPublisher, que combina esa función recientemente construida con un repositorio P2. Como resultado, tenemos un repositorio interno de P2 que tiene todas las versiones de la función requerida.

Nos parece que este proceso es demasiado engorroso. ¿Hay alguna herramienta como Nexus, que sería más conveniente?

UPD:. Hay una discussion on Tycho Users list

+4

Nexus Pro ofrece algunas características de repositorio P2. ¿Has visto si satisfaría tus necesidades? – RonU

+5

Ya no es una función exclusiva de Nexus Pro; desde Nexus 2.x, el complemento p2 ahora es de código abierto y gratuito para que todos puedan usar http://www.infoq.com/news/2012/02/nexus-20 y https://github.com/sonatype/nexus- p2-repository-plugin –

+3

La discusión en la lista de tycho que ha vinculado es muy antigua. Nexus con el repositorio p2 debería poder ayudarte. Si hay problemas con eso, pregunte en la lista de correo de los usuarios nexus o aquí e intentaremos ayudarlo. –

Respuesta

9

Con la Unzip Repository Nexus Plugin, puede utilizar Nexus para el intercambio de artefactos binarios entre Tycho construye.

  • Tycho proyecto A publica sus artefactos como un proyecto normal de Maven: El proyecto se construye con mvn clean deploy, que carga los artefactos del proyecto en su despliegue Maven repositorio en el Nexus. El único requisito especial es que el proyecto construya un repositorio p2. La forma recomendada de hacerlo es un módulo eclipse-repository, pero una "función desplegable" también debería funcionar en la mayoría de los casos.

  • En su Nexus, solo necesita la siguiente configuración única: para implementar el repositorio Maven (o un "Grupo de repositorio" que incluye ese repositorio), necesita agregar un repositorio virtual de tipo "Descomprimir repositorio" . Este repositorio virtual muestra los artefactos zip desde el repositorio de despliegue en forma no empaquetada.

    Ejemplo: Si el repositorio postal p2 del proyecto A está en el repositorio Maven se despliegan al http://nexus.corp/nexus/repositories/build.milestones/corp/example/project-a/project-a-repo/1.0.0/project-a-repo-1.0.0.zip, que estará disponible en formato P2 repositorio estándar en el Repositorio Descomprimir en http://nexus.corp/nexus/repositories/build.milestones.unzip/corp/example/project-a/project-a-repo/1.0.0/project-a-repo-1.0.0.zip-unzip/.

  • Tycho project B puede hacer referencia a los artefactos del proyecto A añadiendo la última URL a su target platform, p. Ej. en un archivo de definición de destino.

En el ejemplo anterior, el proyecto B hace referencia a una versión de lanzamiento de proyecto A. El mismo método también funciona para las fotos porque el Repositorio Descomprimir tiene soporte para "symbolic" versions, como 1.1.0-SNAPSHOT por última desplegado 1.1.0-SNAPSHOT o incluso solo SNAPSHOT para la versión más alta general. Utilizando estas versiones simbólicas, el Proyecto B puede, por ejemplo, en su propia construcción de CI, hacer referencia al proyecto de resultados de construcción de CI A agregando las URL de repositorio p2 resultantes (¡estables!) En su plataforma de destino.

Disclaimer: Unzip Repository Nexus Plugin es parte del proyecto Tycho, del cual soy committer.

+0

Hey oberlies, ¿podrías explicar el último pasaje con la versión "simbólica" con más detalle? Porque siempre necesito especificar exactamente el URI en la definición de * .target como "../p2.repository/1.0.0-SNAPSHOT/p2.repository-1.0.0-20130124.123220-3.zip-unzip/" con el índice. Lo que necesito es darle al * .target un URI como "../p2.repository/1.0.0-SNAPSHOT/p2.repository-1.0.0-SNAPSHOT.zip-unzip/" para obtener siempre la versión más nueva. Y el mismo problema está en el * .target-file con las unidades-elementos. Su ejemplo anterior no tiene RELEASE o SNAPSHOT (sin calificador). ¿Como hacer esto? – Timo

+0

El repositorio de descompresión admite direcciones URL de la forma .../p2.repository/1.0.0-SNAPSHOT/p2.repository-1.0.0-SNAPSHOT.zip-unzip/(a ​​diferencia de los repositorios normales de Maven). Junto con '' en los archivos de destino, puede configurar una referencia a la última versión de una versión de SNAPSHOT. – oberlies

+0

Gracias por su respuesta. Eso es exactamente lo que traté de definir en el * .target pero tycho dice: ".TargetDefinitionResolutionException: Error al cargar el repositorio de metadatos desde la ubicación: ../p2.repository/1.0.0-SNAPSHOT/p2.repository-1.0.0-SNAPSHOT .zip-unzip/" ¿Se requiere alguna configuración especial? ¿Debería esto funcionar también en el navegador web? – Timo

2

Quizás esto sea un poco tarde, pero actualmente estoy trabajando en un administrador de repositorio de código abierto (EPL) que admite el flujo de trabajo de implementar en un repositorio con maven y tycho, y consumirlo como repositorio P2.

También es posible implementar paquetes creados por maven (no maven tycho) y los metadatos P2 se generarán automáticamente.

El proyecto se llama "paquete Drone" y hosted on github. También hay un short introduction video.

+0

Gracias por la respuesta. Fue hace un tiempo. ¡Veamos lo que dicen otras personas! –

Cuestiones relacionadas