ant中的Jwsc任务不考虑fork和编译器类型设置

时间:2014-06-10 16:34:34

标签: java ant

我一直在使用ant脚本来构建使用jwsc任务的Web服务ear文件。在一个for循环中构建太多war文件时,遇到以下错误。

  

C:\ Work \ build.xml:193:java.lang.OutOfMemoryError:PermGen space           at java.lang.ClassLoader.defineClass1(Native Method)           at java.lang.ClassLoader.defineClass(ClassLoader.java:800)           at org.apache.tools.ant.AntClassLoader.defineClassFromData(AntClassLoader.java:1136)           在org.apache.tools.ant.AntClassLoader.getClassFromStream(AntClassLoader.java:1307)           在org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1362)           在org.apache.tools.ant.AntClassLoader.findClass(AntClassLoader.java:1323)           在org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:1076)           at java.lang.ClassLoader.loadClass(ClassLoader.java:358)           在weblogic.utils.classloaders.FilteringClassLoader.findClass(FilteringClassLoader.java:101)           at weblogic.wsee.util.JAXWSClassLoaderFactory $ 1.findClass(JAXWSClassLoaderFactory.java:52)           在weblogic.utils.classloaders.FilteringClassLoader.loadClass(FilteringClassLoader.java:86)           at java.lang.ClassLoader.loadClass(ClassLoader.java:412)           at java.lang.ClassLoader.loadClass(ClassLoader.java:358)           在weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:179)           at java.lang.Class.forName0(Native Method)           在java.lang.Class.forName(Class.java:270)           at weblogic.descriptor.internal.DescriptorImpl.createRootBean(DescriptorImpl.java:386)           at weblogic.descriptor.BasicDescriptorManager.createDescriptorRoot(BasicDescriptorManager.java:396)           在weblogic.wsee.tools.jws.war.WebAppProcessor.getWebAppBean(WebAppProcessor.java:98)           在weblogic.wsee.tools.jws.war.WebAppProcessor.process(WebAppProcessor.java:47)           在weblogic.wsee.tools.jws.process.CompositeProcessor.process(CompositeProcessor.java:47)           在weblogic.wsee.tools.jws.build.JwsCompiler.buildWebServices(JwsCompiler.java:532)           在weblogic.wsee.tools.jws.build.JwsCompiler.compile(JwsCompiler.java:493)           在weblogic.wsee.tools.anttasks.JwsModule.generate(JwsModule.java:379)           在weblogic.wsee.tools.anttasks.JwsModule.build(JwsModule.java:256)           在weblogic.wsee.tools.anttasks.JwscTask.execute(JwscTask.java:184)           在org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)           at sun.reflect.GeneratedMethodAccessor4.invoke(未知来源)           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)           at java.lang.reflect.Method.invoke(Method.java:606)           在org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)           在org.apache.tools.ant.Task.perform(Task.java:348)

根据某些网站上的建议,我在任务中使用了fork设置以及memoryinitialsize和memorymaximumsize。但我仍然遇到错误,因为jwsc没有考虑fork选项。构建5个war文件后,循环才会失败。从上一个循环输出,我可以从cmd抓取这个片段。

 [jwsc] Parsing source files
 [jwsc] Parsing source files
 [jwsc] 1 JWS files being processed for module TESTService
 [jwsc] JWS: C:\Work\Build\WEB-INF\classes\TESTServiceImpl.java Validated.
 [jwsc] Processing 1 JAX-WS web services...
 [jwsc] Since compiler setting isn't classic or modern, ignoring fork setting.
 [jwsc] Compiling 1 source file to C:\Users\pmraju\AppData\Local\Temp\_h40kgy
 [jwsc] Since compiler setting isn't classic or modern, ignoring fork setting.

这是我使用jwsc

的蚂蚁示例代码
        <taskdef name="jwsc" classname="weblogic.wsee.tools.anttasks.JwscTask">
            <classpath refid="classpath"/>
        </taskdef>

        <jwsc fork="yes" compiler="modern" srcdir="${destdir}/Build/WEB-INF/classes" destdir="${destdir}/Build" memoryinitialsize="1024m" memorymaximumsize="2048m" optimize="on" includeantruntime="false">
            <module contextpath="/${service}" name="${service}" explode="false">
                <jws file="${service}Impl.java" compiledwsdl="${destdir}/Build/${service}.jar" type="JAXWS" />
            </module>
            <classpath refid="classpath"/>
        </jwsc>

从上面可以看出,即使我提供 fork 编译器属性,jwsc输出状态 [jwsc]因为编译器设置不是&#39 ;经典或现代,忽略前叉设置。

任何帮助都将不胜感激。

编辑: 通过在调用ant之前在cmd中运行命令set ANT_OPTS=-Xms256m -Xmx1024m -XX:MaxPermSize=1024m,可以在没有 java.lang.OutOfMemoryError:PermGen 错误的情况下继续执行。我仍然无法理解为什么在jwsc任务中不考虑编译器设置,希望有人会想。

0 个答案:

没有答案