Jump to: navigation, search

Difference between revisions of "Building an Update Site using Buckminster"

(New page: ==Creating the Update Site Project== #Right click in the Package Explorer and select ''New'' -> ''Project'' #In the ''New Project'' wizard that pops up, open the ''Plug-in Development'' fo...)
 
Line 1: Line 1:
 +
=Using Buckminster for Update Site building=
 +
This is a step by step instruction on how to create an update site using Buckminster. It assumes that you already have some features that you want to include on the site and that you have the Buckminster core and pde support installed in the IDE.
 +
 +
Some names in this example are keywords that has to be entered verbatim. Such names are marked <font color=blue>in blue</font>.
 +
 
==Creating the Update Site Project==
 
==Creating the Update Site Project==
 
#Right click in the Package Explorer and select ''New'' -> ''Project''
 
#Right click in the Package Explorer and select ''New'' -> ''Project''
 
#In the ''New Project'' wizard that pops up, open the ''Plug-in Development'' folder
 
#In the ''New Project'' wizard that pops up, open the ''Plug-in Development'' folder
 
#Click on ''Update Site Project''
 
#Click on ''Update Site Project''
#Give the project a name. We use '''org.test.update'''
+
#Give the project a name. In this example we use '''org.test.update'''
 
#Click on ''Finish''
 
#Click on ''Finish''
  
Line 12: Line 17:
  
 
==Creating the Component Specification==
 
==Creating the Component Specification==
Now we need to add some content to our site. This is done by adding a Buckminster CSPEC to the project.
+
Buckminster describes all components in terms of CSPECs. The update site is no exception. Here are the steps to create such a CSPEC and enter the needed information:
 
+
 
#Right click on the project and select ''New'' -> ''Other''
 
#Right click on the project and select ''New'' -> ''Other''
 
#In the ''New'' wizard that pops up, open the ''Buckminster'' folder
 
#In the ''New'' wizard that pops up, open the ''Buckminster'' folder
Line 19: Line 23:
 
#Click on ''Finish'' to accept the default values for ''Container:'' and ''File name:''
 
#Click on ''Finish'' to accept the default values for ''Container:'' and ''File name:''
  
A file named '''buckminster.cspec''' is created in the project and the Buckminster CSPEC editor opens:
+
A file named '''buckminster.cspec''' is created in the project and the Buckminster CSPEC editor opens. Do not change the name of this file.
  
 
===Main information===
 
===Main information===
Line 30: Line 34:
 
#Click on the Artifacts tab
 
#Click on the Artifacts tab
 
#Click on ''New'' below the Artifacts table
 
#Click on ''New'' below the Artifacts table
#Enter the name '''site.template'''
+
#Enter a name such as '''site.template'''
 
#Click on the ''New'' button next to the ''Path'' table
 
#Click on the ''New'' button next to the ''Path'' table
 
#Enter the name '''site.xml''' in the dialog that pops up and click ''OK''
 
#Enter the name '''site.xml''' in the dialog that pops up and click ''OK''
Line 49: Line 53:
 
##Click ''OK''
 
##Click ''OK''
  
===Groups (categories)===
+
===Groups===
This step is optional unless you want to categorize the contents of the update site. The build action will automatically match groups that it finds in the CSPEC with categories that it finds in the site template. Let's assume that we added the two categories '''Basic''' and '''Optional''' to the '''site.xml''' file when we edited it earlier. Now we want to divide our features into these two categories:
+
The build action will expect one prerequisite that lists all the feature jars and one that lists all plugin jars. Luckely for us, Buckminster has already generated CSPEC's for all features with attributes that will provide just that. A feature will always have the two public attributes:
#Click on the ''Groups'' tab
+
* '''feature.jars'''
#For each category, repeat the following:
+
:This is the transitive closure of all features (including the feature itself) in jared format.
##Click on ''New'' just below the Groups table
+
* '''bundle.jars'''
##Enter the name of the group. In our example '''Basic''' or '''Optional'''
+
:This is all the plugins that the transitive closure of all features is referencing in jared format.
##For each feature that should be included in this group
+
###Click on ''New'' just next to the prerequisites table
+
###Select a feature from the drop down menu.
+
###Enter the name '''feature.jars'''
+
###Click OK
+
  
===The feature.jars group===
+
Since we don't have a feature that describes the update site itself, we need to create two new groups. One that group all the feature.jars together, and one that group all the bundle.jars together.
We need one group that contains all features that should be present on the update site. If we
+
were using categories in the previous step, this group will simply contain them. If we don't have categories, this group will reference the features directly. In the latter case, the group is created in exactly the same way as described for the category groups. In the former case, we do like this:
+
#Click on the ''Groups'' tab
+
 
#Click on ''New'' just below the Groups table
 
#Click on ''New'' just below the Groups table
 
#Enter the name of the group. We call it '''feature.jars'''
 
#Enter the name of the group. We call it '''feature.jars'''
#For each category that should be included in this group
+
#For each feature that should be included in this group
 
##Click on ''New'' just next to the prerequisites table
 
##Click on ''New'' just next to the prerequisites table
##Leave the component name blank
+
##Select a feature from the drop down menu.
##Select the category group using the drop down menu.
+
##Enter the name <font color=blue>'''feature.jars'''</font>
 
##Click OK
 
##Click OK
  
===The bundle.jars group===
+
Repeat these steps for a group that is called '''bundle.jars''' that references the <font color=blue>'''bundle.jars'''</font> attribute of each feature.
In addition to finding all features to include, the action also needs to know about all bundles that those features are referencing. Each feature exposes this with a special attribute '''bundle.jars''' so the only thing we need to do is to group them together:
+
  
 +
===Defining Site Categories===
 +
This step is optional unless you want to categorize the contents of the update site. In order to define a Site Category, you must first create the category in the '''site.xml''' file and then add it as a group in the CSPEC.
 +
 +
In order to create a category in the '''site.xml''' file, do the following:
 +
#Double click on the '''site.xml''' file. The Update Site Editor opens
 +
#On the ''Site Map'' tab, click ''New Category''
 +
#Give the category a name. In this example we will use '''Basic'''
 +
#Add a label such as '''Basic features'''
 +
 +
Repeat these steps and create an additional categogy named '''Optional''' with label '''Optional features'''
 +
 +
Back to the CSPEC editor:
 +
#Click on the ''Groups'' tab
 
#Click on ''New'' just below the Groups table
 
#Click on ''New'' just below the Groups table
#Enter the name of the group. We call it '''bundle.jars'''
+
#Enter the name of the group, i.e. '''Basic'''
 
#For each feature that should be included in this group
 
#For each feature that should be included in this group
 
##Click on ''New'' just next to the prerequisites table
 
##Click on ''New'' just next to the prerequisites table
 
##Select a feature from the drop down menu.
 
##Select a feature from the drop down menu.
##Enter the name '''bundle.jars'''
+
##Enter the name <font color=blue>'''feature.jars'''</font>
 
##Click OK
 
##Click OK
  
If you follow the example, you now have four groups, Basic, Optional, feature.jars, and bundle.jars.
+
Repeat these steps for the '''Optional''' group.
 +
 
 +
Attributes, Groups, and Actions are all ''Attributes'' in Buckminster terms. A group contains attributes. Subsequently, a group can include other groups. This allows for a simplification of the '''feature.jars''' group that we created earlier. Instead of having that group include all features, it could instead include the two category groups, i.e. instead of having:
 +
<pre>
 +
feature.jars
 +
  a[feature.jars]
 +
  b[feature.jars]
 +
  c[feature.jars]
 +
  d[feature.jars]
 +
 
 +
Basic
 +
  a[feature.jars]
 +
  b[feature.jars]
 +
 
 +
Optional
 +
  c[feature.jars]
 +
  d[feature.jars]
 +
</pre>
 +
we can simplify and do
 +
<pre>
 +
feature.jars
 +
  [Basic]
 +
  [Optional]
 +
 
 +
Basic
 +
  a[feature.jars]
 +
  b[feature.jars]
 +
 
 +
Optional
 +
  c[feature.jars]
 +
  d[feature.jars]
 +
</pre>
 +
(the example assumes that a, b, c, and d are features and [xxx] denotes attribute xxx)
 +
 
 +
If you follow the example (simplification or not), you now have four groups, Basic, Optional, feature.jars, and bundle.jars.
  
 
===The Action===
 
===The Action===
Line 93: Line 135:
 
##Enter the name '''build.site'''
 
##Enter the name '''build.site'''
 
##Put a check mark the ''Public'' checkbox
 
##Put a check mark the ''Public'' checkbox
##Enter the ''Actor Name:'' '''ant'''
+
##Enter the ''Actor Name:'' <font color=blue>'''ant'''</font>
 
#Adding the site.template prerequisite
 
#Adding the site.template prerequisite
 
##Click on the ''New'' button next to the ''Prerequisites'' table
 
##Click on the ''New'' button next to the ''Prerequisites'' table
 
##Leave ''Component'' blank (this means current component)
 
##Leave ''Component'' blank (this means current component)
 
##Select '''site.template''' from the ''Attribute'' combobox
 
##Select '''site.template''' from the ''Attribute'' combobox
##Enter the ''Alias'' name '''template'''
+
##Enter the ''Alias'' name <font color=blue>'''template'''</font>
 
##Click OK
 
##Click OK
 
#Adding the rootFiles prerequisite
 
#Adding the rootFiles prerequisite
Line 104: Line 146:
 
##Leave ''Component'' blank
 
##Leave ''Component'' blank
 
##Select '''site.rootFiles''' from the ''Attribute'' combobox
 
##Select '''site.rootFiles''' from the ''Attribute'' combobox
##Enter the ''Alias'' name '''rootFiles'''
+
##Enter the ''Alias'' name <font color=blue>'''rootFiles'''</font>
 
##Click OK
 
##Click OK
 
#Adding the features
 
#Adding the features
Line 110: Line 152:
 
##Leave ''Component'' blank
 
##Leave ''Component'' blank
 
##Select '''feature.jars''' from the ''Attribute'' combobox
 
##Select '''feature.jars''' from the ''Attribute'' combobox
##Enter the ''Alias'' name '''features'''
+
##Enter the ''Alias'' name <font color=blue>'''features'''</font>
 
##Click OK
 
##Click OK
 
#Adding the plugins
 
#Adding the plugins
Line 116: Line 158:
 
##Leave ''Component'' blank
 
##Leave ''Component'' blank
 
##Select '''bundle.jars''' from the ''Attribute'' combobox
 
##Select '''bundle.jars''' from the ''Attribute'' combobox
##Enter the ''Alias'' name '''plugins'''
+
##Enter the ''Alias'' name <font color=blue>'''plugins'''</font>
 
##Click OK
 
##Click OK
 
#Adding general properties. These properties control the general behavior.
 
#Adding general properties. These properties control the general behavior.
 
##In the middle pane, click on ''Properties''
 
##In the middle pane, click on ''Properties''
 
##Click on ''New'' next to the ''General Properties'' table
 
##Click on ''New'' next to the ''General Properties'' table
##Enter ''Key'' '''site.name''' and a value such as '''test.archivedsite'''
+
##Enter ''Key'' <font color=blue>'''site.name'''</font> and a value such as '''test.archivedsite'''
 
##Click OK
 
##Click OK
 
##If you want your site to have some extra suffix such as ''_incubation'' then:
 
##If you want your site to have some extra suffix such as ''_incubation'' then:
 
###Click on ''New'' next to the ''General Properties'' table
 
###Click on ''New'' next to the ''General Properties'' table
###Enter ''Key'' '''site.extra.suffix''' and a value such as '''_incubation'''
+
###Enter ''Key'' <font color=blue>'''site.extra.suffix'''</font> and a value such as '''_incubation'''
 
###Click OK
 
###Click OK
 
#Adding actor properties. These properties control behavior specific to an actor. We need two of them. One to specify the ant build script that will be used and another to specify what ant target to call in that file.
 
#Adding actor properties. These properties control behavior specific to an actor. We need two of them. One to specify the ant build script that will be used and another to specify what ant target to call in that file.
 
##Click on ''New'' next to the ''Actor Properties'' table
 
##Click on ''New'' next to the ''Actor Properties'' table
##Enter ''Key'' '''buildFileId''' and the value '''buckminster.pdetasks'''
+
##Enter ''Key'' <font color=blue>'''buildFileId'''</font> and the value <font color=blue>'''buckminster.pdetasks'''</font>
 
##Click OK
 
##Click OK
 
##Click on ''New'' again
 
##Click on ''New'' again
##Enter ''Key'' '''targets''' and the value '''create.site'''
+
##Enter ''Key'' <font color=blue>'''targets'''</font> and the value <font color=blue>'''create.site'''</font>
 
##Click OK
 
##Click OK
 
#Finally, we must specify the product of this action and give it an alias that it passes on to Ant.
 
#Finally, we must specify the product of this action and give it an alias that it passes on to Ant.
 
##Click on ''Products'' in the middle pane.
 
##Click on ''Products'' in the middle pane.
##Enter the ''Product Alias'' '''action.output'''
+
##Enter the ''Product Alias'' <font color=blue>'''action.output'''</font>
 
##Enter the ''Product Base Path'' '''site/'''
 
##Enter the ''Product Base Path'' '''site/'''
  
Line 145: Line 187:
  
 
The output will end up in ${user.temp}/buckminster by default. You can change this by setting the property '''buckminster.output.root''' in a property file that you reference when you execute the action. You can also specify properties using ''Windows'' -> ''Preferences'' -> ''Run/Debug'' -> ''String substitution''.
 
The output will end up in ${user.temp}/buckminster by default. You can change this by setting the property '''buckminster.output.root''' in a property file that you reference when you execute the action. You can also specify properties using ''Windows'' -> ''Preferences'' -> ''Run/Debug'' -> ''String substitution''.
 +
 +
==Headless builds==
 +
The site can also be built from the command line using a headless setup. Simply issue the command:
 +
<pre>
 +
buckminster -d <your workspace> perform org.test.update#build.site
 +
</pre>

Revision as of 17:52, 9 January 2008

Using Buckminster for Update Site building

This is a step by step instruction on how to create an update site using Buckminster. It assumes that you already have some features that you want to include on the site and that you have the Buckminster core and pde support installed in the IDE.

Some names in this example are keywords that has to be entered verbatim. Such names are marked in blue.

Creating the Update Site Project

  1. Right click in the Package Explorer and select New -> Project
  2. In the New Project wizard that pops up, open the Plug-in Development folder
  3. Click on Update Site Project
  4. Give the project a name. In this example we use org.test.update
  5. Click on Finish

The project appears in the workspace and it contains one single file, an empty site.xml. Buckminster will use this as the update site template. This means that you can add site categories to this file but you should not add any features. Buckminster will generate a new site.xml where the features are added.

Creating an index.html file

Just create an empty file for now and call it index.html. You can add content to this file that will be what the user will see if they happen to access your update site with a browser.

Creating the Component Specification

Buckminster describes all components in terms of CSPECs. The update site is no exception. Here are the steps to create such a CSPEC and enter the needed information:

  1. Right click on the project and select New -> Other
  2. In the New wizard that pops up, open the Buckminster folder
  3. Select Component Specification file and click on Next
  4. Click on Finish to accept the default values for Container: and File name:

A file named buckminster.cspec is created in the project and the Buckminster CSPEC editor opens. Do not change the name of this file.

Main information

  • The name of the component is normally the same as the name of the project. This makes it easier to find the component.
  • The component type must in our case be set to buckminster.
  • The version can be any OSGi compliant version such as 1.0.0

Artifacts

Artifacts denotes files and folders that are present inside of a component. The action that will create the update site needs to know about the site.xml template and other files to copy so we need to add that to our specification:

  1. Click on the Artifacts tab
  2. Click on New below the Artifacts table
  3. Enter a name such as site.template
  4. Click on the New button next to the Path table
  5. Enter the name site.xml in the dialog that pops up and click OK
  6. Click on New below the Artifacts table
  7. Enter the name site.rootFiles
  8. Click on the New button next to the Path table
  9. Enter the name index.html in the dialog that pops up and click OK

We now have two artifacts, each with one path. The separation is necessary in this particular case since the build action will reference the artifacs separately. An artifact may have several paths and you can add as many files and folders as you wish to the site.rootFiles artifact.

Dependencies

We need to define the features that will be included on the update site. Buckminster considers them to be dependencies:

  1. Click on the Dependencies tab
  2. For each feature that you want to add, repeat the following:
    1. Click on New just next to the Dependencies table
    2. Enter the name of a feature component
    3. Set the Component Type to eclipse.feature
    4. Click OK

Groups

The build action will expect one prerequisite that lists all the feature jars and one that lists all plugin jars. Luckely for us, Buckminster has already generated CSPEC's for all features with attributes that will provide just that. A feature will always have the two public attributes:

  • feature.jars
This is the transitive closure of all features (including the feature itself) in jared format.
  • bundle.jars
This is all the plugins that the transitive closure of all features is referencing in jared format.

Since we don't have a feature that describes the update site itself, we need to create two new groups. One that group all the feature.jars together, and one that group all the bundle.jars together.

  1. Click on New just below the Groups table
  2. Enter the name of the group. We call it feature.jars
  3. For each feature that should be included in this group
    1. Click on New just next to the prerequisites table
    2. Select a feature from the drop down menu.
    3. Enter the name feature.jars
    4. Click OK

Repeat these steps for a group that is called bundle.jars that references the bundle.jars attribute of each feature.

Defining Site Categories

This step is optional unless you want to categorize the contents of the update site. In order to define a Site Category, you must first create the category in the site.xml file and then add it as a group in the CSPEC.

In order to create a category in the site.xml file, do the following:

  1. Double click on the site.xml file. The Update Site Editor opens
  2. On the Site Map tab, click New Category
  3. Give the category a name. In this example we will use Basic
  4. Add a label such as Basic features

Repeat these steps and create an additional categogy named Optional with label Optional features

Back to the CSPEC editor:

  1. Click on the Groups tab
  2. Click on New just below the Groups table
  3. Enter the name of the group, i.e. Basic
  4. For each feature that should be included in this group
    1. Click on New just next to the prerequisites table
    2. Select a feature from the drop down menu.
    3. Enter the name feature.jars
    4. Click OK

Repeat these steps for the Optional group.

Attributes, Groups, and Actions are all Attributes in Buckminster terms. A group contains attributes. Subsequently, a group can include other groups. This allows for a simplification of the feature.jars group that we created earlier. Instead of having that group include all features, it could instead include the two category groups, i.e. instead of having:

feature.jars
  a[feature.jars]
  b[feature.jars]
  c[feature.jars]
  d[feature.jars]

Basic
  a[feature.jars]
  b[feature.jars]

Optional
  c[feature.jars]
  d[feature.jars]

we can simplify and do

feature.jars
  [Basic]
  [Optional]

Basic
  a[feature.jars]
  b[feature.jars]

Optional
  c[feature.jars]
  d[feature.jars]

(the example assumes that a, b, c, and d are features and [xxx] denotes attribute xxx)

If you follow the example (simplification or not), you now have four groups, Basic, Optional, feature.jars, and bundle.jars.

The Action

The last thing to add to the CSPEC is the Action that will trigger the actual build of the update site.

  1. Click on the Actions tab
  2. Adding General action information
    1. Click on New below the Actions table
    2. Enter the name build.site
    3. Put a check mark the Public checkbox
    4. Enter the Actor Name: ant
  3. Adding the site.template prerequisite
    1. Click on the New button next to the Prerequisites table
    2. Leave Component blank (this means current component)
    3. Select site.template from the Attribute combobox
    4. Enter the Alias name template
    5. Click OK
  4. Adding the rootFiles prerequisite
    1. Click on the New button next to the Prerequisites table
    2. Leave Component blank
    3. Select site.rootFiles from the Attribute combobox
    4. Enter the Alias name rootFiles
    5. Click OK
  5. Adding the features
    1. Click on the New button next to the Prerequisites table
    2. Leave Component blank
    3. Select feature.jars from the Attribute combobox
    4. Enter the Alias name features
    5. Click OK
  6. Adding the plugins
    1. Click on the New button next to the Prerequisites table
    2. Leave Component blank
    3. Select bundle.jars from the Attribute combobox
    4. Enter the Alias name plugins
    5. Click OK
  7. Adding general properties. These properties control the general behavior.
    1. In the middle pane, click on Properties
    2. Click on New next to the General Properties table
    3. Enter Key site.name and a value such as test.archivedsite
    4. Click OK
    5. If you want your site to have some extra suffix such as _incubation then:
      1. Click on New next to the General Properties table
      2. Enter Key site.extra.suffix and a value such as _incubation
      3. Click OK
  8. Adding actor properties. These properties control behavior specific to an actor. We need two of them. One to specify the ant build script that will be used and another to specify what ant target to call in that file.
    1. Click on New next to the Actor Properties table
    2. Enter Key buildFileId and the value buckminster.pdetasks
    3. Click OK
    4. Click on New again
    5. Enter Key targets and the value create.site
    6. Click OK
  9. Finally, we must specify the product of this action and give it an alias that it passes on to Ant.
    1. Click on Products in the middle pane.
    2. Enter the Product Alias action.output
    3. Enter the Product Base Path site/

This concludes the CSPEC editing. Save it using CTRL-s or File -> Save

Building the site

Right-click on your project, select Buckminster -> Invoke action -> build.site

The output will end up in ${user.temp}/buckminster by default. You can change this by setting the property buckminster.output.root in a property file that you reference when you execute the action. You can also specify properties using Windows -> Preferences -> Run/Debug -> String substitution.

Headless builds

The site can also be built from the command line using a headless setup. Simply issue the command:

buckminster -d <your workspace> perform org.test.update#build.site