Sorry, I get it now. Since i've never used TestNG I've never run into this issue. Fair enough. Worth ditching Maven over though? You could just pull in a version of the surefire plugin in-tree and patch it. I've done that where I've ended up with a crappy snapshot that was necessary for functionality-in-progress. It's not a great solution, but often easier and more isolated than re-working one's entire build environment.

I presume you've filed a JIRA issue about the surefire plugin. ;)

Christian.

P.S. Some of these issues are being worked out on the maven lists around both best-practices for maven development, as well as some improvements in 2.1. -cg.

On 14-Dec-07, at 17:41 , Howard Lewis Ship wrote:

On Dec 14, 2007 8:55 AM, Christian Edward Gruber
<[EMAIL PROTECTED]> wrote:
If you're going to do that, can you please still deploy into a maven
repository.  Nearly every organization I work in, and almost all
projects outside of that use Maven, so losing Tapestry as a maven
artifact will be a big fat hairy batch of frustration.

Totally agree, I think Maven's repository structure and transitive
dependency management is truly good.  It's just the part that builds
code that's out of control!


On a side note, why are you using the surefire 2.4-snapshot, and then
getting upset when the behaviour is different?  It's a snapshot.  Use
released code if you need consistent behaviour.  Just lock it in with
dependencyManagement.

Christian.

Well, I need certain features from TestNG newer-than-two-years-ago,
and the newer versions of TestNG are only compatibile with the
surefire snapshot.  Uggh.



On 14-Dec-07, at 11:34 , Howard Lewis Ship wrote:

I think it's late in the cycle to switch to Buildr now ... but early
in the next cycle make sense. I think Buildr can do everything we're
using Maven for currently, though we may have to cobble together a
solution for generating site documentation the Maven way (I actually
like the .apt format).

On Dec 13, 2007 12:53 PM, Jesse Kuhnert <[EMAIL PROTECTED]> wrote:
p.s. Yes to the buildr idea! I really like it. Makes editing xml
files seem so archaic.  Very promising.

If it is able to still publish maven-like snapshot / release builds
for ibiblio stuff that would be cherry.


On Dec 13, 2007 3:47 PM, Jesse Kuhnert <[EMAIL PROTECTED]> wrote:
Yes....It would be nice if the people working on that part of
surefire
actually used surefire themselves - which doesn't seem to be the
case
or they'd be just as frustrated as everyone else... ;)


On Dec 13, 2007 3:33 PM, Howard Lewis Ship <[EMAIL PROTECTED]> wrote:
Nope, the old surefire plugin did the right thing in terms of the
CWD,
but surefire 2.4-snapshot (necessary to use more recent versions of
TestNG) does not.  Buildr anyone?  I'm so over Maven.

On Dec 13, 2007 11:47 AM, Christian Edward Gruber
<[EMAIL PROTECTED]> wrote:
I don't think surefire "fails to set" the current directory, but
rather it assumes CWD is the current sub-project/module's root
directory.  Is that not happening here?

Christian.


On 13-Dec-07, at 14:18 , [EMAIL PROTECTED] wrote:

Author: hlship
Date: Thu Dec 13 11:18:56 2007
New Revision: 603991

URL: http://svn.apache.org/viewvc?rev=603991&view=rev
Log:
Work-around brain damaged maven-surefire-plugin (which fails to
set
the current directory) so that tests run correctly from Maven

Added:
 tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/
apache/
tapestry/test/TapestryTestConstants.java
Modified:
 tapestry/tapestry5/trunk/pom.xml
 tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/
apache/
tapestry/ComponentResources.java
 tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/
apache/
tapestry/internal/test/PageTesterContext.java
 tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/
apache/
tapestry/integration/RunJetty.java
 tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/
apache/
tapestry/internal/services/TemplateParserImplTest.java
 tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/
apache/
tapestry/test/AbstractIntegrationTestSuite.java
 tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/
apache/
tapestry/test/JettyRunner.java

Modified: tapestry/tapestry5/trunk/pom.xml
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/pom.xml?rev=603991&r1=603990&r2=603991&view=diff
=
=
=
=
=
=
=
=
=
=
=
=
=
= = ===============================================================
--- tapestry/tapestry5/trunk/pom.xml (original)
+++ tapestry/tapestry5/trunk/pom.xml Thu Dec 13 11:18:56 2007
@@ -232,7 +232,7 @@
                          <suiteXmlFile>src/test/conf/
