You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bo...@apache.org on 2003/11/21 14:53:57 UTC

cvs commit: ant/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet AbstractBuildTask.java MSBuildTask.java NAntTask.java antlib.xml

bodewig     2003/11/21 05:53:57

  Modified:    proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet
                        antlib.xml
  Added:       proposal/sandbox/dotnet/src/etc/testcases msbuild.xml
                        nant.xml
               proposal/sandbox/dotnet/src/etc/testcases/src msbuild.proj
                        nant.build
               proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet
                        AbstractBuildTask.java MSBuildTask.java
                        NAntTask.java
  Log:
  NAnt and MSBuild tasks
  
  Revision  Changes    Path
  1.1                  ant/proposal/sandbox/dotnet/src/etc/testcases/msbuild.xml
  
  Index: msbuild.xml
  ===================================================================
  <project name="msbuild" basedir="." default="echo"
    xmlns:dn="antlib:org.apache.tools.ant.taskdefs.optional.dotnet">
  
    <taskdef 
      uri="antlib:org.apache.tools.ant.taskdefs.optional.dotnet"
      resource="org/apache/tools/ant/taskdefs/optional/dotnet/antlib.xml">
      <classpath>
        <pathelement location="../../../build/lib/dotnet.jar"/>
      </classpath>
    </taskdef>
  
    <target name="echo">
      <msbuild 
        buildfile="src/msbuild.proj" 
        xmlns="antlib:org.apache.tools.ant.taskdefs.optional.dotnet"
        >
        <target name="echo"/>
        <property name="foo" value="bar"/>
      </msbuild>
    </target>
  </project>
  
  
  1.1                  ant/proposal/sandbox/dotnet/src/etc/testcases/nant.xml
  
  Index: nant.xml
  ===================================================================
  <project name="nant" basedir="." default="echo"
    xmlns:dn="antlib:org.apache.tools.ant.taskdefs.optional.dotnet">
  
    <taskdef 
      uri="antlib:org.apache.tools.ant.taskdefs.optional.dotnet"
      resource="org/apache/tools/ant/taskdefs/optional/dotnet/antlib.xml">
      <classpath>
        <pathelement location="../../../build/lib/dotnet.jar"/>
      </classpath>
    </taskdef>
  
    <target name="echo">
      <nant 
        buildfile="src/nant.build" 
        xmlns="antlib:org.apache.tools.ant.taskdefs.optional.dotnet"
        >
        <target name="echo"/>
        <property name="foo" value="bar"/>
      </nant>
    </target>
  </project>
  
  
  1.1                  ant/proposal/sandbox/dotnet/src/etc/testcases/src/msbuild.proj
  
  Index: msbuild.proj
  ===================================================================
  <Project DefaultTargets="empty">
  
    <Target Name="empty"/>
  
    <Target Name="echo">
      <Task Name="Echo" Message="foo is ${foo}"/>
    </Target>
  </Project>
  
  
  
  1.1                  ant/proposal/sandbox/dotnet/src/etc/testcases/src/nant.build
  
  Index: nant.build
  ===================================================================
  <project basedir="." default="empty">
  
    <target name="empty"/>
  
    <target name="echo">
      <echo message="foo is ${foo}"/>
    </target>
  </project>
  
  
  
  1.2       +8 -0      ant/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/antlib.xml
  
  Index: antlib.xml
  ===================================================================
  RCS file: /home/cvs/ant/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/antlib.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- antlib.xml	21 Nov 2003 12:39:31 -0000	1.1
  +++ antlib.xml	21 Nov 2003 13:53:57 -0000	1.2
  @@ -3,4 +3,12 @@
       name="dotnetexec"
       classname="org.apache.tools.ant.taskdefs.optional.dotnet.DotNetExecTask"
       />
  +  <taskdef
  +    name="msbuild"
  +    classname="org.apache.tools.ant.taskdefs.optional.dotnet.MSBuildTask"
  +    />
  +  <taskdef
  +    name="nant"
  +    classname="org.apache.tools.ant.taskdefs.optional.dotnet.NAntTask"
  +    />
   </antlib>
  
  
  
  1.1                  ant/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/AbstractBuildTask.java
  
  Index: AbstractBuildTask.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "Ant" and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.tools.ant.taskdefs.optional.dotnet;
  
  import org.apache.tools.ant.Task;
  
  import java.io.File;
  import java.util.ArrayList;
  import java.util.List;
  
  /**
   * Base class for NAntTask and MSBuildTask.
   */
  public abstract class AbstractBuildTask extends Task {
  
      /**
       * The buildfile to invoke the build tool for.
       */
      private File buildFile;
  
      /**
       * The targets to execute.
       */
      private List targets = new ArrayList();
  
      /**
       * Properties to set.
       */
      private List properties = new ArrayList(1);
  
      /**
       * Empty constructor.
       */
      protected AbstractBuildTask() {
      }
  
      /**
       * Sets the name of the build file.
       */
      public final void setBuildfile(File f) {
          buildFile = f;
      }
  
      /**
       * A target.
       */
      public static class Target {
          private String name;
  
          public void setName(String name) {
              this.name = name;
          }
  
          public String getName() {
              return name;
          }
  
      }
  
      /**
       * A target to execute.
       */
      public final void addTarget(Target t) {
          targets.add(t);
      }
  
      /**
       * A property.
       */
      // XXX, could have reused Property or Environment.Variable 
      //      - not decided so far
      public static class Property {
          private String name;
          private String value;
  
          public void setName(String name) {
              this.name = name;
          }
  
          public String getName() {
              return name;
          }
  
          public void setValue(String value) {
              this.value = value;
          }
  
          public String getValue() {
              return value;
          }
      }
  
      /**
       * A target to execute.
       */
      public final void addProperty(Property t) {
          properties.add(t);
      }
  
      /**
       * Must return the executable.
       *
       * @return must not return null
       */
      protected abstract String getExecutable();
  
      /**
       * Must return buildfile argument(s).
       *
       * @param buildFile the absolute File for the buildfile or null if
       * the user didn't specify a buildfile.
       *
       * @return must not return null
       */
      protected abstract String[] getBuildfileArguments(File buildFile);
  
      /**
       * Must return target argument(s).
       *
       * @return must not return null
       */
      protected abstract String[] getTargetArguments(List targets);
  
      /**
       * Must return property argument(s).
       *
       * @return must not return null
       */
      protected abstract String[] getPropertyArguments(List properties);
  
      /**
       * Perform the build.
       */
      public void execute() {
          DotNetExecTask exec = new DotNetExecTask();
          exec.setProject(getProject());
          exec.setExecutable(getExecutable());
          exec.setTaskName(getTaskName());
          String[] args = getPropertyArguments(properties);
          for (int i = 0; i < args.length; i++) {
              exec.createArg().setValue(args[i]);
          }
          args = getTargetArguments(targets);
          for (int i = 0; i < args.length; i++) {
              exec.createArg().setValue(args[i]);
          }
          args = getBuildfileArguments(buildFile);
          for (int i = 0; i < args.length; i++) {
              exec.createArg().setValue(args[i]);
          }
          exec.execute();
      }
  }
  
  
  
  1.1                  ant/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/MSBuildTask.java
  
  Index: MSBuildTask.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "Ant" and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.tools.ant.taskdefs.optional.dotnet;
  
  import java.io.File;
  import java.util.Iterator;
  import java.util.ArrayList;
  import java.util.List;
  
  /**
   * Runs a MSBuild build process.
   */
  public class MSBuildTask extends AbstractBuildTask {
  
      public MSBuildTask() {
          super();
      }
  
      protected String getExecutable() {
          return "MSBuild.exe";
      }
  
      protected String[] getBuildfileArguments(File buildFile) {
          if (buildFile != null) {
              return new String[] {
                  buildFile.getAbsolutePath()
              };
          } else {
              return new String[0];
          }
      }
  
      protected String[] getTargetArguments(List targets) {
          if (targets.size() > 0) {
              StringBuffer sb = new StringBuffer("/targets:");
              Iterator iter = targets.iterator();
              boolean first = true;
              while (iter.hasNext()) {
                  AbstractBuildTask.Target t = 
                      (AbstractBuildTask.Target) iter.next();
                  if (!first) {
                      sb.append(";");
                  }
                  sb.append(t.getName());
              }
              return new String[]{sb.toString()};
          } else {
              return new String[0];
          }
      }
  
      protected String[] getPropertyArguments(List properties) {
          if (properties.size() > 0) {
              StringBuffer sb = new StringBuffer("/property:");
              Iterator iter = properties.iterator();
              boolean first = true;
              while (iter.hasNext()) {
                  AbstractBuildTask.Property p = 
                      (AbstractBuildTask.Property) iter.next();
                  if (!first) {
                      sb.append(";");
                  }
                  sb.append(p.getName()).append("=").append(p.getValue());
              }
              return new String[]{sb.toString()};
          } else {
              return new String[0];
          }
      }
  }
  
  
  
  1.1                  ant/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/NAntTask.java
  
  Index: NAntTask.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "Ant" and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.tools.ant.taskdefs.optional.dotnet;
  
  import java.io.File;
  import java.util.Iterator;
  import java.util.ArrayList;
  import java.util.List;
  
  /**
   * Runs a NAnt build process.
   */
  public class NAntTask extends AbstractBuildTask {
  
      public NAntTask() {
          super();
      }
  
      protected String getExecutable() {
          return "NAnt.exe";
      }
  
      protected String[] getBuildfileArguments(File buildFile) {
          if (buildFile != null) {
              return new String[] {
                  "-buildfile:" + buildFile.getAbsolutePath()
              };
          } else {
              return new String[0];
          }
      }
  
      protected String[] getTargetArguments(List targets) {
          ArrayList al = new ArrayList(targets.size());
          Iterator iter = targets.iterator();
          while (iter.hasNext()) {
              AbstractBuildTask.Target t = (AbstractBuildTask.Target) iter.next();
              al.add(t.getName());
          }
          return (String[]) al.toArray(new String[al.size()]);
      }
  
      protected String[] getPropertyArguments(List properties) {
          ArrayList al = new ArrayList(properties.size());
          Iterator iter = properties.iterator();
          while (iter.hasNext()) {
              AbstractBuildTask.Property p = 
                  (AbstractBuildTask.Property) iter.next();
              al.add("-D:" + p.getName() + "=" + p.getValue());
          }
          return (String[]) al.toArray(new String[al.size()]);
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org


Re: cvs commit: ant/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet AbstractBuildTask.java MSBuildTask.java NAntTask.java antlib.xml

Posted by Stefan Bodewig <bo...@apache.org>.
On 21 Nov 2003, <bo...@apache.org> wrote:

>   NAnt and MSBuild tasks

Not very complete so far - and they don't work very well either 8-)

<nant> should work on Windows, I can only get it to work on Linux
using Mono if I install NAnt in /usr/local/bin - I'm probably doing
something wrong.

<msbuild> has been created by just reading the docs as I don't have
access to it.  The example msbuild file is probably going to fail as
there doesn't seem to be an <echo> equivalent in MSBuild (and all
other tasks have side effects AFAICS).

I plan to reuse DD's "create a DOM element by using
DynamicConfigurator" code to support nesting build file snippets in
those task.  Something like

<nant>
  <build>
    <nunit2>
      <test assemblyname="MyProject.Tests.dll"/>
    </nunit2>
  </build>
</nant>

to run NAnt's <nunit2> task.

Dominique, I'm not sure whether your code has been intended as a
contribution to Ant - I can alternatively rewrite it from scratch.

Stefan

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org