从java程序中执行另一个java程序时指定类路径

时间:2014-01-22 16:59:11

标签: java

我正在查看某个应用程序,它有以下声明

executeProcess("java.exe -cp { 500-characters worth of stuff } someProg");

通过该程序多次执行此操作,因为此应用程序启动其他程序以执行某些任务。以前的开发人员决定只要一次又一次地复制和粘贴。

我遇到的问题是

  1. 它是多余的。该类路径被复制了十几次。我可以将它重构并移动到一个位置,这样现在很容易处理,让下一个可能需要维护这个东西的人生活更轻松。

  2. 每次程序添加新依赖项时,我都需要更新类路径。我们所有的库都存储在一个文件夹中(包含不同库的子文件夹),所以我不能只使用通配符,因为它们不会递归检查:-cp "path/to/lib/*

  3. 目前,我是唯一维护整个工具集的人,所以如果我添加一个库,我知道该怎么做才能使它工作,但总的来说这似乎是不好的做法。

    有哪些方法可以让这些流程调用更易于管理?

2 个答案:

答案 0 :(得分:1)

  1. 您可以将其添加为环境变量,然后参考,如果 这是可行的。
  2. 正如您已经建议的那样,您可以将其重构为 单一地点。

答案 1 :(得分:1)

我在使用antmaven-ant-tasks启动java应用程序而不需要手动管理类路径方面有很好的经验。当然,为了做到这一点,您必须使用maven进行构建/依赖关系管理,或者至少将您的jar安装到本地nexus实例。

最终用户需要签出一个maven项目,该项目声明一个顶级运行时依赖项列表(传递依赖项将自动解析,对于maven项目的库),其中还包含一些带有执行应用程序目标的ant脚本。 / p>

你必须弄清楚java应用程序将如何知道ant脚本的实际位置(env变量可能?),但它是一种非常优秀的手动jar和类路径管理解决方案。

这可能看起来像一项庞大的任务 - 而且有点像 - 但是透明jar版本和类路径管理的好处是如此巨大,以至于我甚至不敢记住我们在设置之前如何在我当前的公司中做到这一点。基础设施。

另外,请注意除了安装ant(使用maven-ant-tasks)和maven(配置了nexus)之外,您需要启动的所有其他内容都在SCM上。