我使用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
任何人都可以帮助我吗?
答案 0 :(得分:1)
Ant是矩阵依赖语言,而Shell脚本是过程语言。 矩阵依赖语言的目的是允许构建描述确定执行顺序。程序语言允许您定义订单。
您可以将一些脚本嵌入Ant构建脚本(通常使用JavaScript),但这主要是为了定义自定义任务。自1.5版本问世以来,我一直在使用Ant,而且我这样做了不到半打。我最后一次将过滤器任务定义为小写文件名,因为它们是为WAR复制的。 (不要问为什么这些文件首先没有正确包装)。
你到底想要完成什么?这是构建过程的一部分吗?如果是,为什么不简单地使用已经定义的Ant任务来做到这一点?您是否尝试将Ant用作过程脚本工具?如果是这样,你就要求受到很多伤害。蚂蚁不是为此而做的。
请向我们提供有关您情况的更多信息。你到底想要完成什么?你提到我想把代码放在一个地方。。你知道功能吗?您可以在BASH中定义函数,并通过.bashrc
文件访问它们,就好像它们是shell脚本一样。您的代码将以一个地方的方式存在。
然而,在我们知道您想要做什么之前,很难弄清楚建议您做什么。
答案 1 :(得分: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
可以从here
下载groovy jar<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>
src/file1.txt
src/file2.txt
src/file3.txt
src/file4.txt
src/file5.txt