关于the command line is too long的错误

在工作中遇到了一个问题:
我在JAVA代码中调用一个执行脚本,比如xx.sh

String command = "sh xx.sh -w -k -c a.jar;b.jar......xxxx.jar myclass" 
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(command);

因为我在-c中加的jar包太多,所以在在执行的时候会报命令过长的错误:the command is too long.
试用了很多方法,费了好长时间。特写下来,以便查阅。
我的JAVA代码是在开发ECLIPSE插件的时候用到的。所以有些基于ECLIPSE的解决方法。
1 这个sh中最终也是调用了一个java类,所以我尝试了直接调用这个java类。两个途径:
一种是用classloader机制,利用反射,拿到这个java类,然后load起来,调用它的main方法。在我的java类里把那些长参数设进去。
可以解决,但工作量较大。需要去解析sh文件,拿到里面引用的jar,要不然sh里面的java类起不来。
一种是用eclipse的launch configuration,同样的问题。
2 用processbuilder
       ProcessBuilder builder = new ProcessBuilder(command);
builder.directory(new File(commandLocation));
Process proc = builder.start();

这个command是个list。
这种方法不行。还是太长。这是别人告诉的一个方法。
3 创建一个jar,把这些jar都加到它的menifest的class-path里,然后-c 后面只加这个jar就行了。恩,我就是这么解决的。
4 拿到这个sh,把我的所有jar都加到系统的classpath里面,或者创建一个新的sh去作这个工作。然后去跑它就行了。不过用这种方法需要有一个前提,就是sh里的那个Java类,它去load我给它的java类时,用的是classloader机制,这个classloader需要继承它的父classloader的classpath.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值