You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by mc...@apache.org on 2004/06/07 19:29:42 UTC

svn commit: rev 20873 - in avalon/trunk: central/system central/system/license runtime/logkit runtime/meta/api runtime/meta/impl runtime/meta/impl/src/java/org/apache/avalon/meta/info/builder runtime/meta/spi runtime/meta/tools runtime/meta/tools/etc runtime/meta/tools/etc/test runtime/meta/tools/etc/test/unit runtime/meta/tools/etc/test/unit/org runtime/meta/tools/etc/test/unit/org/apache runtime/meta/tools/etc/test/unit/org/apache/avalon runtime/meta/tools/etc/test/unit/org/apache/avalon/playground runtime/meta/tools/src/test/org/apache/avalon/meta runtime/meta/tools/src/test/org/apache/avalon/playground runtime/util/configuration tools/project/core tools/project/core/src/main/org/apache/avalon/tools tools/project/core/src/main/org/apache/avalon/tools/home tools/project/core/src/main/org/apache/avalon/tools/tasks tools/project/core/src/test tools/project/core/src/test/projects/demo tools/project/core/src/test/projects/gizmo tools/project/core/src/test/projects/sample tools/project/core/src/test/projects/widget

Author: mcconnell
Date: Mon Jun  7 10:29:41 2004
New Revision: 20873

Added:
   avalon/trunk/central/system/license/
   avalon/trunk/central/system/license/LICENSE.TXT
   avalon/trunk/central/system/license/NOTICE.TXT
   avalon/trunk/runtime/logkit/build.xml
   avalon/trunk/runtime/meta/api/build.xml
   avalon/trunk/runtime/meta/impl/build.xml
   avalon/trunk/runtime/meta/spi/build.xml
   avalon/trunk/runtime/meta/tools/build.xml
   avalon/trunk/runtime/meta/tools/etc/
   avalon/trunk/runtime/meta/tools/etc/test/
   avalon/trunk/runtime/meta/tools/etc/test/unit/
   avalon/trunk/runtime/meta/tools/etc/test/unit/org/
   avalon/trunk/runtime/meta/tools/etc/test/unit/org/apache/
   avalon/trunk/runtime/meta/tools/etc/test/unit/org/apache/avalon/
   avalon/trunk/runtime/meta/tools/etc/test/unit/org/apache/avalon/playground/
   avalon/trunk/runtime/meta/tools/etc/test/unit/org/apache/avalon/playground/Primary.java
   avalon/trunk/runtime/meta/tools/etc/test/unit/org/apache/avalon/playground/PrimaryService.java
   avalon/trunk/runtime/meta/tools/etc/test/unit/org/apache/avalon/playground/Secondary.java
   avalon/trunk/runtime/meta/tools/etc/test/unit/org/apache/avalon/playground/SecondaryService.java
   avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/HomeTask.java
   avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/ReactorTask.java
   avalon/trunk/tools/project/core/src/test/build.properties
   avalon/trunk/tools/project/core/src/test/build.xml
   avalon/trunk/tools/project/core/src/test/generic.xml
Removed:
   avalon/trunk/runtime/meta/tools/src/test/org/apache/avalon/playground/
Modified:
   avalon/trunk/central/system/   (props changed)
   avalon/trunk/central/system/index.xml
   avalon/trunk/runtime/meta/impl/src/java/org/apache/avalon/meta/info/builder/XMLLegacyCreator.java
   avalon/trunk/runtime/meta/impl/src/java/org/apache/avalon/meta/info/builder/XMLServiceCreator.java
   avalon/trunk/runtime/meta/impl/src/java/org/apache/avalon/meta/info/builder/XMLTypeCreator.java
   avalon/trunk/runtime/meta/tools/src/test/org/apache/avalon/meta/MetaTestCase.java
   avalon/trunk/runtime/util/configuration/   (props changed)
   avalon/trunk/tools/project/core/build.xml
   avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/antlib.xml
   avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/home/Context.java
   avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/home/Home.java
   avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/home/Repository.java
   avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/ContextualTask.java
   avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/DeclareTask.java
   avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/InstallTask.java
   avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/JUnitTestTask.java
   avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/JarTask.java
   avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/JavacTask.java
   avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/PrepareTask.java
   avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/SystemTask.java
   avalon/trunk/tools/project/core/src/test/projects/demo/build.properties
   avalon/trunk/tools/project/core/src/test/projects/gizmo/build.properties
   avalon/trunk/tools/project/core/src/test/projects/gizmo/build.xml
   avalon/trunk/tools/project/core/src/test/projects/sample/build.properties
   avalon/trunk/tools/project/core/src/test/projects/sample/build.xml
   avalon/trunk/tools/project/core/src/test/projects/widget/build.properties
Log:
Add build prococedures for the meta project (excluding maven plugin generation) together with updates to the project ant build suite.

Modified: avalon/trunk/central/system/index.xml
==============================================================================
--- avalon/trunk/central/system/index.xml	(original)
+++ avalon/trunk/central/system/index.xml	Mon Jun  7 10:29:41 2004
@@ -11,7 +11,9 @@
     <cache dir=".cache"/>
     <proxy/>
     <hosts>
-      <host>http://www.dpml.net</host>
+      <host>http://www.dpml.net/</host>
+      <host>http://www.apache.org/dist/java-repository/</host>
+      <host>http://www.ibiblio.org/maven/</host>
     </hosts>
   </repository>
 
@@ -24,25 +26,54 @@
 
     <resource>
       <info>
-        <group>avalon-framework</group>
-        <name>avalon-framework-api</name>
-        <version>4.2.0</version>
+        <group>log4j</group>
+        <name>log4j</name>
+        <version>1.2.8</version>
         <type>jar</type>
       </info>
     </resource>
+
     <resource>
       <info>
-        <group>avalon-framework</group>
-        <name>avalon-framework-impl</name>
-        <version>4.2.0</version>
+        <group>servletapi</group>
+        <name>servletapi</name>
+        <version>2.3</version>
         <type>jar</type>
       </info>
     </resource>
+
     <resource>
       <info>
-        <group>avalon-util</group>
-        <name>avalon-util-i18n</name>
-        <version>1.0.0</version>
+        <group>javamail</group>
+        <name>mailapi</name>
+        <version>1.3.1</version>
+        <type>jar</type>
+      </info>
+    </resource>
+
+    <resource>
+      <info>
+        <group>jms</group>
+        <name>jms</name>
+        <version>1.1</version>
+        <type>jar</type>
+      </info>
+    </resource>
+
+    <resource>
+      <info>
+        <group>ant</group>
+        <name>ant</name>
+        <version>1.6.1</version>
+        <type>jar</type>
+      </info>
+    </resource>
+
+    <resource>
+      <info>
+        <group>qdox</group>
+        <name>qdox</name>
+        <version>1.3</version>
         <type>jar</type>
       </info>
     </resource>
@@ -55,12 +86,212 @@
 
   <projects>
 
+    <!--
+    Avalon LogKit.
+    -->
+
+    <project basedir="../../runtime/logkit">
+      <info>
+        <group>avalon/logkit</group>
+        <name>avalon-logkit</name>
+        <version>2.0.0</version>
+      </info>
+      <dependencies>
+        <resources>
+          <resourceref key="log4j" runtime="false"/>
+          <resourceref key="servletapi" runtime="false"/>
+          <resourceref key="mailapi" runtime="false"/>
+          <resourceref key="jms" runtime="false"/>
+        </resources>
+      </dependencies>
+    </project>
+
+    <!--
+    Avalon Framework.
+    -->
+
+    <project basedir="../../runtime/framework/api">
+      <info>
+        <group>avalon/framework</group>
+        <name>avalon-framework-api</name>
+        <version>4.2.0</version>
+      </info>
+      <dependencies>
+        <projects>
+          <projectref key="avalon-logkit"/>
+        </projects>
+      </dependencies>
+    </project>
+
+    <project basedir="../../runtime/framework/impl">
+      <info>
+        <group>avalon/framework</group>
+        <name>avalon-framework-impl</name>
+        <version>4.2.0</version>
+      </info>
+      <dependencies>
+        <projects>
+          <projectref key="avalon-framework-api"/>
+        </projects>
+      </dependencies>
+    </project>
+
+    <!--
+    Avalon Utilities.
+    -->
+
     <project basedir="../site">
       <info>
         <group>avalon</group>
         <name>site</name>
       </info>
     </project>
