$Id$

The Fulcrum Website Instructions for Multi Modules
--------------------------------

The Fulcrum web site is based on .xml files which are transformed
into .html files using Maven.

<http://maven.apache.org/>

Using scm-publish Plugin, cft. http://commons.apache.org/site-publish.html for publishing and turbine-parent plugin check the following list items:

* Read README, 8)  Stage the latest documentation 

* Exercise: Run mvn help:effective-pom, save the result in a file and check by investigating it, that
  - turbine.site.path is matching pubScmUrl property of goal scm-publish:publish-scm . Actually the variable turbine.scmPubUrl is using ${turbine.site.path} in turbine parent pom.
  - turbine.scmPubCheckoutDirectory is matching property checkoutDirectory of goal scm-publish:publish-scm.

* Once you have the site checked out locally, as it is multi-module project (with submodules) execute first 
  
  mvn clean install
  
*  then

  mvn site site:stage

This will build the documentation into the target/site/, resp. target/staging/ directory. The output will show you which files got re-generated.

* If you would like to make modifications to the web site documents, you simply need to edit the files in the xdocs/ directory.

* Once you have built your documentation and confirmed that your changes are ok, you can check your .xml files back into Subversion.

* To test what files would be added, deleted or updated run:

  mvn site site:stage scm-publish:publish-scm -Dscmpublish.dryRun=true

This will generate the site into turbine.site.cache folder (target/turbine-sites by default) and print any changes to STDOUT. 

* To deploy run the same command (check your credentials in ~/.m2/settings.xml), remove the argument scmpublish.dryRun or set it to false. Check if tryUpdate is set to false to get a clean working copy again). Alternatively, if you have set scmpublish.skipCheckin=true in the previous step, you have to do a manual commit. 


