Claas Thiele wrote:

There are at least 2 use cases of import:
(1) providing reusable functionality
      - providing ant build file fragments by framework distributors
      - using parts of a buildsystem in a cross project manner.
(2) linking subprojects in a large project

Both partially contrary in terms of basedir handling.

For (1) imported functionality would be used in the context of the main project. Basedir should always the basedir of the main project.

For (2) imported functionality would be used in the context of the import (the subproject). The basedir should be set to import context.

proposed behavior:

If basedir is set in project element it means: basedir is set in context to the file containing the project element (as before). This is used for subproject handling.

If basedir is not set it will be inherited from the importing project. Thats for module usage.

May be downward compatible (basedir not set in main project is always '.').

Sometimes it is necessary to address resources in the context of an import. For that reason the basedir (context) of each imported project should be accessible from everywhere. A property can be instanciated with name like imports.<import-name>.basedir while importing a project. imports.basedir should be responsible for main (root) projects basedir so root context is accessible from everywhere.

Implementation proposal for basedir handling:
Each target is executed in a context holding the basedir. If basedir is set in an imported project a new context is instanciated and used. Otherwise the existing context is used. So basedir is hold by a context not the project.



Proposed behavior for target and property name prefixing

Each target and property name and id (forgot something?) should be seen as in a namespace. The namespace is formed by the containing project and named by the containing project name. Inside a project the namespace (prefix) is implicit and can be omitted. Referencing targets and properties outside the containing project the namespace is used.
The resulting name or id is constructed by namespace, delemiter, local name.
The root resources can be referenced using an empty namespace (lokal name with preceding delimiter).
Concrete examples at http://ct42.de/en/ch02s05.html (Except the root of imported files is named 'module'):
Namespace collisions by independent developed imports can be prevented by using naming conventions like for java packages (preceed url of provider of import).



Proposed implementation:
It is done for targets in ANTModule (http://ct42.de/en/ch02.html) in a special ProjectHelperImpl while parsing the project file. ANT integration hints are given (http://ct42.de/en/ch02s07.html). Additionally the namespace resolving functionality provided by the projecthelper must be used for all property names, id's and target names and dependencies while initialising this objects.


In my opinion importing and providing namespace related functionality should be placed in the projecthelper not in a task.
So the existing order problem for top level elements is solved automatically.




-------------
Claas Thiele

http://ct42.de


-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>



-- Nick Chalko Show me the code. Centipede Ant + autodownloadable build plugins + needed jars autodownload. http://krysalis.org/centipede ---------------------------------------------------------------------



--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>



Reply via email to