Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "VIATRA/DeveloperDocumentation/BuildConfig"

m (Harmath.incquerylabs.com moved page VIATRA/Query/DeveloperDocumentation/BuildConfig to VIATRA/DeveloperDocumentation/BuildConfig: Project merge)
(Update to VIATRA Query 1.2)
Line 1: Line 1:
= The EMF-IncQuery build system  =
+
= The VIATRA build system  =
  
EMF-IncQuery uses Maven/Tycho for continous integration builds.<br>
+
VIATRA uses Maven/Tycho for continous integration builds.  
  
 
== Project structure  ==
 
== Project structure  ==
  
*''plugins/*'': The various plug-ins projects EMF-IncQuery project consists of.<br>
+
=== Components ===
*''features/*'': Installable feature projects<br>
+
 
*''tests/*'': Plug-ins related to testing EMF-IncQuery. Does not include tests with external dependencies (e.g. [https://github.com/ujhelyiz/EMF-IncQuery-Examples/tree/master/school school])<br>
+
*''query'': Querying EMF models (formerly EMF-IncQuery).
*''releng/org.eclipse.incquery.licence.feature'': special licence feature for the update site to avoid storing the EPL licence multiple times. Possibly replaceable in the future with a similar feature from the Juno update site.<br>
+
*''transformation'': Transforming EMF models.
*''releng/org.eclipse.incquery.parent'': The root project of the build, used as parent project for configuration inheritance, and it contains a lists of projects to build.<br>
+
*''cep'': Complex Event Processing framework.
*''releng/org.eclipse.incquery.update'': Update site project - the build creates a p2 repository from this project.  
+
*''dse'': Design Space Exploration framework.
*''releng/org.eclipse.incquery.update.extras'': Update site project - the build creates a p2 repository from this project.<br>
+
*''integration'': Integrations with other technologies.
 +
*''addon'': Addons for implementing useful application functionality with VIATRA queries.
 +
 
 +
Each component has the following subdirectories:
 +
 
 +
*''plugins'': The various plug-ins projects the component consists of.  
 +
*''features'': Installable feature projects of the component.
 +
*''tests'': Plug-ins related to testing the component. They do not include tests with external dependencies.  
 +
 
 +
=== Other ===
 +
 
 +
*''releng'': Release engineering projects:
 +
**''org.eclipse.viatra.parent'': Used as parent project for configuration inheritance.
 +
**Container projects for all submodules:
 +
***''org.eclipse.viatra.parent.all'': Root Maven project which contains all submodules.
 +
***''org.eclipse.viatra.update.all'': Builds a p2 update site from all submodules.
 +
***''org.eclipse.viatra.target.all'': The target definition necessary for building all submodules.
 +
**Container projects for the "core" submodules which can be used outside of Eclipse:
 +
***''org.eclipse.viatra.parent.core'': Root project which contains the core submodules.
 +
***''org.eclipse.viatra.update.core'': Builds a p2 update site from the core submodules.
 +
***''org.eclipse.viatra.target.core'': The target definition necessary for building the core submodules.
 +
**Oomph setup:
 +
***''org.eclipse.viatra.setup'': The setup files for setting up the development environments.
 +
***''org.eclipse.viatra.generator'': The generator MWE2 workflows used by the setup.
 +
*''maven'': VIATRA Maven plugins.
 +
*''examples'': Basic examples of various VIATRA features.
 +
*''artwork'': Logos in various formats.
 +
 
  
 
== Adding a new project to the build  ==
 
== Adding a new project to the build  ==
Line 17: Line 44:
 
There are two important things to configure for adding a new project to the build:  
 
There are two important things to configure for adding a new project to the build:  
  
#In order to technically build the project, a build configuration needs to be created (and registered in the root project).  
+
#In order to technically build the project, a build configuration needs to be created (and registered in the parent project).  
##This consists of a single pom.xml file in the project root.  
+
##This consists of a single pom.xml file in the project root directory.  
 
##And a module declaration in the parent pom.  
 
##And a module declaration in the parent pom.  
 
#Add the created feature to either an existing or a new feature  
 
#Add the created feature to either an existing or a new feature  
Line 25: Line 52:
 
##In both cases, don't forget to add the source plugin to the SDK or another Sources feature.
 
##In both cases, don't forget to add the source plugin to the SDK or another Sources feature.
  
An example commit for executing all these steps (with the creation of a new project) is: https://github.com/ujhelyiz/EMF-IncQuery/commit/4b523260c94ddb2605ce1088... (Note that the addition of a source plugin is not included).<br>
+
An example commit for executing all these steps (with the creation of a new project) is: https://github.com/ujhelyiz/EMF-IncQuery/commit/4b523260c94ddb2605ce1088 (Note that the addition of a source plugin is not included).  
  
 
=== Defining the build configuration for a plug-in project  ===
 
=== Defining the build configuration for a plug-in project  ===
  
A project needs to have a pom.xml file in the project root for the build configuration. In most cases, this build configuration is very simple, as all required configurations are inherited either from the project type (Eclipse plug-in project) or the root project. Basically, there are two configuration types used in the project:  
+
A project needs to have a pom.xml file in the project root for the build configuration. In most cases, this build configuration is very simple, as all required configurations are inherited either from the project type (Eclipse plug-in project) or parent project. Basically, there are two configuration types used in the project:  
  
*Projects with xtend files (e.g. the [http://git.eclipse.org/c/incquery/org.eclipse.incquery.git/tree/plugins/org.eclipse.incquery.tooling.core org.eclipse.incquery.tooling.core] project)<br>
+
*Projects with xtend files (e.g. the [http://git.eclipse.org/c/viatra/org.eclipse.viatra.git/tree/query/plugins/org.eclipse.viatra.query.tooling.core org.eclipse.viatra.query.tooling.core] project)  
*Projects without xtend files (e.g. the [http://git.eclipse.org/c/incquery/org.eclipse.incquery.git/tree/plugins/org.eclipse.incquery.runtime.base org.eclipse.incquery.runtime.base] project)
+
*Projects without xtend files (e.g. the [http://git.eclipse.org/c/viatra/org.eclipse.viatra.git/tree/query/plugins/org.eclipse.viatra.query.runtime.base org.eclipse.viatra.query.runtime.base] project)
  
 
To create such a configuration file for a new project, the recommended solution is to copy an existing corresponding project configuration, and replace the plug-in identifier.  
 
To create such a configuration file for a new project, the recommended solution is to copy an existing corresponding project configuration, and replace the plug-in identifier.  
  
Warning! If a project for any reason uses a different version number then the base IncQuery project (currently 0.7.0.qualifier), it is important to add the version information to the project, replacing '.qualifier' with '-SNAPSHOT' (currently 0.7.0-SNAPSHOT).
+
Warning! If a project for any reason uses a different version number than the base VIATRA project, it is important to add the version information to the project, replacing '.qualifier' with '-SNAPSHOT'.  
 
+
Additionally, the new project needs to be added to the parent project (org.eclipse.incquery.parent):
+
  
The pom.xml file contains a module section where a list of submodules are presented - it needs to be extended with a new submodule describing the project location.<br>
+
Additionally, the new project needs to be added to the root project (org.eclipse.viatra.parent.all): The pom.xml file contains a modules section where a list of submodules are presented - it needs to be extended with a new submodule describing the project location.  
  
 
=== Adding the plug-in to an existing feature  ===
 
=== Adding the plug-in to an existing feature  ===
  
The existing feature.xml file has to be extended with the new plug-in as a contained plug-in id.<br>
+
The existing feature.xml file has to be extended with the new plug-in as a contained plug-in id.
  
Currently most source plug-ins are installed with the SDK bundle, with the notable exceptions of Graphiti and GMF support plug-ins that can be installed by selecting the source features.<br>
+
Currently most source plug-ins are installed with the SDK bundle, with the notable exceptions of Graphiti and GMF support plug-ins that can be installed by selecting the source features.  
  
 
=== Adding the plug-in to a new feature  ===
 
=== Adding the plug-in to a new feature  ===
  
Creating a new feature project works similarly to creating a new plug-in project, but the feature builder pom.xml files are more simple. The recommended way of creating a new feature is to copy and existing one, and modifying the identifier, descriptions and contained plug-ins (and possibly features). The feature also needs to be registered into the root projects module section.  
+
Creating a new feature project works similarly to creating a new plug-in project, but the feature builder pom.xml files are more simple. The recommended way of creating a new feature is to copy and existing one, and modifying the identifier, descriptions and contained plug-ins (and possibly features). The feature also needs to be registered into the root project's module section.  
  
Additionally, this feature needs to be added to (at least) one the update sites. For this reason, the feature needs to be registered in the category.xml file stored in the corresponding update site project (the category.xml file has a form-based editor in PDE).
+
Additionally, this feature needs to be added to the update site. For this reason, the feature needs to be registered in the category.xml file stored in the update site project (the category.xml file has a form-based editor in PDE).

Revision as of 09:28, 24 March 2016

The VIATRA build system

VIATRA uses Maven/Tycho for continous integration builds.

Project structure

Components

  • query: Querying EMF models (formerly EMF-IncQuery).
  • transformation: Transforming EMF models.
  • cep: Complex Event Processing framework.
  • dse: Design Space Exploration framework.
  • integration: Integrations with other technologies.
  • addon: Addons for implementing useful application functionality with VIATRA queries.

Each component has the following subdirectories:

  • plugins: The various plug-ins projects the component consists of.
  • features: Installable feature projects of the component.
  • tests: Plug-ins related to testing the component. They do not include tests with external dependencies.

Other

  • releng: Release engineering projects:
    • org.eclipse.viatra.parent: Used as parent project for configuration inheritance.
    • Container projects for all submodules:
      • org.eclipse.viatra.parent.all: Root Maven project which contains all submodules.
      • org.eclipse.viatra.update.all: Builds a p2 update site from all submodules.
      • org.eclipse.viatra.target.all: The target definition necessary for building all submodules.
    • Container projects for the "core" submodules which can be used outside of Eclipse:
      • org.eclipse.viatra.parent.core: Root project which contains the core submodules.
      • org.eclipse.viatra.update.core: Builds a p2 update site from the core submodules.
      • org.eclipse.viatra.target.core: The target definition necessary for building the core submodules.
    • Oomph setup:
      • org.eclipse.viatra.setup: The setup files for setting up the development environments.
      • org.eclipse.viatra.generator: The generator MWE2 workflows used by the setup.
  • maven: VIATRA Maven plugins.
  • examples: Basic examples of various VIATRA features.
  • artwork: Logos in various formats.


Adding a new project to the build

There are two important things to configure for adding a new project to the build:

  1. In order to technically build the project, a build configuration needs to be created (and registered in the parent project).
    1. This consists of a single pom.xml file in the project root directory.
    2. And a module declaration in the parent pom.
  2. Add the created feature to either an existing or a new feature
    1. If an existing feature is used, the feature.xml has to be extended with the id of the new project.
    2. If a new feature is created, this feature is required to be registered both in the root project and in the update projects' category.xml file.
    3. In both cases, don't forget to add the source plugin to the SDK or another Sources feature.

An example commit for executing all these steps (with the creation of a new project) is: https://github.com/ujhelyiz/EMF-IncQuery/commit/4b523260c94ddb2605ce1088 (Note that the addition of a source plugin is not included).

Defining the build configuration for a plug-in project

A project needs to have a pom.xml file in the project root for the build configuration. In most cases, this build configuration is very simple, as all required configurations are inherited either from the project type (Eclipse plug-in project) or parent project. Basically, there are two configuration types used in the project:

To create such a configuration file for a new project, the recommended solution is to copy an existing corresponding project configuration, and replace the plug-in identifier.

Warning! If a project for any reason uses a different version number than the base VIATRA project, it is important to add the version information to the project, replacing '.qualifier' with '-SNAPSHOT'.

Additionally, the new project needs to be added to the root project (org.eclipse.viatra.parent.all): The pom.xml file contains a modules section where a list of submodules are presented - it needs to be extended with a new submodule describing the project location.

Adding the plug-in to an existing feature

The existing feature.xml file has to be extended with the new plug-in as a contained plug-in id.

Currently most source plug-ins are installed with the SDK bundle, with the notable exceptions of Graphiti and GMF support plug-ins that can be installed by selecting the source features.

Adding the plug-in to a new feature

Creating a new feature project works similarly to creating a new plug-in project, but the feature builder pom.xml files are more simple. The recommended way of creating a new feature is to copy and existing one, and modifying the identifier, descriptions and contained plug-ins (and possibly features). The feature also needs to be registered into the root project's module section.

Additionally, this feature needs to be added to the update site. For this reason, the feature needs to be registered in the category.xml file stored in the update site project (the category.xml file has a form-based editor in PDE).

Back to the top