2012-08-17 58 views
1

我想写一个简单的ANT脚本将文件/文件夹复制到指定的目录。例如,通过运行:ANT脚本移动指定的文件

ant deploy src/classes/myClass.class 

文件 “myClass.class” 是从 “SRC /类/” 到 “部署/ SRC /类/” 复制。此外,这应为一个指定的文件夹,以便运行工作:

ant deploy src/classes/ 

如果所有文件的src /类复制”到‘部署/ src目录/班’此外,目标文件夹将不存在前脚本然因此需要首先“触摸”...

从环顾复制文件不是真的问题,但我不知道如何得到这个与参数(如上所述)...

有没有人知道这可以如何激活?

回答

0

为什么不'你在shell脚本中使用老式的cp而不是蚂蚁脚本? cp -r将允许你递归地复制目录...

0

要以蚂蚁从控制台需要使用蚂蚁提供属性值,你可以用-D前缀通过他们,所以你必须调用作为构建: 蚂蚁-Ddst = deploy -Dsrc = src/classes/ (也建议切换src和dst位置 - 如cp命令) 在build.xml中,您可以访问${dst}${src}这些属性。

我这是不是你,那么你需要做蚂蚁的新入口点类的蚂蚁,并呼吁

ant -main <YourClass> arg2 arg3 

例西装是here(第一个例子)

1

Ant是不是一种计算机语言。这是一种矩阵依赖语言。

区别很微妙:编程语言更加灵活,但您必须告诉它每一步和每一步。矩阵依赖语言计算出执行顺序。

它可能是一个微妙但重要的区别。在标准的Ant中,像while循环,for循环和if/then语句这样的基本控制结构缺失。

听起来你想用标准的计算机语言来做什么会容易得多。也许Python,Perl,甚至是一个shell脚本。

在命令行键入“ant -help”,你会发现没有真正的方法可以像使用常规编程语言一样将参数传递到Ant中。相反,你可以在命令行上性能蚂蚁就可以使用:

$ant -Ddeploy.classfile=src/classes/myClass.class deploy 

的-D允许您设置一个属性调用部署任务时。然后,您可以使用deploy.classfile属性在您的目标中使用它在Ant 任务中。我会粗略估计,即使是这样一个简单的构建。xml文件需要大约20到30行。特别是你会给它一个类文件或一个目录,你必须以不同的方式处理它们,这需要第二个目标。不仅如此,而且很难理解工作流程。

这是一个想法,为什么不在<javac>任务中使用destdir目标,首先在deploy目录中创建所需的*.class文件。 Ant的主要做法之一是将您构建的文件从存储库中的文件中分离出来。它使清理变得非常容易。另外,<javac>任务知道不要为尚未更改的源文件重建类文件。

<target name="compile" 
    description="Compile your source files"> 

    <property name="main.destdir" value="${basedir}/deploy/classes"/> 
    <property name="main.srcdir" value="${basedir}/src"/> 

    <path id="main.classpath"> 
     <fileset dir="${basedir}/lib/> 
    </path> 

    <javac srcdir="${main.srcdir}" 
     destdir="${main.destdir}" 
     classpathref="main.classpath"/> 
</target> 

现在,您不必将文件从源目录复制到您的部署目录。更好的是,<javac>不会重新编译未更改的源文件。让Ant完成它所设计的任务,以及其他任何事情,使用一种好的脚本语言。

1

如果你没有改变你的输入命令行字符串的问题,这是应该工作的东西。

<?xml version="1.0" encoding="UTF-8" ?> 
<project name="Deploy" default="copy"> 

    <!-- 
     This script is called in the following manner: 

     ant deploy -Dsource.dir=src/classes  (to copy the entire directory) 
     ant deploy -Dsource.dir=src/classes -Dsource.module=myClass.class 
               (to copy one class) 

    --> 

    <!-- <property name="source.dir" value="src/com/ggl/unzip" /> --> 
    <!-- <property name="source.module" value="myClass.class" /> --> 

    <target name="copy"> 
     <condition property="source.module.text" value="all files"> 
      <not> 
       <isset property="source.module" /> 
      </not> 
     </condition> 

     <condition property="source.module" value="**.*"> 
      <not> 
       <isset property="source.module" /> 
      </not> 
     </condition> 

     <property name="source.module.text" value="${source.module}" /> 

     <echo>Copying ${source.module.text} from ${source.dir} to deploy/${source.dir}</echo> 

     <copy todir="deploy/${source.dir}" overwrite="true" verbose="true"> 
      <fileset dir="${source.dir}"> 
       <include name="${source.module}" /> 
      </fileset> 
     </copy> 
    </target> 

</project>