Browse Source

NAnt and MSBuild tasks

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275662 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 21 years ago
parent
commit
1b33bb13e0
8 changed files with 498 additions and 0 deletions
  1. +21
    -0
      proposal/sandbox/dotnet/src/etc/testcases/msbuild.xml
  2. +21
    -0
      proposal/sandbox/dotnet/src/etc/testcases/nant.xml
  3. +8
    -0
      proposal/sandbox/dotnet/src/etc/testcases/src/msbuild.proj
  4. +8
    -0
      proposal/sandbox/dotnet/src/etc/testcases/src/nant.build
  5. +205
    -0
      proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/AbstractBuildTask.java
  6. +122
    -0
      proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/MSBuildTask.java
  7. +105
    -0
      proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/NAntTask.java
  8. +8
    -0
      proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/antlib.xml

+ 21
- 0
proposal/sandbox/dotnet/src/etc/testcases/msbuild.xml View File

@@ -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>

+ 21
- 0
proposal/sandbox/dotnet/src/etc/testcases/nant.xml View File

@@ -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>

+ 8
- 0
proposal/sandbox/dotnet/src/etc/testcases/src/msbuild.proj View File

@@ -0,0 +1,8 @@
<Project DefaultTargets="empty">

<Target Name="empty"/>

<Target Name="echo">
<Task Name="Echo" Message="foo is ${foo}"/>
</Target>
</Project>

+ 8
- 0
proposal/sandbox/dotnet/src/etc/testcases/src/nant.build View File

@@ -0,0 +1,8 @@
<project basedir="." default="empty">

<target name="empty"/>

<target name="echo">
<echo message="foo is ${foo}"/>
</target>
</project>

+ 205
- 0
proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/AbstractBuildTask.java View File

@@ -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();
}
}

+ 122
- 0
proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/MSBuildTask.java View File

@@ -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];
}
}
}

+ 105
- 0
proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/NAntTask.java View File

@@ -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()]);
}
}

+ 8
- 0
proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/antlib.xml View File

@@ -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>

Loading…
Cancel
Save