加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell – 任务抛出错误= 7:参数列表太长

发布时间:2020-12-15 22:36:38 所属栏目:安全 来源:网络整理
导读:我有一个Ant的build.xml文件,它在我的机器(Ubuntu)上执行没有问题,但是抛出以下错误: /var/lib/hudson/workspace/myproject/build.xml:254: Error running /var/lib/hudson/tools/java_6/bin/javac compilerat org.apache.tools.ant.taskdefs.compilers.Def
我有一个Ant的build.xml文件,它在我的机器(Ubuntu)上执行没有问题,但是抛出以下错误:

/var/lib/hudson/workspace/myproject/build.xml:254: Error running /var/lib/hudson/tools/java_6/bin/javac compiler
at org.apache.tools.ant.taskdefs.compilers.DefaultCompilerAdapter.executeExternalCompile(DefaultCompilerAdapter.java:525)
(...)
Caused by: java.io.IOException: Cannot run program "/var/lib/hudson/tools/java_6/bin/javac": java.io.IOException: error=7,Argument list too long
at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
at java.lang.Runtime.exec(Runtime.java:593)
at org.apache.tools.ant.taskdefs.Execute$Java13CommandLauncher.exec(Execute.java:862)
at org.apache.tools.ant.taskdefs.Execute.launch(Execute.java:481)
at org.apache.tools.ant.taskdefs.Execute.execute(Execute.java:495)
at org.apache.tools.ant.taskdefs.compilers.DefaultCompilerAdapter.executeExternalCompile(DefaultCompilerAdapter.java:522)
... 19 more
Caused by: java.io.IOException: java.io.IOException: error=7,Argument list too long
at java.lang.UNIXProcess.<init>(UNIXProcess.java:148)
at java.lang.ProcessImpl.start(ProcessImpl.java:65)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
... 24 more

参数列表相当大,实际上包含WEB-INF / lib中的所有jar文件,长度为231650个字符!
任何建议如何解决?

解决方法

在build.xml中使用 apply作为 fileset,例如:

<?xml version="1.0" encoding="UTF-8"?>
<project default="build">
  <fileset id="myfiles" dir="${basedir}">
    <include name="**/*.java"/>
    <exclude name="**/Resources/**"/>
    <modified>
      <param name="cache.cachefile" value="${basedir}/cache.${project}.fileset.myfiles.properties"/>
    </modified>
  </fileset>
  <target name="execute-some-command">
    <apply executable="javac" dir="${basedir}" failonerror="true">
      <fileset refid="myfiles"/>
    </apply>
  </target>
</project>

默认情况下,该命令将针对每个文件执行一次.

如果你只需要使用parallel来运行命令一次,那么使用maxparallel来限制并行数量,一次最多传递这么多源文件(例如设置为1000,每次运行传递一千个文件).例如:

<apply executable="javac" parallel="true" maxparallel="1000" dir="${basedir}">
  <fileset refid="myfiles"/>
</apply>

要查看总共有多少文件,请检查缓存文件的内容(在上面的示例中查找cache.cachefile).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读