关于ANT的两个问题,希望高手能够指教
1.通过ANT能否设置环境变量?该变量将在JAVA代码中读取?
  例如:通过ANT设置环境变量key=value ,然后ANT编译打包发布运行JAVA程序,该JAVA程序中用读取并利用key的值即value?2.如何通过ANT把一个文件夹下的的文件名局部改名?
  例如:一个文件夹下有三个文件A123B.txt、B123C.txt、C123D.txt 如何能够将这三个文件重命名为A321B.txt、B321C.txt、C321D.txt?

解决方案 »

  1.   

    问题1
    -- 用property 文件代替不可以吗?问题2
    -- 先 copy 然后 delete
      

  2.   

    问题2
    -- <copy file="src/Test.java" tofile = "src/TestCopy.java"/>  然后  <delete dir="src/Test.java" />或者  <move file="src/Test.java" tofile = "src/TestCopy.java"/>
      

  3.   

    问题1,ant只是一个打包等做一些预处理的工具,你程序运行时和ant无关,所以属性的设置和运行时是无关的,也就是说,如果不用属性文件等保存,你运行时无法读到ant设置的东西
    问题2,这个好像只能自己编程改吧,没用过它的批量改名,你试一下用ant运行dos命令ren a*.abc b*.abc看看,不知道好不好用,没试过
      

  4.   

    关于第一个问题,楼主没说清楚“运行 JAVA 程序”是由 ANT 来启动的吗?如果是,当然就简单了,可以加个启动参数 -D 就解决了。如果不是,那就看你的 JAVA 程序能从什么地方取属性值了(启动参数、环境变量、配置文件……),本质上跟 ANT 是无关的,但可以让 ANT 替你生成个配置文件什么的。
      

  5.   

    关于第二个问题,其实 ANT 的扩展能力是*很强*的,强到可以使用 JavaScript 脚本,脚本中又可以使用 Java 程序,也就是说,无所不能了  :)提供一段脚本给你参考(需要 Ant 1.6,可能还需要一些扩展包,总之要让下面的代码跑起来并不是很容易,但跑起来以后就什么都简单了):    <fileset id="setup_fs" casesensitive="false">
            <include name="*.txt"/>
        </fileset>    <target name="something">
            <script language="javascript">
            <![CDATA[
                echo = project.createTask("echo");
                rootDir = project.getProperty("build.root");
                echo.setMessage("Processing " + rootDir + " ...");
                echo.execute();            setup_fs.setDir(new File(rootDir));
                ds = setup_fs.getDirectoryScanner(project);
                srcFiles = ds.getIncludedFiles();
                for (i=0; i < srcFiles.length; i++) {
                    echo.setMessage("rename " + srcFiles[i] + " to ...\r\n");
                    echo.execute();
                    // 这里可以做你的 rename 操作
                    // ……
                }
            ]]>
            </script>
        </target>
      

  6.   

    对不起,上面的脚本中漏掉了关键的一句:    <fileset id="setup_fs" casesensitive="false">
            <include name="*.txt"/>
        </fileset>    <target name="something">
            <script language="javascript">
            <![CDATA[
                echo = project.createTask("echo");
                rootDir = project.getProperty("build.root");
                echo.setMessage("Processing " + rootDir + " ...");
                echo.execute();            importClass(java.io.File); // 刚才漏掉了这句            setup_fs.setDir(new File(rootDir));
                ds = setup_fs.getDirectoryScanner(project);
                srcFiles = ds.getIncludedFiles();
                for (i=0; i < srcFiles.length; i++) {
                    echo.setMessage("rename " + srcFiles[i] + " to ...\r\n");
                    echo.execute();
                    // 这里可以做你的 rename 操作
                    // ……
                }
            ]]>
            </script>
        </target>
      

  7.   

    thank you very much 
    公司同事给出下面的答案:
    1。无解
    2。<project name="helloapp" default="clean" basedir=".">
    <property file="build.properties"/>

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

    <target name="copy" depends="clean">
      <copy todir="${dest.dir}">
        <fileset dir="${src.dir}"/>
       <mapper type="regexp" from="^(.*)1701(.*)$" to="\11802\2"/>
      </copy>
    </target></project>