-1

我使用 bash 脚本 ant Ant。我想执行 bash 脚本内联 build.xml 文件。我的 bash 脚本在这里

for f in `cat lg-media-file-list`
do
    subdir=`dirname $f`
    mkdir -p ${destination}$subdir
    cp $f ${destination}${subdir}
done

有谁能够帮我?

4

2 回答 2

1

不支持 Bash 作为内联脚本,主要是因为它不是用 Java 实现的。看

我已将您的示例重新编码为groovy

new File("lg-media-file-list").eachLine {
    def srcFile = new File(it)
    def destDir = new File(properties.destination, srcFile.parent)

    ant.copy(file:srcFile, todir:destDir)
}

以下示例显示了如何将其集成到您的 build.xml

例子

├── build.xml
├── lg-media-file-list
├── lib
│   └── groovy-all-2.1.6.jar
├── src
│   ├── file1.txt
│   ├── file2.txt
│   ├── file3.txt
│   ├── file4.txt
│   └── file5.txt
└── target
    └── src
        ├── file1.txt
        ├── file2.txt
        ├── file3.txt
        ├── file4.txt
        └── file5.txt

groovy jar 可以从这里下载

构建.xml

<project name="demo" default="copy-files">

   <property name="destination" location="target"/>

   <path id="build.path">
      <pathelement location="lib/groovy-all-2.1.6.jar"/>
   </path>

   <target name="copy-files">
      <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="build.path"/>

      <groovy>
         new File("lg-media-file-list").eachLine {
            def srcFile = new File(it)
            def destDir = new File(properties.destination, srcFile.parent)

            ant.copy(file:srcFile, todir:destDir)
         }
      </groovy>
   </target>

   <target name="clean">
      <delete dir="${destination}"/>
   </target>

</project>

lg-媒体文件列表

src/file1.txt
src/file2.txt
src/file3.txt
src/file4.txt
src/file5.txt
于 2013-08-09T23:18:27.177 回答
1

Ant 是一种矩阵依赖语言,而 Shell 脚本是过程语言。矩阵依赖语言的目的是允许构建描述确定执行顺序。程序语言允许您定义订单。

您可以在 Ant 构建脚本中嵌入一些脚本(通常使用 JavaScript),但这主要是为了定义自定义任务。自从 1.5 版发布以来,我就一直在使用 Ant,而我这样做的次数还不到 1/2 次。上次我将过滤任务定义为小写文件名,因为它们被复制到 WAR 中。(不要问为什么文件的大小写不正确)。

你到底想完成什么?这是构建过程的一部分吗?如果是的话,为什么不简单地使用已经定义的可以做到这一点的 Ant 任务呢?您是否尝试将 Ant 用作过程脚本工具?如果是这样,你是在要求很大的伤害。蚂蚁不是为此而生的。

请向我们提供有关您的情况的更多信息。你到底想完成什么?你提到我想把代码放在一个地方。. 你知道函数吗?您可以在 BASH 中定义函数并通过您的.bashrc文件来访问它们,就像它们是 shell 脚本一样。这样,您的代码将在一个地方

但是,在我们知道您想做什么之前,很难弄清楚该建议您做什么。

于 2013-08-09T14:21:21.877 回答