+
+    <project basedir="../../runtime/util/configuration">
+      <info>
+        <group>avalon/util</group>
+        <name>avalon-util-configuration</name>
+        <version>1.0-dev</version>
+      </info>
+      <dependencies>
+        <resources>
+          <resourceref key="avalon-framework-api"/>
+          <resourceref key="avalon-framework-impl"/>
+        </resources>
+      </dependencies>
+    </project>
+
+    <project basedir="../../runtime/util/criteria">
+      <info>
+        <group>avalon/util</group>
+        <name>avalon-util-criteria</name>
+        <version>1.1.0</version>
+      </info>
+    </project>
+
+    <project basedir="../../runtime/util/defaults">
+      <info>
+        <group>avalon/util</group>
+        <name>avalon-util-defaults</name>
+        <version>1.2.1</version>
+      </info>
+      <dependencies>
+        <projects>
+          <projectref key="avalon-util-env"/>
+        </projects>
+      </dependencies>
+    </project>
+
+    <project basedir="../../runtime/util/env">
+      <info>
+        <group>avalon/util</group>
+        <name>avalon-util-env</name>
+        <version>1.1.1</version>
+      </info>
+    </project>
+
+    <project basedir="../../runtime/util/exception">
+      <info>
+        <group>avalon/util</group>
+        <name>avalon-util-exception</name>
+        <version>1.0.0</version>
+      </info>
+    </project>
+
+    <project basedir="../../runtime/util/i18n">
+      <info>
+        <group>avalon/util</group>
+        <name>avalon-util-i18n</name>
+        <version>1.0.0</version>
+      </info>
+    </project>
+
+    <project basedir="../../runtime/util/extension/api">
+      <info>
+        <group>avalon/util</group>
+        <name>avalon-util-extension-api</name>
+        <version>1.2.0</version>
+      </info>
+    </project>
+
+    <project basedir="../../runtime/util/extension/impl">
+      <info>
+        <group>avalon/util</group>
+        <name>avalon-util-extension-impl</name>
+        <version>1.2.0</version>
+      </info>
+      <dependencies>
+        <projects>
+          <projectref key="avalon-util-extension-api"/>
+        </projects>
+      </dependencies>
+    </project>
+
+    <!--
+    Avalon Meta.
+    -->
+
+    <project basedir="../../runtime/meta/api">
+      <info>
+        <group>avalon/meta</group>
+        <name>avalon-meta-api</name>
+        <version>1.4.0</version>
+      </info>
+      <dependencies>
+        <projects>
+          <projectref key="avalon-framework-api"/>
+          <projectref key="avalon-framework-impl" compile="false" test="true"/>
+        </projects>
+      </dependencies>
+    </project>
+
+    <project basedir="../../runtime/meta/spi">
+      <info>
+        <group>avalon/meta</group>
+        <name>avalon-meta-spi</name>
+        <version>1.4.0</version>
+      </info>
+      <dependencies>
+        <projects>
+          <projectref key="avalon-meta-api"/>
+        </projects>
+      </dependencies>
+    </project>
+
+    <project basedir="../../runtime/meta/impl">
+      <info>
+        <group>avalon/meta</group>
+        <name>avalon-meta-impl</name>
+        <version>1.4.0</version>
+      </info>
+      <dependencies>
+        <projects>
+          <projectref key="avalon-meta-spi"/>
+          <projectref key="avalon-util-i18n"/>
+          <projectref key="avalon-util-configuration"/>
+        </projects>
+      </dependencies>
+    </project>
+
+    <plugin basedir="../../runtime/meta/tools">
+      <info>
+        <group>avalon/meta</group>
+        <name>avalon-meta-tools</name>
+        <version>1.4.0</version>
+      </info>
+      <dependencies>
+        <projects>
+          <projectref key="avalon-meta-impl"/>
+        </projects>
+        <resources>
+          <resourceref key="ant"/>
+          <resourceref key="qdox"/>
+        </resources>
+      </dependencies>
+      <tasks>
+        <taskdef name="meta" class="org.apache.avalon.meta.info.MetaTask"/>
+      </tasks>
+    </plugin>
 
   </projects>
 

Added: avalon/trunk/central/system/license/LICENSE.TXT
==============================================================================
--- (empty file)
+++ avalon/trunk/central/system/license/LICENSE.TXT	Mon Jun  7 10:29:41 2004
@@ -0,0 +1,175 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.

Added: avalon/trunk/central/system/license/NOTICE.TXT
==============================================================================
--- (empty file)
+++ avalon/trunk/central/system/license/NOTICE.TXT	Mon Jun  7 10:29:41 2004
@@ -0,0 +1,11 @@
+=========================================================================
+==  NOTICE file corresponding to the section 4 d of                    ==
+==  the Apache License, Version 2.0,                                   ==
+=========================================================================
+
+This product is developed by the Apache Avalon Project.
+http://avalon.apache.org
+
+The names "Avalon" and "Merlin" must not be used to endorse or promote 
+products derived from this software without prior written permission. 
+For written permission, please contact pmc@avalon.apache.org.

Added: avalon/trunk/runtime/logkit/build.xml
==============================================================================
--- (empty file)
+++ avalon/trunk/runtime/logkit/build.xml	Mon Jun  7 10:29:41 2004
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<project name="avalon-logkit" default="dist" basedir=".">
+  <property file="build.properties"/>
+  <import file="${project.home}/build/standard.xml"/>
+</project>

Added: avalon/trunk/runtime/meta/api/build.xml
==============================================================================
--- (empty file)
+++ avalon/trunk/runtime/meta/api/build.xml	Mon Jun  7 10:29:41 2004
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<project name="avalon-meta-api" default="dist" basedir=".">
+  <property file="build.properties"/>
+  <import file="${project.home}/build/standard.xml"/>
+</project>

Added: avalon/trunk/runtime/meta/impl/build.xml
==============================================================================
--- (empty file)
+++ avalon/trunk/runtime/meta/impl/build.xml	Mon Jun  7 10:29:41 2004
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<project name="avalon-meta-impl" default="dist" basedir=".">
+  <property file="build.properties"/>
+  <import file="${project.home}/build/standard.xml"/>
+</project>

Modified: avalon/trunk/runtime/meta/impl/src/java/org/apache/avalon/meta/info/builder/XMLLegacyCreator.java
==============================================================================
--- avalon/trunk/runtime/meta/impl/src/java/org/apache/avalon/meta/info/builder/XMLLegacyCreator.java	(original)
+++ avalon/trunk/runtime/meta/impl/src/java/org/apache/avalon/meta/info/builder/XMLLegacyCreator.java	Mon Jun  7 10:29:41 2004
@@ -39,7 +39,7 @@
 import org.apache.avalon.util.i18n.ResourceManager;
 import org.apache.avalon.util.i18n.Resources;
 
-import org.apache.excalibur.configuration.ConfigurationUtil;
+import org.apache.avalon.util.configuration.ConfigurationUtil;
 
 import org.xml.sax.InputSource;
 

Modified: avalon/trunk/runtime/meta/impl/src/java/org/apache/avalon/meta/info/builder/XMLServiceCreator.java
==============================================================================
--- avalon/trunk/runtime/meta/impl/src/java/org/apache/avalon/meta/info/builder/XMLServiceCreator.java	(original)
+++ avalon/trunk/runtime/meta/impl/src/java/org/apache/avalon/meta/info/builder/XMLServiceCreator.java	Mon Jun  7 10:29:41 2004
@@ -34,7 +34,7 @@
 import org.apache.avalon.util.i18n.ResourceManager;
 import org.apache.avalon.util.i18n.Resources;
 
-import org.apache.excalibur.configuration.ConfigurationUtil;
+import org.apache.avalon.util.configuration.ConfigurationUtil;
 
 import org.xml.sax.InputSource;
 

