【发布时间】:2012-03-13 09:02:10
【问题描述】:
我需要在Runtime.getRuntime().exec()中运行两行,这两条:
cd %CMS_HOME%
ant deploy
现在可以制作.bat文件了,但是我觉得两行都没用,
一定更容易!有人知道吗?
【问题讨论】:
标签: java shell runtime.exec
我需要在Runtime.getRuntime().exec()中运行两行,这两条:
cd %CMS_HOME%
ant deploy
现在可以制作.bat文件了,但是我觉得两行都没用,
一定更容易!有人知道吗?
【问题讨论】:
标签: java shell runtime.exec
调用任务programmatically from Java:
File buildFile = new File("build.xml");
Project p = new Project();
p.setUserProperty("ant.file", buildFile.getAbsolutePath());
p.init();
ProjectHelper helper = ProjectHelper.getProjectHelper();
p.addReference("ant.projectHelper", helper);
helper.parse(p, buildFile);
p.executeTarget(p.getDefaultTarget());
【讨论】:
将其放入.bat 文件中。这不是没用的;这就是 Runtime.exec 的工作方式。
您应该考虑使用ProcessBuilder 类而不是Runtime.exec()。它是在 JDK 5 中作为 Runtime.exec() 的继承者引入的。
【讨论】:
您可以使用Runtime.exec(String command, String[] envp, File dir) 在dir 文件夹中执行ant deploy。
附:使用来自另一个 java 程序的批处理文件执行 ant,这是一个 java 程序,这有点奇怪。您可以将其作为 java 类运行...
【讨论】:
当您运行外部应用程序时,您必须根据目标操作系统的规则进行操作。
在您的情况下,您想在 Windows 上运行 2 个命令,所以您必须说:
cd TheDir && ant
首先在命令行中尝试。然后让它工作运行这个带有前缀cmd from java:的命令:
cmd /c cd TheDir && ant
您也可以使用纯 Java 解决方案。使用ProcessBuilder 而不是Runtime.exec()。 ProcessBuilder 允许您设置工作目录,因此您可以直接运行ant。
最后一点。实际上,您根本不必运行外部进程。 Ant 是 Java 应用程序。您可以直接从您的应用程序运行其main() 方法并指定所有需要的参数。
【讨论】:
cmd 的版本可能应该包含引号:cmd /c "cd TheDir && ant",否则&& 更有可能将整个cmd /c cd TheDir 部分与ant 分隔,而不仅仅是cd TheDir。 编辑:刚刚测试过,是的,这就是真正发生的事情,所以双引号确实是必要的。