Weighing in with Nita's approach here.
Our company uses GPL pretty heavily, and it works well for us to have a sensible structure.
Things that are truly global all live in one single project: These things include:
* stylesheets
* table stylesheets
* page layouts
* master pages
* copyright text
* globally appropriate snippets and topics (like hardware and software minimum requirements info (the same for all our products), Table of Contents topic and Index topic with proxies, Front Cover topic using variables, etc)
*
* corporate logos and images
*
* Global condition tags (e.g. PrintOnly, ScreenOnly, COMMENT and QUESTION conditions that aren't product-specific).
* Reports that could be useful for any project
* Skins
* TOCs for things like front covers, getting help, printed table of contents, index. These TOCs are used as sub-TOCs in other projects
* Global variable set (contains things like project release date, company details, release date etc)
We don't actually produce any outputs from this project, but it does mean that when working on any other projects, these bits are never changed accidentally so we keep the consistency across all our outputs.
We have a couple of "big guy" projects, and quite a few modules that fit into both of the big projects AND need their own outputs. Each of those modules live in separate projects.
Source control is ABSOLUTELY ESSENTIAL. You don't have to use integrated source control - we don't use it here and it works very well for us (as long as I remember to add new bits in Tortoise SVN!)
This is how we do it:
Globals project, everything is in source control, except Analyzer and Output folders, and folders inside the Projects folder that either don't contain anything or contain stuff we don't want to go into other projects, like the Users folder.
All projects include an import file pointing to this Globals project. This is what the import file looks like: note that I only use a relative source path, not an absolute source path. This is because the build machine doesn't have the same structure as our individual machines.
Code: Select all
<?xml version="1.0" encoding="utf-8"?>
<CatapultProjectImport
AutoSync="true"
IncludeLinkedFiles="false"
IncludePattern="*.htm;*.html;*.flcts;*.flfts;*.flmsp;*.flpgl;*.png;*.bmp;*.jpg;*.jpeg;*.tif;*.tiff;*.gif;*.mov;*.avi;*.swf;*.swd;*.emf;*.wmf;*.xaml;*.xps;*.exps;*.hdp;*.wdp;*.css;*.flvar;*.fltoc;*.flsnp;*.flskn;*.flrep"
DeleteStale="true">
<Files>
<Url
Source="../../../Globals/Globals.flprj" />
</Files>
</CatapultProjectImport>
Individual projects all have their own individual variable sets and condition tag sets as well as the global ones.
All individual projects contain global.flimpfl (as above, but may also contain import files pulling in stuff from other modules. If this is needed, then the condition tag set in the donor project includes a condition to identify files that need to be imported in other projects. Here's an example import file (where the donor project is called DV, and the DV.DV condition is applied only to files needed in other projects):
Code: Select all
<?xml version="1.0" encoding="utf-8"?>
<CatapultProjectImport
AutoSync="true"
IncludePattern="*.htm;*.html;*.flcts;*.png;*.bmp;*.jpg;*.jpeg;*.tif;*.tiff;*.gif;*.mov;*.avi;*.swf;*.swd;*.emf;*.wmf;*.xaml;*.xps;*.exps;*.hdp;*.wdp;*.mcpic;*.mcdraw;*.flrtb;*.fltoc;*.flsnp"
DeleteStale="true"
ConditionTagExpression="include[DV.DV] "
AutoExcludeNonTaggedFiles="true">
<Files>
<Url
Source="../../../DV/DV.flprj" />
</Files>
</CatapultProjectImport>
We have 40+ separate projects. All of them include globals.flimpl, and one of our big guy projects has EIGHT other import files.
Complicated, but it works for us and helps us maximise re-use.