Modified: avalon/trunk/runtime/meta/impl/src/java/org/apache/avalon/meta/info/builder/XMLTypeCreator.java
==============================================================================
--- avalon/trunk/runtime/meta/impl/src/java/org/apache/avalon/meta/info/builder/XMLTypeCreator.java	(original)
+++ avalon/trunk/runtime/meta/impl/src/java/org/apache/avalon/meta/info/builder/XMLTypeCreator.java	Mon Jun  7 10:29:41 2004
@@ -41,8 +41,8 @@
 
 import org.apache.avalon.util.i18n.ResourceManager;
 import org.apache.avalon.util.i18n.Resources;
-
-import org.apache.excalibur.configuration.ConfigurationUtil;
+import org.apache.avalon.util.configuration.ConfigurationUtil;
+
 import org.xml.sax.InputSource;
 
 /**

Added: avalon/trunk/runtime/meta/spi/build.xml
==============================================================================
--- (empty file)
+++ avalon/trunk/runtime/meta/spi/build.xml	Mon Jun  7 10:29:41 2004
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<project name="avalon-meta-spi" default="dist" basedir=".">
+  <property file="build.properties"/>
+  <import file="${project.home}/build/standard.xml"/>
+</project>

Added: avalon/trunk/runtime/meta/tools/build.xml
==============================================================================
--- (empty file)
+++ avalon/trunk/runtime/meta/tools/build.xml	Mon Jun  7 10:29:41 2004
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<project name="avalon-meta-tools" default="dist" basedir="." 
+    xmlns:x="antlib:org.apache.avalon.tools">
+
+  <property file="build.properties"/>
+  <import file="${project.home}/build/standard.xml"/>
+
+  <target name="build" depends="standard.build">
+    <x:declare/>
+  </target>
+
+</project>

Added: avalon/trunk/runtime/meta/tools/etc/test/unit/org/apache/avalon/playground/Primary.java
==============================================================================
--- (empty file)
+++ avalon/trunk/runtime/meta/tools/etc/test/unit/org/apache/avalon/playground/Primary.java	Mon Jun  7 10:29:41 2004
@@ -0,0 +1,43 @@
+/* 
+ * Copyright 2004 Apache Software Foundation
+ * Licensed  under the  Apache License,  Version 2.0  (the "License");
+ * you may not use  this file  except in  compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed  under the  License is distributed on an "AS IS" BASIS,
+ * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
+ * implied.
+ * 
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.avalon.playground;
+
+import org.apache.avalon.framework.context.Contextualizable;
+import org.apache.avalon.framework.context.Context;
+import org.apache.avalon.framework.context.ContextException;
+
+/**
+ * Demonstration of meta tags supportign the declaration of a service 
+ * export, version, type name, lifestyle, context entries, and the use 
+ * of the namespace compating mechanism.
+ *
+ *
+ * @avalon.component name="primary-component" lifestyle="singleton"
+ *     version="1.3"
+ * @avalon.service type="org.apache.avalon.playground.PrimaryService" 
+ *     version="9.8"
+ */
+public class Primary implements PrimaryService, Contextualizable
+{
+   /**
+    * @avalon.entry key="home" type="java.io.File"
+    */
+    public void contextualize( Context context ) throws ContextException
+    {
+    }
+}

Added: avalon/trunk/runtime/meta/tools/etc/test/unit/org/apache/avalon/playground/PrimaryService.java
==============================================================================
--- (empty file)
+++ avalon/trunk/runtime/meta/tools/etc/test/unit/org/apache/avalon/playground/PrimaryService.java	Mon Jun  7 10:29:41 2004
@@ -0,0 +1,28 @@
+/* 
+ * Copyright 2004 Apache Software Foundation
+ * Licensed  under the  Apache License,  Version 2.0  (the "License");
+ * you may not use  this file  except in  compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed  under the  License is distributed on an "AS IS" BASIS,
+ * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
+ * implied.
+ * 
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.avalon.playground;
+
+/**
+ * An interface representing a service.
+ *
+ * @avalon.service version="9.8"
+ * @avalon.attribute key="status" value="test"
+ */
+public interface PrimaryService
+{
+}

Added: avalon/trunk/runtime/meta/tools/etc/test/unit/org/apache/avalon/playground/Secondary.java
==============================================================================
--- (empty file)
+++ avalon/trunk/runtime/meta/tools/etc/test/unit/org/apache/avalon/playground/Secondary.java	Mon Jun  7 10:29:41 2004
@@ -0,0 +1,61 @@
+/* 
+ * Copyright 2004 Apache Software Foundation
+ * Licensed  under the  Apache License,  Version 2.0  (the "License");
+ * you may not use  this file  except in  compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed  under the  License is distributed on an "AS IS" BASIS,
+ * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
+ * implied.
+ * 
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.avalon.playground;
+
+import org.apache.avalon.framework.logger.Logger;
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.service.Serviceable;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.avalon.framework.service.ServiceException;
+
+/**
+ * @avalon.component name="secondary-component" version="2.4"
+ * @avalon.service type="org.apache.avalon.playground.SecondaryService" version="0.1"
+ */
+public class Secondary extends AbstractLogEnabled implements Serviceable, SecondaryService
+{
+    private Logger m_system = null;
+
+    private PrimaryService m_primary = null;
+
+   /**
+    * Supply of a logging channel to the component.
+    *
+    * @param logger the logging channel
+    * @avalon.logger name="system"
+    */
+    public void enableLogging( Logger logger )
+    {
+        super.enableLogging( logger );
+        m_system = logger.getChildLogger( "system" );
+    }
+
+   /**
+    * Supply of dependent services to this component by the container.
+    *
+    * @param manager the service manager
+    * @avalon.dependency key="primary" 
+    *     type="org.apache.avalon.playground.PrimaryService" 
+    *     version="1.3" 
+    */
+    public void service( ServiceManager manager ) throws ServiceException
+    {
+        m_primary = (PrimaryService) manager.lookup( "primary" );
+        m_system.info( "resolved primary service reference" );
+    }
+}

Added: avalon/trunk/runtime/meta/tools/etc/test/unit/org/apache/avalon/playground/SecondaryService.java
==============================================================================
--- (empty file)
+++ avalon/trunk/runtime/meta/tools/etc/test/unit/org/apache/avalon/playground/SecondaryService.java	Mon Jun  7 10:29:41 2004
@@ -0,0 +1,26 @@
+/* 
+ * Copyright 2004 Apache Software Foundation
+ * Licensed  under the  Apache License,  Version 2.0  (the "License");
+ * you may not use  this file  except in  compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed  under the  License is distributed on an "AS IS" BASIS,
+ * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
+ * implied.
+ * 
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.avalon.playground;
+
+/**
+ * An interface representing a service.
+ * @avalon.service version="0.1"
+ */
+public interface SecondaryService
+{
+}