testng.xml</
suiteXmlFile>
                      </suiteXmlFiles>
                      <argLine>-Xmx500m</argLine>
-                        <redirectTestOutputToFile>true</
redirectTestOutputToFile>
+                        <redirectTestOutputToFile>false</
redirectTestOutputToFile>
                  </configuration>
              </plugin>
              <plugin>

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/
org/
apache/tapestry/ComponentResources.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/ComponentResources.java?rev=603991&r1=603990&r2=603991&view=diff
=
=
=
=
=
=
=
=
=
=
=
=
=
= = ===============================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/
apache/
tapestry/ComponentResources.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/
apache/
tapestry/ComponentResources.java Thu Dec 13 11:18:56 2007
@@ -126,4 +126,5 @@
   * @return the informal Block parameter, or null if not bound
   */
  Block getBlockParameter(String parameterName);
+
}

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/
org/
apache/tapestry/internal/test/PageTesterContext.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/test/PageTesterContext.java?rev=603991&r1=603990&r2=603991&view=diff
=
=
=
=
=
=
=
=
=
=
=
=
=
= = ===============================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/
apache/
tapestry/internal/test/PageTesterContext.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/
apache/
tapestry/internal/test/PageTesterContext.java Thu Dec 13
11:18:56 2007
@@ -15,6 +15,7 @@
package org.apache.tapestry.internal.test;

import org.apache.tapestry.services.Context;
+import org.apache.tapestry.test.TapestryTestConstants;

import java.io.File;
import java.net.MalformedURLException;
@@ -23,11 +24,11 @@

public class PageTesterContext implements Context
{
-    private final String _contextRoot;
+    private final File _contextRoot;

  public PageTesterContext(String contextRoot)
  {
-        _contextRoot = contextRoot;
+        _contextRoot = new
File(TapestryTestConstants.MODULE_BASE_DIR, contextRoot);
  }

  public String getInitParameter(String name)
@@ -55,14 +56,12 @@

