eclipse-plugin tycho

eclipse plugin - Crea plugins de eclipse locales usando tycho apuntando al repositorio local p2



eclipse-plugin (3)

La respuesta de Sebastian Zarnekow me dio una pista.

Error al construir un proyecto xtext con ant: la generación de las clases de gramática falla

Como puede inferir del mensaje de error, maven no puede crear modelos de lenguaje a partir de la inyección. El motivo se explica en el enlace de arriba:

Xtext usa la plataforma: / esquema URI de recursos de EMF.

La solución es que debe darle a EMFGenerator una nueva declaración de dónde debería estar el directorio del modelo. En el archivo **. Mwe2, reemplace el siguiente código

fragment = ecore.EMFGeneratorFragment auto-inject {}

con

fragment = ecore.EMFGeneratorFragment auto-inject { javaModelDirectory = "/${projectName}/src-gen" }

debería hacer el truco.

Estoy creando algunos complementos de Eclipse y funciones que requieren complementos y funciones de terceros. Para incluir estas dependencias en mi proyecto, creé un repositorio de diseño p2.

Nota: Mis artefactos p2 no son un proyecto de Maven ... Sin embargo, estoy usando la construcción de estilo Maven. Aquí está el pom.xml para el repositorio p2

<properties> <tycho-version>0.18.0</tycho-version> </properties> <repositories> <repository> <id>eclipse-platform-m6</id> <layout>p2</layout> <url>http://download.eclipse.org/eclipse/updates/3.8</url> </repository> </repositories> <build> <plugins> <plugin> <groupId>org.eclipse.tycho.extras</groupId> <artifactId>tycho-p2-extras-plugin</artifactId> <version>${tycho-version}</version> <executions> <execution> <phase>prepare-package</phase> <goals> <goal>publish-features-and-bundles</goal> </goals> <configuration> <compress>false</compress> <artifactRepositoryLocation>/mypath/target/repository</artifactRepositoryLocation> <metadataRepositoryLocation>/mypath/target/repository</metadataRepositoryLocation> <sourceLocation>/mypath/src</sourceLocation> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>tycho-p2-repository-plugin</artifactId> <version>${tycho-version}</version> <configuration> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>verify-repository</goal> <goal>archive-repository</goal> </goals> <configuration> <compress>false</compress> <includeAllDependencies>true</includeAllDependencies> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>tycho-p2-publisher-plugin</artifactId> <version>${tycho-version}</version> <configuration> <publishArtifacts>true</publishArtifacts> </configuration> </plugin> <plugin><!-- enable the Tycho build extension --> <groupId>org.eclipse.tycho</groupId> <artifactId>tycho-maven-plugin</artifactId> <version>${tycho-version}</version> <extensions>true</extensions> </plugin> </plugins> </build>

Lo anterior se compila con éxito y crea (y verifica) un repositorio p2. Obtengo la siguiente estructura en mi target/ directorio del proyecto

- Project .. .. - target - p2agent - org.eclipse.equinox.p2.core - org.eclipse.equinox.p2.engine - repository - features - plugins artifacts.xml content.xml <projectname>-<version>.zip <!-- This contains same things as repository directory here -->

Ahora, uso Tycho para construir mis complementos y funciones y remito al repositorio p2 que creé anteriormente. Tengo la siguiente estructura de proyecto para mis complementos y funciones

- bundle.parent - bundle.mainplugin - bundle.mainplugin.test.fragment - bundle.mainplugin.feature

Aquí está mi paquete.parent pom.xml

<repositories> <repository> <id>eclipse-platform-m6</id> <layout>p2</layout> <url>http://download.eclipse.org/eclipse/updates/3.8</url> </repository> <repository> <id>third-party-eclipse-plugins</id> <layout>p2</layout> <url>file:///.../target/repository</url> </repository> </repositories> <modules> <module>../bundle.mainplugin</module> <module>../bundle.mainplugin.test.fragment</module> <module>../bundle.mainplugin.feature</module> </modules> <build> <plugins> <plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>tycho-maven-plugin</artifactId> <version>${tycho-version}</version> <extensions>true</extensions> </plugin> </plugins> </build>

Finalmente, ejecuto metas mvn clean install en el pom.xml padre. Lamentablemente, mvn-compile arroja problemas de compilación cuando las clases de mi complemento amplían algunas de las clases en complementos. (Las clases también son necesarias en tiempo de ejecución). Aquí está el error:

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.eclipse.tycho:tycho-compiler-plugin:0.18.0:compile (default-compile ) on project <Project Name>: Compilation failure at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) Caused by: copied.org.apache.maven.plugin.CompilationFailureException: Compilation failure at copied.org.apache.maven.plugin.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:442) at org.eclipse.tycho.compiler.AbstractOsgiCompilerMojo.execute(AbstractOsgiCompilerMojo.java:239) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) ... 19 more

Mi pregunta:

A partir de los errores del compilador, creo que Tycho de alguna manera no está poniendo a disposición de mis clases estos artefactos de terceros para los que existe un error de compilación. ¿Hay alguna manera de determinar si mis clases de complementos existen en el classpath de Tycho?

ACTUALIZAR

Comprobé la disponibilidad de paquetes de terceros que deseo estar disponible en el reactor Tycho desde esta ubicación

java -jar /home/.../eclipse-3.8.2/plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar -debug -consolelog -application org.eclipse.equinox.p2.director -repository file:///home/../target/repository -list

Todos los paquetes de terceros aparecieron con éxito.


Simplemente reemplace:

<url>file:///.../target/repository</url>

por:

<url>file:<projectname>/deploy/target/repository</url>

(si tu padre pom.xml es tu carpeta raíz)


para cualquier persona que también se encuentre con este problema, también puede intentar usar:

${project.basedir}

Entonces, digamos que tienes los siguientes directorios:

- projects: - main-project - local-repository

En el padre pom (es decir: main-project / pom.xml), haga referencia al repositorio local, utilizando una ruta relativa, de la siguiente manera:

<url>file:${project.basedir}/target/repository</url>