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" | name="dotnetexec" | ||||
classname="org.apache.tools.ant.taskdefs.optional.dotnet.DotNetExecTask" | 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> | </antlib> |