  public List<String> getResourcePaths(String path)
  {
-        throw new UnsupportedOperationException(
-                "getResourcePaths() is not supported for
ContextForPageTester.");
+        throw new
UnsupportedOperationException("getResourcePaths()
is not supported for ContextForPageTester.");
  }

  public Object getAttribute(String name)
  {
-        throw new UnsupportedOperationException(
-                "getAttribute() is not supported for
ContextForPageTester.");
+        throw new
UnsupportedOperationException("getAttribute() is
not supported for ContextForPageTester.");
  }

}

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/
org/
apache/tapestry/integration/RunJetty.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/RunJetty.java?rev=603991&r1=603990&r2=603991&view=diff
=
=
=
=
=
=
=
=
=
=
=
=
=
= = ===============================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/
apache/
tapestry/integration/RunJetty.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/
apache/
tapestry/integration/RunJetty.java Thu Dec 13 11:18:56 2007
@@ -16,6 +16,8 @@

import org.apache.tapestry.test.JettyRunner;

+import java.io.File;
+
/**
* A "shim" to run Demo App #1 inside IntelliJ.  I still haven't
found a way to get IntelliJ to
* export test classes and resources into a web facet.
@@ -27,6 +29,8 @@
      String contextName = args[0];
      String path = args[1];

-        new JettyRunner(contextName, 8080, path);
+        File workingDir = new
File(System.getProperty("user.dir"));
+
+        new JettyRunner(workingDir, contextName, 8080, path);
  }
}

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/
org/
apache/tapestry/internal/services/TemplateParserImplTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/TemplateParserImplTest.java?rev=603991&r1=603990&r2=603991&view=diff
=
=
=
=
=
=
=
=
=
=
=
=
=
= = ===============================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/
apache/
tapestry/internal/services/TemplateParserImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/
apache/
tapestry/internal/services/TemplateParserImplTest.java Thu Dec 13
11:18:56 2007
@@ -22,6 +22,7 @@
import org.apache.tapestry.ioc.internal.util.ClasspathResource;
import static
org.apache.tapestry.ioc.internal.util.CollectionFactory.newSet;
import org.apache.tapestry.ioc.internal.util.TapestryException;
+import org.apache.tapestry.test.TapestryTestConstants;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

@@ -449,9 +450,7 @@

      TextToken t1 = get(tokens, 1);

-        assertEquals(
-                t1.getText().replaceAll("\\s+", " "),
-                " ${expansions must be on a single line} ");
+        assertEquals(t1.getText().replaceAll("\\s+", " "), " $
{expansions must be on a single line} ");

  }

@@ -553,28 +552,21 @@
  @DataProvider(name = "parse_failure_data")
  public Object[][] parse_failure_data()
  {
-        return new Object[][]
-                {
-                        {
- "mixin_requires_id_or_type.tml", - "You may not specify mixins for
element <span> because it does not represent a component (which
requires either an id attribute or a type attribute).",
-                                2},
-
{"illegal_nesting_within_body_element.tml",
-                         "Element 'xyz' is nested within a
Tapestry
body element", 2},
-                        {
-
"unexpected_attribute_in_parameter_element.tml",
-                                "Element <parameter> does not
support an attribute named 'grok'. The only allowed attribute
name
is 'name'.",
-                                4},
-
{"name_attribute_of_parameter_element_omitted.tml",
- "The name attribute of the <parameter>
element must be specified.", 4},
-
{"name_attribute_of_parameter_element_blank.tml",
- "The name attribute of the <parameter>
element must be specified.", 4},
-                        {
-
"unexpected_attribute_in_block_element.tml",
-                                "Element <block> does not
support
an attribute named 'name'. The only allowed attribute name is
'id'.",
-                                3},
+ return new Object[][] {{"mixin_requires_id_or_type.tml",
+                               "You may not specify mixins for
element <span> because it does not represent a component (which
requires either an id attribute or a type attribute).",
+                               2},
{"illegal_nesting_within_body_element.tml",
+                                    "Element 'xyz' is nested
within
a Tapestry body element", 2}, {
+ "unexpected_attribute_in_parameter_element.tml",
+                "Element <parameter> does not support an
attribute
named 'grok'. The only allowed attribute name is 'name'.",
+                4},
{"name_attribute_of_parameter_element_omitted.tml",
+                     "The name attribute of the <parameter>
element
must be specified.", 4}, {
+ "name_attribute_of_parameter_element_blank.tml",
+                "The name attribute of the <parameter> element
must
be specified.", 4}, {
+                "unexpected_attribute_in_block_element.tml",
+                "Element <block> does not support an attribute
named 'name'. The only allowed attribute name is 'id'.",
+                3},

-                };
+        };
  }

  @Test(dataProvider = "parse_failure_data")
@@ -589,11 +581,8 @@
      {
          if (!ex.getMessage().contains(errorMessageSubstring))
          {
-                throw new AssertionError(
-                        format(
-                                "Message [%s] does not contain
substring [%s].",
-                                ex.getMessage(),
-                                errorMessageSubstring));
+                throw new AssertionError(format("Message [%s]
does
not contain substring [%s].", ex.getMessage(),
+
errorMessageSubstring));
          }

          assertEquals(ex.getLocation().getLine(),
expectedLine);
@@ -603,11 +592,8 @@
  @DataProvider(name = "doctype_parsed_correctly_data")
  public Object[][] doctype_parsed_correctly_data()
  {
-        return new Object[][]
-                {
-                        {"xhtml1_strict_doctype.tml"},
-                        {"xhtml1_transitional_doctype.tml"},
-                        {"xhtml1_frameset_doctype.tml"}};
+        return new Object[][]{{"xhtml1_strict_doctype.tml"},
{"xhtml1_transitional_doctype.tml"},
+ {"xhtml1_frameset_doctype.tml"}};
  }

  @Test(dataProvider = "doctype_parsed_correctly_data")
@@ -622,30 +608,36 @@
  @DataProvider(name = "doctype_token_added_correctly_data")
  public Object[][] doctype_token_added_correctly_data()
  {
-        return new Object[][]
-                {
-                        {"xhtml1_strict_doctype.tml", "html",
"-//
W3C//DTD XHTML 1.0 Strict//EN",
-                         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
"},
-                        {"xhtml1_transitional_doctype.tml",
"html",
-                         "-//W3C//DTD XHTML 1.0 Transitional//
EN",
-                         
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
"},
-                        {"xhtml1_frameset_doctype.tml",
"html", "-//
W3C//DTD XHTML 1.0 Frameset//EN",
-                         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd
"},
-                        {"html4_strict_doctype.tml", "HTML",
"-//
W3C//DTD HTML 4.01//EN",
-                         "http://www.w3.org/TR/html4/
strict.dtd"},
-                        {"html4_transitional_doctype.tml",
"HTML",
-                         "-//W3C//DTD HTML 4.01 Transitional//
EN",
-                         "http://www.w3.org/TR/html4/
loose.dtd"},
-                        {"html4_frameset_doctype.tml", "HTML",
"-//
W3C//DTD HTML 4.01 Frameset//EN",
-                         "http://www.w3.org/TR/html4/frameset.dtd
"},
-                        {"system_doctype.xml", "foo", null,
-                         "src/test/resources/org/apache/
tapestry/
internal/services/simple.dtd"}};
+        return new Object[][]{{"xhtml1_strict_doctype.tml",
"html",
"-//W3C//DTD XHTML 1.0 Strict//EN",
+                               
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
"}, {"xhtml1_transitional_doctype.tml",
+
                                                                                    
"html
",
+
                                                                                    
"-//W3C
//DTD XHTML 1.0 Transitional//EN",
+
                                                                                    
"http
://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"},
+
                                                                                   
{"xhtml1_frameset_doctype
.tml",
+
                                                                                    
"html
",
+
                                                                                    
"-//W3C
//DTD XHTML 1.0 Frameset//EN",
+
                                                                                    
"http
://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"},
+
                                                                                   
{"html4_strict_doctype
.tml",
+
                                                                                    
"HTML
",
+
                                                                                    
"-//W3C
//DTD HTML 4.01//EN",
+
                                                                                    
"http
://www.w3.org/TR/html4/strict.dtd"},
+
                                                                                   
{"html4_transitional_doctype
.tml",
+
                                                                                    
"HTML
",
+
                                                                                    
"-//W3C
//DTD HTML 4.01 Transitional//EN",
+
                                                                                    
"http
://www.w3.org/TR/html4/loose.dtd"},
+
                                                                                   
{"html4_frameset_doctype
.tml",
+
                                                                                    
"HTML
",
+
                                                                                    
"-//W3C
//DTD HTML 4.01 Frameset//EN",
+
                                                                                    
"http
://www.w3.org/TR/html4/frameset.dtd"},
+
                                                                                   
{"system_doctype
.xml", "foo", null,
+
                                                                                    
"src
/test/resources/org/apache/tapestry/internal/services/
simple.dtd"}};
  }

  @Test(dataProvider = "doctype_token_added_correctly_data")
- public void doctype_added_correctly(String fileName, String
name, String publicId,
- String systemId) throws
Exception
+ public void doctype_added_correctly(String fileName, String
name, String publicId, String systemId) throws Exception
  {
+        System.setProperty("user.dir",
TapestryTestConstants.MODULE_BASE_DIR_PATH);
+
      List<TemplateToken> tokens = tokens(fileName);
      DTDToken t2 = get(tokens, 0);
      assertEquals(t2.getName(), name);

Modified: tapestry/tapestry5/trunk/tapestry-test/src/main/java/
org/
apache/tapestry/test/AbstractIntegrationTestSuite.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/apache/tapestry/test/AbstractIntegrationTestSuite.java?rev=603991&r1=603990&r2=603991&view=diff
=
=
=
=
=
=
=
=
=
=
=
=
=
= = ===============================================================
--- tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/
apache/
tapestry/test/AbstractIntegrationTestSuite.java (original)
+++ tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/
apache/
tapestry/test/AbstractIntegrationTestSuite.java Thu Dec 13
11:18:56
2007
@@ -184,7 +184,7 @@
  @BeforeClass(alwaysRun = true)
  public void setup() throws Exception
  {
-        _jettyRunner = new JettyRunner("/", JETTY_PORT,
_webappRoot);
+        _jettyRunner = new
JettyRunner(TapestryTestConstants.MODULE_BASE_DIR, "/",
JETTY_PORT,
_webappRoot);

      _server = new SeleniumServer();


Modified: tapestry/tapestry5/trunk/tapestry-test/src/main/java/
org/
apache/tapestry/test/JettyRunner.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/apache/tapestry/test/JettyRunner.java?rev=603991&r1=603990&r2=603991&view=diff
=
=
=
=
=
=
=
=
=
=
=
=
=
= = ===============================================================
--- tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/
apache/
tapestry/test/JettyRunner.java (original)
+++ tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/
apache/
tapestry/test/JettyRunner.java Thu Dec 13 11:18:56 2007
@@ -19,6 +19,7 @@
import org.mortbay.jetty.Server;
import org.mortbay.jetty.servlet.WebApplicationContext;

+import java.io.File;
import static java.lang.String.format;

/**
@@ -33,6 +34,8 @@

  public static final int DEFAULT_PORT = 80;

+    private final File _workingDir;
+
  private final String _contextPath;

  private final int _port;
@@ -42,23 +45,17 @@
  private final Server _jetty;

  /**
-     * Defaults the context path to "/" and the port to 80.
-     */
-    public JettyRunner(String warPath)
-    {
-        this(DEFAULT_CONTEXT_PATH, DEFAULT_PORT, warPath);
-    }
-
-    /**
   * Creates and starts a new instance of Jetty. This should be
done from a test case setup
   * method.
   *
+     * @param workingDir  current directory (used for any
relative
files)
   * @param contextPath the context path for the deployed
application
   * @param port        the port number used to access the
application
* @param warPath the path to the exploded web application
(typically, "src/main/webapp")
   */
-    public JettyRunner(String contextPath, int port, String
warPath)
+ public JettyRunner(File workingDir, String contextPath, int
port, String warPath)
  {
+        _workingDir = workingDir;
      _contextPath = contextPath;
      _port = port;
      _warPath = warPath;
@@ -99,10 +96,14 @@

  private Server createAndStart()
  {
-        System.out.printf("Starting Jetty instance on port %d
(%s
mapped to %s)\n", _port, _contextPath, _warPath);
-
      try
      {
+
+            String warPath = new File(_workingDir,
_warPath).getPath();
+            String webDefaults = new File(_workingDir, "src/
test/
conf/webdefault.xml").getPath();
+
+            System.out.printf("Starting Jetty instance on port
%d
(%s mapped to %s)\n", _port, _contextPath, warPath);
+
          Server server = new Server();

          SocketListener socketListener = new SocketListener();
@@ -112,9 +113,9 @@
          NCSARequestLog log = new NCSARequestLog();
          server.setRequestLog(log);

-            WebApplicationContext context =
server.addWebApplication(_contextPath, _warPath);
+            WebApplicationContext context =
server.addWebApplication(_contextPath, warPath);

-            context.setDefaultsDescriptor("src/test/conf/
webdefault.xml");
+            context.setDefaultsDescriptor(webDefaults);

          server.start();


Added: tapestry/tapestry5/trunk/tapestry-test/src/main/java/ org/
apache/tapestry/test/TapestryTestConstants.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/apache/tapestry/test/TapestryTestConstants.java?rev=603991&view=auto
=
=
=
=
=
=
=
=
=
=
=
=
=
= = ===============================================================
--- tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/
apache/
tapestry/test/TapestryTestConstants.java (added)
+++ tapestry/tapestry5/trunk/tapestry-test/src/main/java/org/
apache/
tapestry/test/TapestryTestConstants.java Thu Dec 13 11:18:56 2007
@@ -0,0 +1,38 @@
+// Copyright 2007 The 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.tapestry.test;
+
+import java.io.File;
+
+public class TapestryTestConstants
+{
+    /**
+     * The current working directory (i.e., property
"user.dir").
+     */
+    public static final String CURRENT_DIR_PATH =
System.getProperty("user.dir");
+    /**
+ * The Surefire plugin sets basedir but DOES NOT change the
current working directory.
+     * When building across modules, basedir changes for each
module, but user.dir does not.
+     * This value should be used when referecing local files.
Outside of surefire, the
+     * "basedir" property will not be set, and the current
working
directory will be the
+     * default.
+     */
+    public static final String MODULE_BASE_DIR_PATH =
System.getProperty("basedir", CURRENT_DIR_PATH);
+
+    /**
+     * [EMAIL PROTECTED] #MODULE_BASE_DIR_PATH} as a file.
+     */
+    public static final File MODULE_BASE_DIR = new
File(MODULE_BASE_DIR_PATH);
+}




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





--
Howard M. Lewis Ship
TWD Consulting, Inc.

Creator Apache Tapestry and Apache HiveMind

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





--
Jesse Kuhnert
Tapestry / OGNL / Dojo team member/developer

Open source based consulting work centered around
dojo/tapestry/tacos/hivemind. http://blog.opencomponentry.com




--
Jesse Kuhnert
Tapestry / OGNL / Dojo team member/developer

Open source based consulting work centered around
dojo/tapestry/tacos/hivemind. http://blog.opencomponentry.com

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





--
Howard M. Lewis Ship
TWD Consulting, Inc.

Creator Apache Tapestry and Apache HiveMind

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



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





--
Howard M. Lewis Ship
TWD Consulting, Inc.

Creator Apache Tapestry and Apache HiveMind

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



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

Reply via email to