站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题【ANT问题】高手请指教

【ANT问题】高手请指教

摘要: 【ANT问题】高手请指教


关于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
-- 用property 文件代替不可以吗?

问题2
-- 先 copy 然后 delete


1没有正面解决该问题
2说的比较含糊


问题2
-- -#60;copy file=-#34;src/Test.java-#34; tofile = -#34;src/TestCopy.java-#34;/-#62; 然后 -#60;delete dir=-#34;src/Test.java-#34; /-#62;

或者 -#60;move file=-#34;src/Test.java-#34; tofile = -#34;src/TestCopy.java-#34;/-#62;


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


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


关于第二个问题,其实 ANT 的扩展能力是*很强*的,强到可以使用 JavaScript 脚本,脚本中又可以使用 Java 程序,也就是说,无所不能了 :)

提供一段脚本给你参考(需要 Ant 1.6,可能还需要一些扩展包,总之要让下面的代码跑起来并不是很容易,但跑起来以后就什么都简单了):

-#60;fileset id=-#34;setup_fs-#34; casesensitive=-#34;false-#34;-#62;
-#60;include name=-#34;*.txt-#34;/-#62;
-#60;/fileset-#62;

-#60;target name=-#34;something-#34;-#62;
-#60;script language=-#34;javascript-#34;-#62;
-#38;lt;![CDATA[
echo = project.createTask(-#34;echo-#34;);
rootDir = project.getProperty(-#34;build.root-#34;);
echo.setMessage(-#34;Processing -#34; + rootDir + -#34; ...-#34;);
echo.execute();

setup_fs.setDir(new File(rootDir));
ds = setup_fs.getDirectoryScanner(project);
srcFiles = ds.getIncludedFiles();
for (i=0; i -#60; srcFiles.length; i++) {
echo.setMessage(-#34;rename -#34; + srcFiles[i] + -#34; to .../r/n-#34;);
echo.execute();
// 这里可以做你的 rename 操作
// ……
}
]]-#38;gt;
-#60;/script-#62;
-#60;/target-#62;


对不起,上面的脚本中漏掉了关键的一句:

-#60;fileset id=-#34;setup_fs-#34; casesensitive=-#34;false-#34;-#62;
-#60;include name=-#34;*.txt-#34;/-#62;
-#60;/fileset-#62;

-#60;target name=-#34;something-#34;-#62;
-#60;script language=-#34;javascript-#34;-#62;
-#38;lt;![CDATA[
echo = project.createTask(-#34;echo-#34;);
rootDir = project.getProperty(-#34;build.root-#34;);
echo.setMessage(-#34;Processing -#34; + rootDir + -#34; ...-#34;);
echo.execute();

importClass(java.io.File); // 刚才漏掉了这句

setup_fs.setDir(new File(rootDir));
ds = setup_fs.getDirectoryScanner(project);
srcFiles = ds.getIncludedFiles();
for (i=0; i -#60; srcFiles.length; i++) {
echo.setMessage(-#34;rename -#34; + srcFiles[i] + -#34; to .../r/n-#34;);
echo.execute();
// 这里可以做你的 rename 操作
// ……
}
]]-#38;gt;
-#60;/script-#62;
-#60;/target-#62;


帮顶


thank you very much
公司同事给出下面的答案:
1。无解
2。-#60;project name=-#34;helloapp-#34; default=-#34;clean-#34; basedir=-#34;.-#34;-#62;
-#60;property file=-#34;build.properties-#34;/-#62;

-#60;target name=-#34;clean-#34;-#62;
-#60;delete dir=-#34;${dest.dir}-#34;/-#62;
-#60;/target-#62;

-#60;target name=-#34;copy-#34; depends=-#34;clean-#34;-#62;
-#60;copy todir=-#34;${dest.dir}-#34;-#62;
-#60;fileset dir=-#34;${src.dir}-#34;/-#62;
-#60;mapper type=-#34;regexp-#34; from=-#34;^(.*)1701(.*)$-#34; to=-#34;/11802/2-#34;/-#62;
-#60;/copy-#62;
-#60;/target-#62;

-#60;/project-#62;


↑返回目录
前一篇: 有关java3d的一点问题,请高手赐教 给50分!
后一篇: 请教一个正则表达式