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