git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275662 13f79535-47bb-0310-9956-ffa450edef68master
@@ -0,0 +1,21 @@ | |||
<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> |
@@ -0,0 +1,21 @@ | |||
<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> |
@@ -0,0 +1,8 @@ | |||
<Project DefaultTargets="empty"> | |||
<Target Name="empty"/> | |||
<Target Name="echo"> | |||
<Task Name="Echo" Message="foo is ${foo}"/> | |||
</Target> | |||
</Project> |
@@ -0,0 +1,8 @@ | |||
<project basedir="." default="empty"> | |||
<target name="empty"/> | |||
<target name="echo"> | |||
<echo message="foo is ${foo}"/> | |||
</target> | |||
</project> |
@@ -0,0 +1,205 @@ | |||
/* | |||
* 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(); | |||
} | |||
} |
@@ -0,0 +1,122 @@ | |||
/* | |||
* 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]; | |||
} | |||
} | |||
} |
@@ -0,0 +1,105 @@ | |||
/* | |||
* 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()]); | |||
} | |||
} |
@@ -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> |