Modified: avalon/trunk/runtime/meta/tools/src/test/org/apache/avalon/meta/MetaTestCase.java
==============================================================================
--- avalon/trunk/runtime/meta/tools/src/test/org/apache/avalon/meta/MetaTestCase.java	(original)
+++ avalon/trunk/runtime/meta/tools/src/test/org/apache/avalon/meta/MetaTestCase.java	Mon Jun  7 10:29:41 2004
@@ -96,7 +96,8 @@
     public void buildMeta() throws Exception
     {
         String base = System.getProperty( "basedir" );
-        m_qdox.addSourceTree( new File( base, "target/test-classes" ) );
+        File basedir = new File( base );
+        m_qdox.addSourceTree( basedir );
         JavaSource[] sources = m_qdox.getSources();
         for( int i=0; i<sources.length; i++ )
         {

Modified: avalon/trunk/tools/project/core/build.xml
==============================================================================
--- avalon/trunk/tools/project/core/build.xml	(original)
+++ avalon/trunk/tools/project/core/build.xml	Mon Jun  7 10:29:41 2004
@@ -60,12 +60,7 @@
   </target>
 
   <target name="test" depends="test-prepare">
-    <ant dir="${target.test.dir}/projects/gizmo" />
-    <ant dir="${target.test.dir}/projects/widget" />
-    <ant dir="${target.test.dir}/projects/demo" />
-    <ant dir="${target.test.dir}/projects/sample" />
-    <!--
-    -->
+    <ant dir="${target.test.dir}" />
   </target>
 
   <target name="clean">

Modified: avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/antlib.xml
==============================================================================
--- avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/antlib.xml	(original)
+++ avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/antlib.xml	Mon Jun  7 10:29:41 2004
@@ -1,7 +1,8 @@
 <?xml version="1.0"?>
 <antlib xmlns:current="ant:current"> 
 
-  <taskdef name="home" classname="org.apache.avalon.tools.home.Home"/>
+  <taskdef name="context" classname="org.apache.avalon.tools.home.Context"/>
+  <taskdef name="home" classname="org.apache.avalon.tools.tasks.HomeTask"/>
 
   <taskdef name="clean" classname="org.apache.avalon.tools.tasks.CleanTask"/> 
   <taskdef name="prepare" classname="org.apache.avalon.tools.tasks.PrepareTask"/> 
@@ -12,5 +13,6 @@
   <taskdef name="install" classname="org.apache.avalon.tools.tasks.InstallTask"/> 
   <taskdef name="plugin" classname="org.apache.avalon.tools.tasks.PluginTask"/> 
   <taskdef name="xdoc" classname="org.apache.avalon.tools.tasks.XdocTask"/> 
+  <taskdef name="reactor" classname="org.apache.avalon.tools.tasks.ReactorTask"/> 
 
 </antlib>

Modified: avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/home/Context.java
==============================================================================
--- avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/home/Context.java	(original)
+++ avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/home/Context.java	Mon Jun  7 10:29:41 2004
@@ -22,6 +22,7 @@
 import java.util.Map;
 
 import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.taskdefs.Property;
 
@@ -31,8 +32,11 @@
  * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a>
  * @version $Revision: 1.2 $ $Date: 2004/03/17 10:30:09 $
  */
-public class Context 
+public class Context extends Task
 {
+    private static final String USER_PROPERTIES = "user.properties";
+    private static final String BUILD_PROPERTIES = "build.properties";
+
     public static final String KEY = "project.context";
 
     public static final String SRC_KEY = "project.src";
@@ -47,12 +51,12 @@
     public static final String SRC_TEST_KEY = "project.src.test";
     public static final String SRC_TEST_VALUE = "test";
 
+    public static final String ETC_KEY = "project.etc";
+    public static final String ETC_VALUE = "etc";
+
     public static final String TARGET_KEY = "project.target";
     public static final String TARGET_VALUE = "target";
 
-    private static final String USER_PROPERTIES = "user.properties";
-    private static final String BUILD_PROPERTIES = "build.properties";
-
     public static final String DELIVERABLES_KEY = "project.target.deliverables";
     private static final String DELIVERABLES_VALUE = "deliverables";
 
@@ -70,30 +74,49 @@
         Context context = (Context) project.getReference( KEY );
         if( null == context )
         {
-            context = new Context( project );
+            context = new Context();
+            context.setProject( project );
+            context.init();
+            context.execute();
             project.addReference( KEY, context );
         }
         return context;
     }
 
-    private final File m_src;
-    private final File m_target;
-    private final File m_build;
-    private final File m_deliverables;
-    private final File m_temp;
-    private final File m_docs;
-    
     private final Map m_map = new Hashtable();
     private final Map m_resources = new Hashtable();
 
-    private Context( Project project )
+    private String m_key;
+    private File m_file;
+
+    private File m_src;
+    private File m_etc;
+    private File m_target;
+    private File m_build;
+    private File m_deliverables;
+    private File m_temp;
+    private File m_docs;
+    
+    public void setKey( String key )
     {
+        m_key = key;
+    }
+
+    public void setFile( File file )
+    {
+        m_file = file;
+    }
+
+    public void execute()
+    {
+        Project project = getProject();
         setupProperties( project );
 
         project.setNewProperty( SRC_KEY, SRC_VALUE );
         project.setNewProperty( SRC_MAIN_KEY, SRC_MAIN_VALUE );
         project.setNewProperty( SRC_CONFIG_KEY, SRC_CONFIG_VALUE );
         project.setNewProperty( SRC_TEST_KEY, SRC_TEST_VALUE );
+        project.setNewProperty( ETC_KEY, ETC_VALUE );
         project.setNewProperty( TARGET_KEY, TARGET_VALUE );
         project.setNewProperty( BUILD_KEY, BUILD_VALUE );
         project.setNewProperty( DELIVERABLES_KEY, DELIVERABLES_VALUE );
@@ -102,6 +125,7 @@
 
         File basedir = project.getBaseDir();
         String src = project.getProperty( SRC_KEY );
+        String etc = project.getProperty( ETC_KEY );
         String target = project.getProperty( TARGET_KEY );
         String build = project.getProperty( BUILD_KEY );
         String temp = project.getProperty( TEMP_KEY );
@@ -109,6 +133,7 @@
         String deliverables = project.getProperty( DELIVERABLES_KEY );
 
         m_src = setupSrc( basedir, src );
+        m_etc = setupEtc( basedir, etc );
         m_target = setupTarget( basedir, target );
 
         m_build = 
@@ -119,6 +144,28 @@
           setBuildPath( TEMP_KEY, temp );
         m_docs = 
           setBuildPath( DOCS_KEY, docs );
+
+        project.addReference( KEY, this );
+    }
+
+    public String getKey()
+    {
+        if( null != m_key )
+        {
+            return m_key;
+        }
+        else
+        {
+            String name = getProject().getProperty( "project.name" );
+            if( null != name )
+            {
+                return name;            
+            }
+            else
+            {
+                return getProject().getName();
+            }
+        }
     }
 
     public File getSrcDirectory()
@@ -126,6 +173,11 @@
         return m_src;
     }
 
+    public File getEtcDirectory()
+    {
+        return m_etc;
+    }
+
     public File getTargetDirectory()
     {
         return m_target;
@@ -209,6 +261,12 @@
         return new File( basedir, path );
     }
 
+    private File setupEtc( File basedir, String path )
+    {
+        if( null == path ) return new File( basedir, ETC_VALUE );
+        return new File( basedir, path );
+    }
+
     private File setupTarget( File basedir, String path )
     {
         if( null == path ) return new File( basedir, TARGET_VALUE );
@@ -224,14 +282,21 @@
 
     private void setupUserProperties( Project project, File basedir )
     {
-        File user = new File( basedir, USER_PROPERTIES );
+        File user = Context.getFile( basedir, USER_PROPERTIES );
         readProperties( project, user );
     }
 
     private void setupBuildProperties( Project project, File basedir )
     {
-        File build = new File( basedir, BUILD_PROPERTIES );
-        readProperties( project, build );
+        if( null == m_file )
+        {  
+            File build = Context.getFile( basedir, BUILD_PROPERTIES );
+            readProperties( project, build );
+        }
+        else
+        {
+            readProperties( project, m_file );
+        }
     }
 
     private void readProperties( Project project, File file ) throws BuildException 

Modified: avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/home/Home.java
==============================================================================
--- avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/home/Home.java	(original)
+++ avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/home/Home.java	Mon Jun  7 10:29:41 2004
@@ -62,7 +62,7 @@
  * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a>
  * @version $Revision: 1.2 $ $Date: 2004/03/17 10:30:09 $
  */
-public class Home extends Sequential
+public class Home extends DataType
 {
     //-------------------------------------------------------------
     // static
@@ -71,141 +71,61 @@
     public static final String KEY = "project.home";
     public static final String HOME_KEY = "project.home";
 
+    private static final String USER_PROPERTIES = "user.properties";
+    private static final String BUILD_PROPERTIES = "build.properties";
+
     //-------------------------------------------------------------
     // mutable state
     //-------------------------------------------------------------
 
     private boolean m_init = false;
-    private Context m_context;
 
     private String m_id;
-    private String m_key;
 
+    private Home m_home;
     private Repository m_repository;
     private File m_system;
     private File m_file;
 
     private final Hashtable m_resources = new Hashtable();
-    private Definition m_definition;
     private BuildListener m_listener;
 
     //-------------------------------------------------------------
-    // setters
+    // constructor
     //-------------------------------------------------------------
 
-    public void setIndex( File file ) throws BuildException
-    {
-        m_file = file;
-    }
-
-    public void setKey( String key )
-    {
-        m_key = key;
-    }
-
-    public void setId( String id )
+    public Home( Project project, String id )
     {
+        setProject( project );
         m_id = id;
+        setupHome();
     }
 
     //-------------------------------------------------------------
     // Task
     //-------------------------------------------------------------
 
-    public void init() throws BuildException 
-    {
-        if( !m_init )
-        {
-            Project project = getProject();
-            m_context = Context.getContext( project );
-            m_init = true;
-        }
-    }
-
-    public void execute()
+    private String getHomeID()
     {
-        Project project = getProject();
-
-        if( null == m_file )
-        {
-            String path = project.getProperty( HOME_KEY );
-            if( null != path )
-            {
-                File index = Context.getFile( project.getBaseDir(), path );
-                if( index.exists() )
-                {
-                    if( index.isDirectory() )
-                    {
-                        m_file = new File( index, "index.xml" );
-                    }
-                    else
-                    {
-                        m_file = index;
-                    }
-                }
-                else
-                {
-                    final String error = 
-                      "Property value 'project.home' in task defintion [" 
-                      + getTaskName() 
-                      + "] references a non-existant file: "
-                      + index;
-                    throw new BuildException( error );
-                }
-            }
-            else
-            {
-                final String error = 
-                  "Cannot continue due to missing index attribute in task defintion [" 
-                  + getTaskName() + "].";
-                throw new BuildException( error );
-            }
-        }
-
         if( null == m_id )
         {
-            project.addReference( KEY, this );
+            return KEY;
         }
         else
         {
-            project.addReference( m_id, this );
+            return m_id;
         }
-
-        m_system = m_file.getParentFile();
-        log( "home: " + m_system, Project.MSG_DEBUG );
-
-        Element root = ElementHelper.getRootElement( m_file );
-        final Element repo = ElementHelper.getChild( root, "repository" );
-        final Element resources = ElementHelper.getChild( root, "resources" );
-        final Element projects = ElementHelper.getChild( root, "projects" );
-
-        //
-        // construct the repository, build the definition of the available 
-        // resources and projects used within the system and associate a build
-        // listener
-        //
-
-        m_repository = createRepository( repo );
-        buildResourceList( resources );
-        buildProjectList( projects );
-
-        final String key = getKey();
-        m_definition = getDefinition( key, false );
-        m_listener = new StandardListener( this, m_definition );
-
-        super.execute();
-
     }
 
-    private String getKey()
+    private Home getHome()
     {
-        if( null != m_key )
+        if( m_home != null )
         {
-            return m_key;
+            return m_home;
         }
         else
         {
-            return getProject().getName();
+            return this;
         }
     }
 
@@ -223,22 +143,12 @@
         return m_repository;
     }
 
-    public File getFile()
-    {
-        return m_file;
-    }
-
     public Plugin getPlugin( PluginRef ref )
       throws BuildException
     {
         return (Plugin) getDefinition( ref );
     }
 
-    public Definition getDefinition()
-    {
-        return m_definition;
-    }
-
     public Definition getDefinition( ProjectRef ref )
       throws BuildException
     {
@@ -297,6 +207,7 @@
         return null;
     }
 
+   /*
     public void build( Definition definition )
     {
         Ant ant = (Ant) getProject().createTask( "ant" );
@@ -321,11 +232,13 @@
         }
         return (Definition[]) targets.toArray( new Definition[0] );
     }
+    */
 
     //-------------------------------------------------------------
     // internal
     //-------------------------------------------------------------
 
+    /*
     private void getBuildSequence( List visited, List targets, Definition definition )
     {
         if( visited.contains( definition ) ) return;
@@ -351,6 +264,7 @@
             targets.add( definition );
         }
     }
+    */
 
     private void buildResourceList( Element resources )
     {
@@ -403,4 +317,98 @@
         }
         return repository;
     }
+
+    private void setupHome()
+    {
+        Project project = getProject();
+        log( "Building system definition." );
+        try
+        {
+            File index = getIndexFile();
+            m_system = index.getParentFile();
+            setupProperties( project, m_system );
+            Element root = ElementHelper.getRootElement( index );
+            final Element repo = ElementHelper.getChild( root, "repository" );
+            final Element resources = ElementHelper.getChild( root, "resources" );
+            final Element projects = ElementHelper.getChild( root, "projects" );
+
+            //
+            // construct the repository, build the definition of the available 
+            // resources and projects used within the system and associate a build
+            // listener
+            //
+
+            m_repository = createRepository( repo );
+            buildResourceList( resources );
+            buildProjectList( projects );
+
+        }
+        catch( Throwable e )
+        {
+            throw new BuildException( e );
+        }
+    }
+
+    private File getIndexFile()
+    {
+        if( null != m_file ) return m_file;
+
+        String path = project.getProperty( KEY );
+        if( null != path )
+        {
+            File index = Context.getFile( project.getBaseDir(), path );
+            if( index.exists() )
+            {
+                if( index.isDirectory() )
+                {
+                    return new File( index, "index.xml" );
+                }
+                else
+                {
+                    return index;
+                }
+            }
+            else
+            {
+                final String error = 
+                  "Property value 'project.home' references a non-existant file: "
+                  + index;
+                throw new BuildException( error );
+            }
+        }
+        else
+        {
+            final String error = 
+              "Cannot continue due to missing index attribute.";
+            throw new BuildException( error );
+        }
+    }
+
+    private void setupProperties( Project project, File dir )
+    {
+        setupUserProperties( project, dir );
+        setupBuildProperties( project, dir );
+    }
+
+    private void setupUserProperties( Project project, File basedir )
+    {
+        File user = Context.getFile( basedir, USER_PROPERTIES );
+        readProperties( project, user );
+    }
+
+    private void setupBuildProperties( Project project, File basedir )
+    {
+        File build = Context.getFile( basedir, BUILD_PROPERTIES );
+        readProperties( project, build );
+    }
+
+    private void readProperties( Project project, File file ) throws BuildException 
+    {
+        Property props = (Property) project.createTask( "property" );
+        props.setFile( file );
+        props.init();
+        props.execute();
+    }
+
+
 }

