To build feature:
BRT 7/18/2006

Goal: package all plugins as jars, package feature as a folder.

(1) plugin build setup
(2) feature setup
(3) feature export

(1) plugin build setup
In EACH plugin manifest, be sure to:

(a) assure there IS a MANIFEST.MF.  If not, go to overview page for plugin.xml
and click on the link to build an OSGi bundle manifest(this is the MANIFEST.MF file)
(Note: this link doesn't appear if the project already has a MANIFEST.MF)

(b) 
Note: Don't jar this feature and its plugin, so that the IBM user
can replace the HTML files with the correct versions from IBM.
Build page: don't build a jar (since we will jar the whole plugin): 
Under runtime information, delete a jar if it's there, and Add Library of '.'
then on right side while '.' is selected, Add folder of 'src/' 
Under Binary Build, the following should be selected:
META-INF, icons (if any), plugin.xml
(Note: the classes will be included automatically because of the '.' at the top under
runtime information)
And, any other resources the plugins needs such as html files, etc.

(c)To get the classes included in the build:
on 3.1 build page there is a checkbox for "include selected library in binary build" 
which modifies build.properties to put '.' in bin.includes   ... 
there is no checkbox on 3.2 build page.   
You may have to manually edit build.properties to do this in 3.2
=====================
Part of build.properties:
bin.includes = plugin.xml,\
               META-INF/,\
               icons/,\
               .          <==== make sure this line is there
=====================

(d)and on runtime tab of manifest editor, under classpath (lower right),
specify classpath='.'  only.  Delete a jar file if there, and do "New..." to
add  '.' as the new library name.


-----------------

(2) feature setup
In this feature project, edit the manifest (feature.xml)
and on the plug-ins tab, select  each plug-in and be sure to 
CHECK
"Unpack the plugin archive after the plugin installation"

This makes sure the plugins get packaged as jars, not folders.


------------------
(3) feature export
Use export. Ant build seems to work BUT I can't figure out how to get ant build 
to jar the plugins and not jar the feature.

Context menu on feature (org.eclipse.ptp.pldt) project.
Export, deployable features

In tabbed section at bottom of export Wizard first page,
check "Archive file" and set it to something like
<workspace-location>/org.eclipse.ptp.pldt/org.eclipse.ptp.pldt-1.0.0-YYYYMMDDHHMM.zip

On the options tab, do NOT select "package as individual jar archives."
This jars the feature too, which doesn't work.
The feature setup item above sets the jarring of the individual plug-ins.


===========
Upload notes
Once you've exported the feature and  
zipped it up, try this command:

		 scp zip_file.zip user@dev.eclipse.org:downloads/tools/ptp/builds

where 'btibbitts' is your committer username and zip_file.zip is:

		 org.eclipse.ptp.pldt-1.1-IYYYYMMDDHHMM.zip

where I is a capital i (for integration I think) and YYYYMMDDHHMM is  
the year, month, day, hour and minute of the build.