Modified: avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/home/Repository.java
==============================================================================
--- avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/home/Repository.java	(original)
+++ avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/home/Repository.java	Mon Jun  7 10:29:41 2004
@@ -99,7 +99,7 @@
         return (ResourceRef[]) list.toArray( new ResourceRef[0] );
     }
 
-    public void getResourceRefs( Definition def, List list )
+    private void getResourceRefs( Definition def, List list )
     {
         ResourceRef[] refs = def.getResourceRefs();
         for( int i=0; i<refs.length; i++ )

Modified: avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/ContextualTask.java
==============================================================================
--- avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/ContextualTask.java	(original)
+++ avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/ContextualTask.java	Mon Jun  7 10:29:41 2004
@@ -63,6 +63,11 @@
         return m_init;
     }
 
+    public String getKey()
+    {
+        return getContext().getKey();
+    }
+
     public Context getContext()
     {
         if( null == m_context )

Modified: avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/DeclareTask.java
==============================================================================
--- avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/DeclareTask.java	(original)
+++ avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/DeclareTask.java	Mon Jun  7 10:29:41 2004
@@ -52,7 +52,7 @@
     public void execute() throws BuildException 
     {
         log( "creating plugin declaration" );
-        final Definition def = getHome().getDefinition();
+        final Definition def = getHome().getDefinition( getKey() );
 
         try
         {
@@ -81,7 +81,7 @@
         File ants = new File( dir, TYPE + "s" );
         mkDir( ants );
 
-        Definition def = getHome().getDefinition();
+        Definition def = getHome().getDefinition( getKey() );
         Info info = def.getInfo();
         String filename = getFilename( info );
         return new File( ants, filename );

Added: avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/HomeTask.java
==============================================================================
--- (empty file)
+++ avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/HomeTask.java	Mon Jun  7 10:29:41 2004
@@ -0,0 +1,105 @@
+/* 
+ * Copyright 2004 Apache Software Foundation
+ * Licensed  under the  Apache License,  Version 2.0  (the "License");
+ * you may not use  this file  except in  compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed  under the  License is distributed on an "AS IS" BASIS,
+ * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
+ * implied.
+ * 
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.avalon.tools.tasks;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.taskdefs.Copy;
+import org.apache.tools.ant.taskdefs.Jar;
+import org.apache.tools.ant.types.FileSet;
+import org.apache.tools.ant.types.Path;
+
+import org.apache.avalon.tools.home.Home;
+import org.apache.avalon.tools.home.Context;
+import org.apache.avalon.tools.project.Definition;
+
+/**
+ * Load a goal. 
+ *
+ * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a>
+ * @version $Revision: 1.2 $ $Date: 2004/03/17 10:30:09 $
+ */
+public class HomeTask extends ContextualTask
+{
+    private String m_id;
+    private static Home HOME;
+
+   /**
+    * Set the home ref id to the system home.  If not supplied the 
+    * default system home 'project.home' id will apply.
+    *
+    * @param id a home id
+    */
+    public void setRefid( String id )
+    {
+        m_id = id;
+    }
+
+    public void init() 
+    {
+        if( !isInitialized() )
+        {
+            super.init();
+            if( null == HOME )
+            {
+                HOME = new Home( getProject(), Home.KEY );
+            }
+            getProject().addReference( Home.KEY, HOME );
+        }
+    }
+
+    private String getHomeID()
+    {
+        if( null == m_id )
+        {
+            return Home.KEY;
+        }
+        else
+        {
+            return m_id;
+        }
+    }
+
+    private Home getHomeFromReference( String id )
+    {
+        Object object = getProject().getReference( id );
+        if( null == object )
+        {
+            return null;
+        }
+        if( object instanceof Home )
+        {
+            return (Home) object;
+        }
+        else
+        {
+            final String error = 
+              "System home ref id '" + id 
+              + "' declared or implied in task [" 
+              + getTaskName() 
+              + "] in the project ["
+              + getProject().getName() 
+              + "] references a object that is not a system home.";
+            throw new BuildException( error );
+        }
+    }
+}

Modified: avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/InstallTask.java
==============================================================================
--- avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/InstallTask.java	(original)
+++ avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/InstallTask.java	Mon Jun  7 10:29:41 2004
@@ -57,7 +57,7 @@
         fileset.createInclude().setName( "**/*" );
 
         File cache = getHome().getRepository().getCacheDirectory();
-        String group = getHome().getDefinition().getInfo().getGroup();
+        String group = getHome().getDefinition( getKey() ).getInfo().getGroup();
         File target = new File( cache, group );
         mkDir( target );
 

Modified: avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/JUnitTestTask.java
==============================================================================
--- avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/JUnitTestTask.java	(original)
+++ avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/JUnitTestTask.java	Mon Jun  7 10:29:41 2004
@@ -57,12 +57,21 @@
     public static final String TEST_TMP_KEY = "project.test.temp";
     public static final String TEST_TMP_VALUE = "temp";
 
-    public static final String DEBUG_KEY = "test.compile.debug";
+    public static final String DEBUG_KEY = "project.test.compile.debug";
     public static final boolean DEBUG_VALUE = true;
 
-    public static final String FORK_KEY = "test.compile.fork";
+    public static final String FORK_KEY = "project.test.compile.fork";
     public static final boolean FORK_VALUE = false;
 
+    public static final String HALT_ON_ERROR_KEY = "project.test.halt-on-error";
+    public static final boolean HALT_ON_ERROR_VALUE = false;
+
+    public static final String HALT_ON_FAILURE_KEY = "project.test.halt-on-failure";
+    public static final boolean HALT_ON_FAILURE_VALUE = true;
+
+    private static final String ERROR_KEY = "project.test.error";
+    private static final String FAILURE_KEY = "project.test.failure";
+
     private File m_test;
 
     public void init() throws BuildException 
@@ -76,6 +85,8 @@
             project.setNewProperty( TEST_SRC_KEY, "" + TEST_SRC_VALUE );
             project.setNewProperty( TEST_ENV_KEY, "" + TEST_ENV_VALUE );
             project.setNewProperty( TEST_TMP_KEY, "" + TEST_TMP_VALUE );
+            project.setNewProperty( HALT_ON_ERROR_KEY, "" + HALT_ON_ERROR_VALUE );
+            project.setNewProperty( HALT_ON_FAILURE_KEY, "" + HALT_ON_FAILURE_VALUE );
             getContext().setBuildPath( TEST_KEY, TEST_VALUE );
             m_test = getContext().getBuildPath( TEST_KEY );
         }
@@ -93,7 +104,7 @@
         {
             File classes = new File( m_test, "classes" );
             mkDir( classes );
-            Definition definition = getHome().getDefinition();
+            Definition definition = getHome().getDefinition( getKey() );
             Path classpath = 
               getHome().getRepository().createPath( project, definition );
 
@@ -106,11 +117,73 @@
             File jar = getContext().getBuildPath( "jar" );
             classpath.createPathElement().setLocation( jar );
             compile( src, classes, classpath );
+            copyCompileResource( src, classes );
             classpath.createPathElement().setLocation( classes );
-            test( src, classpath );
+
+            //
+            // setup test resources
+            //
+
+            File temp = new File( m_test, "temp" );
+            mkDir( temp );
+            copyUnitTestResource( temp );
+            test( src, classpath, temp );
+        }
+
+        /*
+        System.out.println( 
+           "error: [" 
+           + project.getProperty( ERROR_KEY ) 
+           + "]" ); 
+        System.out.println( 
+           "failure: [" 
+           + project.getProperty( FAILURE_KEY ) 
+           + "]" );
+        */ 
+    }
+
+    private void copyUnitTestResource( File dest )
+    {
+        File build = getContext().getBuildDirectory();
+        File src = getUnitTestResourcesDirectory( build );
+        if( src.exists() )
+        {
+            mkDir( dest );
+            Copy copy = (Copy) getProject().createTask( "copy" );
+            copy.setPreserveLastModified( true );
+            copy.setTodir( dest );
+
+            FileSet fileset = new FileSet();
+            fileset.setDir( src );
+            copy.addFileset( fileset );
+            copy.init();
+            copy.execute();
         }
     }
 
+    private File getUnitTestResourcesDirectory( File build )
+    {
+        File etc = new File( build, "etc" );
+        File test = new File( etc, "test" );
+        File unit = new File( test, "unit" );
+        return unit;
+    }
+
+    private void copyCompileResource( File src, File classes )
+    {
+        Copy copy = (Copy) getProject().createTask( "copy" );
+        copy.setPreserveLastModified( true );
+        copy.setTodir( classes );
+
+        FileSet fileset = new FileSet();
+        fileset.setDir( src );
+        fileset.setIncludes( "**/**" );
+        fileset.setExcludes( "**/*.java,**/package.html" );
+        copy.addFileset( fileset );
+        copy.init();
+        copy.execute();
+    }
+
     private void compile( File sources, File classes, Path classpath )
     {
         File basedir = getProject().getBaseDir();
@@ -126,26 +199,23 @@
         javac.execute();
     }
 
-    private void test( File src, Path classpath )
+    private void test( File src, Path classpath, File base )
     {
+        Project project = getProject();
+
         FileSet fileset = new FileSet();
         fileset.setDir( src );
         fileset.createInclude().setName( "**/*TestCase.java" );
         fileset.createExclude().setName( "**/Abstract*.java" );
 
-        File base = new File( m_test, "temp" );
-        mkDir( base );
-
         JUnitTask junit = (JUnitTask) getProject().createTask( "junit" );
         junit.setFork( getForkProperty() );
+        junit.setErrorProperty( ERROR_KEY );
+        junit.setFailureProperty( FAILURE_KEY );
 
         JUnitTask.SummaryAttribute summary = new JUnitTask.SummaryAttribute();
         summary.setValue( "on" );
         junit.setPrintsummary( summary );
-        junit.setHaltonfailure( true );
-        junit.setHaltonerror( true );
-        junit.setErrorProperty( "test-errors" );
-        junit.setFailureProperty( "test-failures" );
         if( FORK_VALUE )
         {
             junit.setFork( true );
@@ -156,6 +226,12 @@
         junit.setReloading( true );
         junit.setFiltertrace( true );
         junit.createClasspath().add( classpath );
+        junit.setHaltonerror( 
+          getBooleanProperty( 
+            HALT_ON_ERROR_KEY, HALT_ON_ERROR_VALUE ) );
+        junit.setHaltonfailure( 
+          getBooleanProperty( 
+            HALT_ON_FAILURE_KEY, HALT_ON_FAILURE_VALUE ) );
 
         File reports = new File( m_test, "reports" );
         mkDir( reports );
@@ -179,7 +255,6 @@
         Environment.Variable basedir = new Environment.Variable();
         basedir.setKey( "basedir" );
         basedir.setValue( base.toString() );
-
         junit.addSysproperty( basedir );
 
         junit.init();

Modified: avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/JarTask.java
==============================================================================
--- avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/JarTask.java	(original)
+++ avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/JarTask.java	Mon Jun  7 10:29:41 2004
@@ -76,8 +76,8 @@
     public File getJarFile( File deliverables )
     {
         Project project = getProject();
-        Definition def = getHome().getDefinition();
-        String type = getHome().getDefinition().getInfo().getType();
+        Definition def = getHome().getDefinition( getKey() );
+        String type = def.getInfo().getType();
         File types = new File( deliverables, type + "s" );
         String filename = getJarFilename( def );
         return new File( types, filename );

Modified: avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/JavacTask.java
==============================================================================
--- avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/JavacTask.java	(original)
+++ avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/JavacTask.java	Mon Jun  7 10:29:41 2004
@@ -78,7 +78,7 @@
 
             Path classpath = 
               getHome().getRepository().createPath( 
-                getProject(), getHome().getDefinition() );
+                getProject(), getHome().getDefinition( getKey() ) );
             compile( main, classes, classpath );
 
             Copy copy = (Copy) getProject().createTask( "copy" );
@@ -92,6 +92,10 @@
             copy.addFileset( fileset );
             copy.init();
             copy.execute();
+        }
+        else
+        {
+            log( "no src main to compile : " + main.toString() );
         }
     }
 

Modified: avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/PrepareTask.java
==============================================================================
--- avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/PrepareTask.java	(original)
+++ avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/PrepareTask.java	Mon Jun  7 10:29:41 2004
@@ -45,6 +45,11 @@
     private static final String SRC_FILTERED_INCLUDES_VALUE = 
       "**/*.java,**/*.x*,**/*.properties";
 
+    private static final String ETC_FILTERED_INCLUDES_KEY = 
+      "project.prepare.etc.filtered.includes";
+    private static final String ETC_FILTERED_INCLUDES_VALUE = 
+      "**/*.*";
+
     public void init() throws BuildException 
     {
         if( !isInitialized() )
@@ -53,6 +58,8 @@
             Project project = getProject();
             project.setNewProperty(
               SRC_FILTERED_INCLUDES_KEY, SRC_FILTERED_INCLUDES_VALUE );
+            project.setNewProperty(
+              ETC_FILTERED_INCLUDES_KEY, ETC_FILTERED_INCLUDES_VALUE );
         }
     }
 
@@ -66,23 +73,28 @@
             mkDir( target );
         }
         File src = getContext().getSrcDirectory();
+        File etc = getContext().getEtcDirectory();
         File build = getContext().getBuildDirectory();
-        if( !build.exists() )
-        {
-            log( "creating build directory" );
-            mkDir( build );
-        }
         if( src.exists() )
         {
             String filters = project.getProperty( SRC_FILTERED_INCLUDES_KEY );
             copy( src, build, true, filters, "" );
             copy( src, build, false, "**/*.*", filters );
         }
+        if( etc.exists() )
+        {
+            File buildEtcDir = new File( build, "etc" );
+            String filters = project.getProperty( ETC_FILTERED_INCLUDES_KEY );
+            copy( etc, buildEtcDir, true, filters, "" );
+            copy( etc, buildEtcDir, false, "**/*.*", filters );
+        }
     }
 
     private void copy( 
        File src, File destination, boolean filtering, String includes, String excludes )
     {
+        mkDir( destination );
+
         Copy copy = (Copy) getProject().createTask( "copy" );
         copy.setTodir( destination );
         copy.setFiltering( filtering );
@@ -98,5 +110,4 @@
         copy.init();
         copy.execute();
     }
-
 }

Added: avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/ReactorTask.java
==============================================================================
--- (empty file)
+++ avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/ReactorTask.java	Mon Jun  7 10:29:41 2004
@@ -0,0 +1,241 @@
+/* 
+ * Copyright 2004 Apache Software Foundation
+ * Licensed  under the  Apache License,  Version 2.0  (the "License");
+ * you may not use  this file  except in  compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed  under the  License is distributed on an "AS IS" BASIS,
+ * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
+ * implied.
+ * 
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.avalon.tools.tasks;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.FileInputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.taskdefs.Ant;
+import org.apache.tools.ant.taskdefs.Copy;
+import org.apache.tools.ant.taskdefs.Delete;
+import org.apache.tools.ant.taskdefs.Jar;
+import org.apache.tools.ant.taskdefs.Mkdir;
+import org.apache.tools.ant.taskdefs.Checksum;
+import org.apache.tools.ant.taskdefs.Execute;
+import org.apache.tools.ant.types.FileSet;
+import org.apache.tools.ant.types.FileList;
+import org.apache.tools.ant.types.DirSet;
+import org.apache.tools.ant.types.Path;
+
+import org.apache.avalon.tools.home.Context;
+import org.apache.avalon.tools.home.Home;
+import org.apache.avalon.tools.project.Definition;
+import org.apache.avalon.tools.project.ProjectRef;
+import org.apache.avalon.tools.project.PluginRef;
+
+/**
+ * Build a set of projects taking into account dependencies within the 
+ * supplied fileset. 
+ *
+ * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a>
+ * @version $Revision: 1.2 $ $Date: 2004/03/17 10:30:09 $
+ */
+public class ReactorTask extends SystemTask
+{
+    private static final String BANNER = 
+      "------------------------------------------------------------------------";
+    private Path m_path;
+    private List m_defs;
+
+    public void init()
+    {
+        m_path = new Path( getProject() );
+    }
+
+    public void addConfigured( final Path path )
+    {
+        m_path.add( path );
+    }
+
+    public void addConfigured( final DirSet dirset )
+    {
+        m_path.addDirset( dirset );
+    }
+
+    public void addConfigured( final FileSet fileset )
+    {
+        m_path.addFileset( fileset );
+    }
+
+    public void addConfigured( final FileList list ) 
+    {
+        m_path.addFilelist( list );
+    }
+
+    public void execute() throws BuildException 
+    {
+        final Project project = getProject();
+        m_defs = getDefinitions();
+        final Definition[] defs = walkGraph();
+        log( "Build sequence for project group:" );
+        project.log( BANNER );
+        for( int i=0; i<defs.length; i++ )
+        {
+            final Definition def = defs[i];
+            project.log( def.toString() );
+        }
+        project.log( BANNER );
+        for( int i=0; i<defs.length; i++ )
+        {
+            final Definition def = defs[i];
+            try
+            {
+                build( def );
+            }
+            catch( Throwable e )
+            {
+                throw new BuildException( e );
+            }
+        }
+    }
+
+    public void build( final Definition definition )
+    {
+        final Ant ant = (Ant) getProject().createTask( "ant" );
+        ant.setDir( definition.getBasedir() );
+        ant.setInheritRefs( false );
+        ant.setInheritAll( false );
+        ant.init();
+        ant.execute();
+    }
+
+    private Definition[] walkGraph()
+    {
+        final ArrayList result = new ArrayList();
+        final ArrayList done = new ArrayList();
+
+        final int size = m_defs.size();
+        for( int i = 0; i < size; i++ )
+        {
+            final Definition def = (Definition) m_defs.get( i );
+            visit( def, done, result );
+        }
+
+        final Definition[] returnValue = new Definition[result.size()];
+        return (Definition[]) result.toArray( returnValue );
+    }
+
+    private void visit( final Definition def, final ArrayList done,
+            final ArrayList order )
+    {
+        if( done.contains( def ) ) return;
+        done.add( def );
+        visitProviders( def, done, order );
+        order.add( def );
+    }
+
+    private void visitProviders( 
+      final Definition def, final ArrayList done, final ArrayList order )
+    {
+        final Definition[] providers = getProviders( def );
+        for( int i = (providers.length - 1); i > -1; i-- )
+        {
+            visit( providers[i], done, order );
+        }
+    }
+
+    private Definition[] getProviders( final Definition def )
+    {
+        final ArrayList list = new ArrayList();
+        final ProjectRef[] refs = def.getProjectRefs();
+        for( int i=0; i<refs.length; i++ )
+        {
+            final Definition d = getHome().getDefinition( refs[i] );
+            if( m_defs.contains( d ) )
+            {
+                list.add( d );
+            }
+        }
+        final PluginRef[] prefs = def.getPluginRefs();
+        for( int i=0; i<prefs.length; i++ )
+        {
+            final Definition d = getHome().getPlugin( prefs[i] );
+            if( m_defs.contains( d ) )
+            {
+                list.add( d );
+            }
+        }
+        return (Definition[]) list.toArray( new Definition[0] );
+    }
+
+    private List getDefinitions()
+    {
+        final ArrayList list = new ArrayList();
+        final Project project = getProject();
+        final File basedir = project.getBaseDir();
+        final String[] names = m_path.list();
+        for( int i=0; i<names.length; i++ )
+        {
+            final String path = names[i];
+            final File file = Context.getFile( basedir, path );
+            final File dir = getDir( file );
+            final File props = new File( dir, "build.xml" );
+            if( file.exists() )
+            {
+                final String key = getProjectName( dir );
+                if( null != key )
+                {
+                    list.add( getHome().getDefinition( key ) );
+                }
+                else
+                {
+                    log( "Skipping dir: " 
+                      + dir 
+                      + "due to unresolve project name." );
+                }
+            }
+            else
+            {
+                log( "Skipping dir: " 
+                  + dir 
+                  + "due to missing build.properties file" );
+            }
+        }
+        return list;
+    }
+
+    private String getProjectName( final File dir )
+    {
+        try
+        {
+            final Properties properties = new Properties();
+            final File props = new File( dir, "build.properties" );
+            final InputStream stream = new FileInputStream( props );
+            properties.load( stream );
+            return properties.getProperty( "project.name" );
+        }
+        catch( IOException ioe )
+        {
+            throw new BuildException( ioe );
+        }
+    }
+
+    private File getDir( final File file )
+    {
+        if( file.isDirectory() ) return file;
+        return file.getParentFile();
+    }
+}

Modified: avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/SystemTask.java
==============================================================================
--- avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/SystemTask.java	(original)
+++ avalon/trunk/tools/project/core/src/main/org/apache/avalon/tools/tasks/SystemTask.java	Mon Jun  7 10:29:41 2004
@@ -68,7 +68,8 @@
         if( null == object )
         {
             final String error = 
-              "System home ref id '" + id + "' declared or implied in task [" 
+              "System home ref id '" + id 
+              + "' declared or implied in task [" 
               + getTaskName() 
               + "] is unknown with the project ["
               + getProject().getName() 
@@ -82,7 +83,8 @@
         else
         {
             final String error = 
-              "System home ref id '" + id + "' declared or implied in task [" 
+              "System home ref id '" + id 
+              + "' declared or implied in task [" 
               + getTaskName() 
               + "] in the project ["
               + getProject().getName() 

Added: avalon/trunk/tools/project/core/src/test/build.properties
==============================================================================
--- (empty file)
+++ avalon/trunk/tools/project/core/src/test/build.properties	Mon Jun  7 10:29:41 2004
@@ -0,0 +1,3 @@
+project.name = test
+project.home = .
+project.gpg.exe = gpg
\ No newline at end of file

Added: avalon/trunk/tools/project/core/src/test/build.xml
==============================================================================
--- (empty file)
+++ avalon/trunk/tools/project/core/src/test/build.xml	Mon Jun  7 10:29:41 2004
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<project name="test" default="build" basedir="." xmlns:x="antlib:org.apache.avalon.tools">
+
+  <path id="targets">
+    <dirset dir="projects" includes="*"/>
+  </path>
+
+  <target name="build" depends="">
+    <property file="build.properties"/>
+    <x:home/>
+    <x:reactor>
+      <path refid="targets"/>
+    </x:reactor>
+  </target>
+
+  <target name="clean" depends="">
+    <subant inheritAll="false" genericantfile="standard.xml" target="clean"
+       buildpathref="targets"/>
+  </target>
+
+</project>

Added: avalon/trunk/tools/project/core/src/test/generic.xml
==============================================================================
--- (empty file)
+++ avalon/trunk/tools/project/core/src/test/generic.xml	Mon Jun  7 10:29:41 2004
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<project name="generic" basedir=".">
+  <import file="${basedir}/build.xml"/>
+</project>
+

Modified: avalon/trunk/tools/project/core/src/test/projects/demo/build.properties
==============================================================================
--- avalon/trunk/tools/project/core/src/test/projects/demo/build.properties	(original)
+++ avalon/trunk/tools/project/core/src/test/projects/demo/build.properties	Mon Jun  7 10:29:41 2004
@@ -1,2 +1,3 @@
+project.name = demo
 project.home = ../..
 project.gpg.exe = gpg

Modified: avalon/trunk/tools/project/core/src/test/projects/gizmo/build.properties
==============================================================================
--- avalon/trunk/tools/project/core/src/test/projects/gizmo/build.properties	(original)
+++ avalon/trunk/tools/project/core/src/test/projects/gizmo/build.properties	Mon Jun  7 10:29:41 2004
@@ -1,2 +1,3 @@
+project.name = gizmo
 project.home = ../..
 project.gpg.exe = gpg

Modified: avalon/trunk/tools/project/core/src/test/projects/gizmo/build.xml
==============================================================================
--- avalon/trunk/tools/project/core/src/test/projects/gizmo/build.xml	(original)
+++ avalon/trunk/tools/project/core/src/test/projects/gizmo/build.xml	Mon Jun  7 10:29:41 2004
@@ -1,8 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 
-<project name="gizmo" default="dist" basedir=".">
+<project name="gizmo" default="dist" basedir="." 
+    xmlns:x="antlib:org.apache.avalon.tools">
 
   <property file="build.properties"/>
   <import file="${project.home}/standard.xml"/>
 
-</project>
\ No newline at end of file
+</project>

Modified: avalon/trunk/tools/project/core/src/test/projects/sample/build.properties
==============================================================================
--- avalon/trunk/tools/project/core/src/test/projects/sample/build.properties	(original)
+++ avalon/trunk/tools/project/core/src/test/projects/sample/build.properties	Mon Jun  7 10:29:41 2004
@@ -1,2 +1,3 @@
+project.name = sample
 project.home = ../..
 project.gpg.exe = gpg

Modified: avalon/trunk/tools/project/core/src/test/projects/sample/build.xml
==============================================================================
--- avalon/trunk/tools/project/core/src/test/projects/sample/build.xml	(original)
+++ avalon/trunk/tools/project/core/src/test/projects/sample/build.xml	Mon Jun  7 10:29:41 2004
@@ -6,10 +6,7 @@
 
   <property file="build.properties"/>
   <import file="${project.home}/standard.xml"/>
-
-  <x:home>
-    <x:plugin artifact="plugin:demo/demo#1.0"/>
-  </x:home>
+  <x:plugin artifact="plugin:demo/demo#1.0"/>
 
   <target name="build" depends="standard.build">
     <d:hello/>

Modified: avalon/trunk/tools/project/core/src/test/projects/widget/build.properties
==============================================================================
--- avalon/trunk/tools/project/core/src/test/projects/widget/build.properties	(original)
+++ avalon/trunk/tools/project/core/src/test/projects/widget/build.properties	Mon Jun  7 10:29:41 2004
@@ -1,2 +1,3 @@
+project.name = widget
 project.home = ../..
 project.gpg.exe = gpg

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org