- 浏览: 430995 次
- 性别:
- 来自: 深圳
最新评论
-
ahong520:
有问题,校验http://a.a-a.html?a=d 为fa ...
JS之正则表达式验证URL -
李_俊:
汗哒哒,原路径在这里:http://www.iteye.com ...
JAVA6动态编译的问题 -
wcl694216530:
...
Java压缩zip文件 -
dingran:
找到原因了,用2.2的模拟器就可以了,4.0的有问题。
向android模拟器中复制文件报out of memory错误解决 -
dingran:
哎,我也遇到了这个问题啊,很蛋疼啊。错误如下:emulator ...
向android模拟器中复制文件报out of memory错误解决
JAVA6动态编译的问题
在使用JAVA6动态编译时遇到的一个问题,动态编译方法已经写就。通过main方法调用的动态编译时,编译通过,并可以使用编译生成的类。但是,在Tomcat下调用同样的方法进行动态编译时,编译无法通过。其原因是找不到对应的包。因为动态生成的类中import了其他的一些类。我猜是tomcat的某些加载机制影响了动态编译过程,导致动态编译找不引用的类。请问各位,是否有方法解决?
问题补充:
补充代码:
参数 files是一个JavaFile类型的数组,其中包含了Java类的源文件
- public static Class[] complie(JavaFile[] files) throws Exception
- {
- JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
- //ClassLoader clsLoader=ToolProvider.getSystemToolClassLoader();
- DiagnosticCollector<javafileobject> diagnostics = new DiagnosticCollector<javafileobject>(); </javafileobject></javafileobject>
- MemoryFileManager filemanage = new MemoryFileManager(compiler
- .getStandardFileManager(diagnostics, null, null));
- //MemoryFileManager filemanage = new MemoryFileManager(compiler
- //.getStandardFileManager(diagnostics, null, null));
- //Log.info("Location/t"+filemanage.)
- ArrayList<javafileobject> clsFiles=new ArrayList<javafileobject>(); </javafileobject></javafileobject>
- for(JavaFile file:files)
- {
- JavaFileObject clsfile = MemoryFileManager.makeSource(file
- .getFileName(), file.toString());
- clsFiles.add(clsfile);
- Log.info("compile:"+file.getFileName()+"/t"+clsfile.getName()+"/t"+clsfile.getKind()+"/t"+clsfile.toUri());
- }
- Iterable extends JavaFileObject> compilationUnits=clsFiles;
- JavaCompiler.CompilationTask task = compiler.getTask(null, filemanage,
- diagnostics, null, options.getClassNames(), compilationUnits);
- boolean success=false;
- try
- {
- success = task.call();
- } catch (Exception e)
- {
- e.printStackTrace();
- }
- Class[] clazz=new Class[files.length];
- if(success)
- {
- for(int i=0;i<clazz.length><li> { </li> <li> clazz[i] = filemanage.getClassLoader(null).loadClass(files[i].getFileName()); </li> <li> } </li> <li> } </li> <li>else</li> <li> { </li> <li>for (Diagnostic diagnostic : diagnostics.getDiagnostics()) </li> <li> System.out.printf( </li> <li>"Code: %s%n" + </li> <li>"Kind: %s%n" + </li> <li>"Position: %s%n" + </li> <li>"Start Position: %s%n" + </li> <li>"End Position: %s%n" + </li> <li>"Source: %s%n" + </li> <li>"Message: %s%n", </li> <li> diagnostic.getCode(), diagnostic.getKind(), </li> <li> diagnostic.getPosition(), diagnostic.getStartPosition(), </li> <li> diagnostic.getEndPosition(), diagnostic.getSource(), </li> <li> diagnostic.getMessage(null)); </li> <li> </li> <li> } </li> <li> filemanage.close(); </li> <li>return clazz; </li> <li> } </li> </clazz.length>
public static Class[] complie(JavaFile[] files) throws Exception { JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); //ClassLoader clsLoader=ToolProvider.getSystemToolClassLoader(); DiagnosticCollector<javafileobject> diagnostics = new DiagnosticCollector<javafileobject>(); MemoryFileManager filemanage = new MemoryFileManager(compiler .getStandardFileManager(diagnostics, null, null)); //MemoryFileManager filemanage = new MemoryFileManager(compiler //.getStandardFileManager(diagnostics, null, null)); //Log.info("Location/t"+filemanage.) ArrayList<javafileobject> clsFiles=new ArrayList<javafileobject>(); for(JavaFile file:files) { JavaFileObject clsfile = MemoryFileManager.makeSource(file .getFileName(), file.toString()); clsFiles.add(clsfile); Log.info("compile:"+file.getFileName()+"/t"+clsfile.getName()+"/t"+clsfile.getKind()+"/t"+clsfile.toUri()); } Iterable extends JavaFileObject> compilationUnits=clsFiles; JavaCompiler.CompilationTask task = compiler.getTask(null, filemanage, diagnostics, null, options.getClassNames(), compilationUnits); boolean success=false; try { success = task.call(); } catch (Exception e) { e.printStackTrace(); } Class[] clazz=new Class[files.length]; if(success) { for(int i=0;i<clazz.length clazz filemanage.getclassloader else for diagnostic : diagnostics.getdiagnostics system.out.printf position: diagnostic.getcode diagnostic.getkind diagnostic.getposition diagnostic.getstartposition diagnostic.getendposition diagnostic.getsource diagnostic.getmessage filemanage.close return><br><strong>问题补充:</strong> <br>TOMCAT下的编译诊断信息: <p>Java代码 <a href="http://www.javaeye.com/problems/14909#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif"></a></p> <ol> <li>Code: compiler.err.doesnt.exist </li> <li>Kind: ERROR </li> <li>Position: 0</li> <li>Start Position: 0</li> <li>End Position: 0</li> <li>Source: mfm:///RuntimeEntitySysUser.java from JavaSourceFromString </li> <li>Message: mfm:///RuntimeEntitySysUser.java:1: 软件包 com.youngor.dboperator 不存在 </li> <li>Code: compiler.err.doesnt.exist </li> <li>Kind: ERROR </li> <li>Position: 104</li> <li>Start Position: 78</li> <li>End Position: 112</li> <li>Source: mfm:///RuntimeEntitySysUser.java from JavaSourceFromString </li> <li>Message: mfm:///RuntimeEntitySysUser.java:4: 软件包 com.youngor.webcore.entity 不存在 </li> <li>Code: compiler.err.doesnt.exist </li> <li>Kind: ERROR </li> <li>Position: 146</li> <li>Start Position: 124</li> <li>End Position: 156</li> <li>Source: mfm:///RuntimeEntitySysUser.java from JavaSourceFromString </li> <li>Message: mfm:///RuntimeEntitySysUser.java:6: 软件包 com.youngor.dboperator 不存在 </li> <li>Code: compiler.err.doesnt.exist </li> <li>Kind: ERROR </li> <li>Position: 202</li> <li>Start Position: 180</li> <li>End Position: 212</li> <li>Source: mfm:///RuntimeEntitySysUser.java from JavaSourceFromString </li> <li>Message: mfm:///RuntimeEntitySysUser.java:9: 软件包 com.youngor.dboperator 不存在 </li> <li>Code: compiler.err.doesnt.exist </li> <li>Kind: ERROR </li> <li>Position: 239</li> <li>Start Position: 213</li> <li>End Position: 251</li> <li>Source: mfm:///RuntimeEntitySysUser.java from JavaSourceFromString </li> <li>Message: mfm:///RuntimeEntitySysUser.java:9: 软件包 com.youngor.webcore.entity 不存在 </li> <li>Code: compiler.err.doesnt.exist </li> <li>Kind: ERROR </li> <li>Position: 0</li> <li>Start Position: 0</li> <li>End Position: 0</li> <li>Source: mfm:///RuntimeEntitySysPosition.java from JavaSourceFromString </li> <li>Message: mfm:///RuntimeEntitySysPosition.java:1: 软件包 com.youngor.dboperator 不存在 </li> <li>Code: compiler.err.doesnt.exist </li> <li>Kind: ERROR </li> <li>Position: 108</li> <li>Start Position: 82</li> <li>End Position: 120</li> <li>Source: mfm:///RuntimeEntitySysPosition.java from JavaSourceFromString </li> <li>Message: mfm:///RuntimeEntitySysPosition.java:4: 软件包 com.youngor.webcore.entity 不存在 </li> <li>Code: compiler.err.cant.resolve.location </li> <li>Kind: ERROR </li> <li>Position: 328</li> <li>Start Position: 328</li> <li>End Position: 337</li> <li>Source: mfm:///RuntimeEntitySysUser.java from JavaSourceFromString </li> <li>Message: mfm:///RuntimeEntitySysUser.java:14: 找不到符号 </li> <li>符号: 类 EntitySet </li> <li>位置: 类 RuntimeEntitySysUser </li> <li>Code: compiler.err.cant.resolve.location </li> <li>Kind: ERROR </li> <li>Position: 383</li> <li>Start Position: 383</li> <li>End Position: 392</li> <li>Source: mfm:///RuntimeEntitySysUser.java from JavaSourceFromString </li> <li>Message: mfm:///RuntimeEntitySysUser.java:14: 找不到符号 </li> <li>符号: 变量 DefaultDB </li> <li>位置: 类 RuntimeEntitySysUser </li> <li>Code: compiler.err.doesnt.exist </li> <li>Kind: ERROR </li> <li>Position: 436</li> <li>Start Position: 410</li> <li>End Position: 448</li> <li>Source: mfm:///RuntimeEntitySysUser.java from JavaSourceFromString </li> <li>Message: mfm:///RuntimeEntitySysUser.java:14: 软件包 com.youngor.webcore.entity 不存在 </li> <li>Code: compiler.err.cant.resolve.location </li> <li>Kind: ERROR </li> <li>Position: 619</li> <li>Start Position: 619</li> <li>End Position: -1</li> <li>Source: mfm:///RuntimeEntitySysUser.java from JavaSourceFromString </li> <li>Message: mfm:///RuntimeEntitySysUser.java:16: 找不到符号 </li> <li>符号: 变量 super</li> <li>位置: 类 RuntimeEntitySysUser </li> <li>Code: compiler.err.cant.resolve.location </li> <li>Kind: ERROR </li> <li>Position: 667</li> <li>Start Position: 667</li> <li>End Position: -1</li> <li>Source: mfm:///RuntimeEntitySysUser.java from JavaSourceFromString </li> <li>Message: mfm:///RuntimeEntitySysUser.java:18: 找不到符号 </li> <li>符号: 变量 super</li> <li>位置: 类 RuntimeEntitySysUser </li> </ol> <pre>Code: compiler.err.doesnt.exist Kind: ERROR Position: 0 Start Position: 0 End Position: 0 Source: mfm:///RuntimeEntitySysUser.java from JavaSourceFromString Message: mfm:///RuntimeEntitySysUser.java:1: 软件包 com.youngor.dboperator 不存在 Code: compiler.err.doesnt.exist Kind: ERROR Position: 104 Start Position: 78 End Position: 112 Source: mfm:///RuntimeEntitySysUser.java from JavaSourceFromString Message: mfm:///RuntimeEntitySysUser.java:4: 软件包 com.youngor.webcore.entity 不存在 Code: compiler.err.doesnt.exist Kind: ERROR Position: 146 Start Position: 124 End Position: 156 Source: mfm:///RuntimeEntitySysUser.java from JavaSourceFromString Message: mfm:///RuntimeEntitySysUser.java:6: 软件包 com.youngor.dboperator 不存在 Code: compiler.err.doesnt.exist Kind: ERROR Position: 202 Start Position: 180 End Position: 212 Source: mfm:///RuntimeEntitySysUser.java from JavaSourceFromString Message: mfm:///RuntimeEntitySysUser.java:9: 软件包 com.youngor.dboperator 不存在 Code: compiler.err.doesnt.exist Kind: ERROR Position: 239 Start Position: 213 End Position: 251 Source: mfm:///RuntimeEntitySysUser.java from JavaSourceFromString Message: mfm:///RuntimeEntitySysUser.java:9: 软件包 com.youngor.webcore.entity 不存在 Code: compiler.err.doesnt.exist Kind: ERROR Position: 0 Start Position: 0 End Position: 0 Source: mfm:///RuntimeEntitySysPosition.java from JavaSourceFromString Message: mfm:///RuntimeEntitySysPosition.java:1: 软件包 com.youngor.dboperator 不存在 Code: compiler.err.doesnt.exist Kind: ERROR Position: 108 Start Position: 82 End Position: 120 Source: mfm:///RuntimeEntitySysPosition.java from JavaSourceFromString Message: mfm:///RuntimeEntitySysPosition.java:4: 软件包 com.youngor.webcore.entity 不存在 Code: compiler.err.cant.resolve.location Kind: ERROR Position: 328 Start Position: 328 End Position: 337 Source: mfm:///RuntimeEntitySysUser.java from JavaSourceFromString Message: mfm:///RuntimeEntitySysUser.java:14: 找不到符号 符号: 类 EntitySet 位置: 类 RuntimeEntitySysUser Code: compiler.err.cant.resolve.location Kind: ERROR Position: 383 Start Position: 383 End Position: 392 Source: mfm:///RuntimeEntitySysUser.java from JavaSourceFromString Message: mfm:///RuntimeEntitySysUser.java:14: 找不到符号 符号: 变量 DefaultDB 位置: 类 RuntimeEntitySysUser Code: compiler.err.doesnt.exist Kind: ERROR Position: 436 Start Position: 410 End Position: 448 Source: mfm:///RuntimeEntitySysUser.java from JavaSourceFromString Message: mfm:///RuntimeEntitySysUser.java:14: 软件包 com.youngor.webcore.entity 不存在 Code: compiler.err.cant.resolve.location Kind: ERROR Position: 619 Start Position: 619 End Position: -1 Source: mfm:///RuntimeEntitySysUser.java from JavaSourceFromString Message: mfm:///RuntimeEntitySysUser.java:16: 找不到符号 符号: 变量 super 位置: 类 RuntimeEntitySysUser Code: compiler.err.cant.resolve.location Kind: ERROR Position: 667 Start Position: 667 End Position: -1 Source: mfm:///RuntimeEntitySysUser.java from JavaSourceFromString Message: mfm:///RuntimeEntitySysUser.java:18: 找不到符号 符号: 变量 super 位置: 类 RuntimeEntitySysUser</pre> <br>Tomcat输出的异常信息: <p>Java代码 <a href="http://www.javaeye.com/problems/14909#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif"></a></p> <ol> <li>java.lang.NullPointerException </li> <li> at com.youngor.dboperator.EntityUtil.getInstance(EntityUtil.java:36) </li> <li> at com.youngor.dboperator.Entity.getInstance(Entity.java:103) </li> <li> at com.youngor.dboperator.SQLServer2000Adaptor.getEntitySetBySQL(SQLServer2000Adaptor.java:283) </li> <li> at com.youngor.dboperator.SQLServer2000Adaptor.getEntitySet(SQLServer2000Adaptor.java:220) </li> <li> at com.youngor.dboperator.InnerDBOperator.getEntitySet(InnerDBOperator.java:451) </li> <li> at com.youngor.dboperator.DBOperator.getEntitySet(DBOperator.java:350) </li> <li> at com.youngor.dboperator.DefaultDB.getEntitySet(DefaultDB.java:147) </li> <li> at com.youngor.dboperator.DefaultDB.getEntitySet(DefaultDB.java:213) </li> <li> at com.youngor.webcore.entity.SysUser.getEntitySet(SysUser.java:501) </li> <li> at com.youngor.webcore.entity.SysUser.doTest(SysUser.java:610) </li> <li> at org.apache.jsp.login_jsp._jspService(login_jsp.java:66) </li> <li> at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) </li> <li> at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) </li> <li> at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) </li> <li> at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) </li> <li> at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) </li> <li> at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) </li> <li> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) </li> <li> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) </li> <li> at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) </li> <li> at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) </li> <li> at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) </li> <li> at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) </li> <li> at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) </li> <li> at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) </li> <li> at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:857) </li> <li> at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:565) </li> <li> at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1509) </li> <li> at java.lang.Thread.run(Thread.java:619) </li> <li>java.lang.NullPointerException </li> <li> at com.youngor.dboperator.SQLServer2000Adaptor.getEntitySetBySQL(SQLServer2000Adaptor.java:284) </li> <li> at com.youngor.dboperator.SQLServer2000Adaptor.getEntitySet(SQLServer2000Adaptor.java:220) </li> <li> at com.youngor.dboperator.InnerDBOperator.getEntitySet(InnerDBOperator.java:451) </li> <li> at com.youngor.dboperator.DBOperator.getEntitySet(DBOperator.java:350) </li> <li> at com.youngor.dboperator.DefaultDB.getEntitySet(DefaultDB.java:147) </li> <li> at com.youngor.dboperator.DefaultDB.getEntitySet(DefaultDB.java:213) </li> <li> at com.youngor.webcore.entity.SysUser.getEntitySet(SysUser.java:501) </li> <li> at com.youngor.webcore.entity.SysUser.doTest(SysUser.java:610) </li> <li> at org.apache.jsp.login_jsp._jspService(login_jsp.java:66) </li> <li> at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) </li> <li> at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) </li> <li> at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) </li> <li> at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) </li> <li> at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) </li> <li> at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) </li> <li> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) </li> <li> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) </li> <li> at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) </li> <li> at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) </li> <li> at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) </li> <li> at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) </li> <li> at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) </li> <li> at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) </li> <li> at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:857) </li> <li> at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:565) </li> <li> at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1509) </li> <li> at java.lang.Thread.run(Thread.java:619) </li> </ol> <pre>java.lang.NullPointerException at com.youngor.dboperator.EntityUtil.getInstance(EntityUtil.java:36) at com.youngor.dboperator.Entity.getInstance(Entity.java:103) at com.youngor.dboperator.SQLServer2000Adaptor.getEntitySetBySQL(SQLServer2000Adaptor.java:283) at com.youngor.dboperator.SQLServer2000Adaptor.getEntitySet(SQLServer2000Adaptor.java:220) at com.youngor.dboperator.InnerDBOperator.getEntitySet(InnerDBOperator.java:451) at com.youngor.dboperator.DBOperator.getEntitySet(DBOperator.java:350) at com.youngor.dboperator.DefaultDB.getEntitySet(DefaultDB.java:147) at com.youngor.dboperator.DefaultDB.getEntitySet(DefaultDB.java:213) at com.youngor.webcore.entity.SysUser.getEntitySet(SysUser.java:501) at com.youngor.webcore.entity.SysUser.doTest(SysUser.java:610) at org.apache.jsp.login_jsp._jspService(login_jsp.java:66) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:857) at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:565) at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1509) at java.lang.Thread.run(Thread.java:619) java.lang.NullPointerException at com.youngor.dboperator.SQLServer2000Adaptor.getEntitySetBySQL(SQLServer2000Adaptor.java:284) at com.youngor.dboperator.SQLServer2000Adaptor.getEntitySet(SQLServer2000Adaptor.java:220) at com.youngor.dboperator.InnerDBOperator.getEntitySet(InnerDBOperator.java:451) at com.youngor.dboperator.DBOperator.getEntitySet(DBOperator.java:350) at com.youngor.dboperator.DefaultDB.getEntitySet(DefaultDB.java:147) at com.youngor.dboperator.DefaultDB.getEntitySet(DefaultDB.java:213) at com.youngor.webcore.entity.SysUser.getEntitySet(SysUser.java:501) at com.youngor.webcore.entity.SysUser.doTest(SysUser.java:610) at org.apache.jsp.login_jsp._jspService(login_jsp.java:66) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:857) at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:565) at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1509) at java.lang.Thread.run(Thread.java:619)</pre> <br><strong>问题补充:</strong> <br>public static Class[] complie(JavaFile[] files) throws Exception 这个方法是用main(String[] args)方法测试成功。放到JSP页面中调用输错。错误信息已经在上面给出。 <br><strong>问题补充:</strong> <br>把com.youngor.*之类的类文件,放到tomcat下的common或shared下对应的classes或lib下,应该就不会报这个异常 或许可以解决问题。但是这不太符合Web应用部署的常规做法,不知“lovewhzlq”是否还有其他可行方法,不吝赐教。 <br><strong>问题补充:</strong> <br>问题基本解决,需要为编译过程指定编译的类路径; <p>Java代码 <a href="http://www.javaeye.com/problems/14909#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif"></a></p> <ol> <li>C:/myproject>javac -help </li> <li>用法:javac </li> <li>其中,可能的选项包括: </li> <li>-g 生成所有调试信息 </li> <li>-g:none 不生成任何调试信息 </li> <li>-g:{lines,vars,source} 只生成某些调试信息 </li> <li>-nowarn 不生成任何警告 </li> <li>-verbose 输出有关编译器正在执行的操作的消息 </li> <li>-deprecation 输出使用已过时的 API 的源位置 </li> <li>-classpath 指定查找用户类文件的位置 </li> <li>-cp 指定查找用户类文件的位置 </li> <li>-sourcepath 指定查找输入源文件的位置 </li> <li>-bootclasspath 覆盖引导类文件的位置 </li> <li>-extdirs 覆盖安装的扩展目录的位置 </li> <li>-endorseddirs 覆盖签名的标准路径的位置 </li> <li>-d 指定存放生成的类文件的位置 </li> <li>-encoding 指定源文件使用的字符编码 </li> <li>-source 提供与指定版本的源兼容性 </li> <li>-target 生成特定 VM 版本的类文件 </li> <li>-version 版本信息 </li> <li>-help 输出标准选项的提要 </li> <li>-X 输出非标准选项的提要 </li> <li>-J 直接将 传递给运行时系统 </li> </ol> <pre>C:/myproject>javac -help 用法:javac 其中,可能的选项包括: -g 生成所有调试信息 -g:none 不生成任何调试信息 -g:{lines,vars,source} 只生成某些调试信息 -nowarn 不生成任何警告 -verbose 输出有关编译器正在执行的操作的消息 -deprecation 输出使用已过时的 API 的源位置 -classpath 指定查找用户类文件的位置 -cp 指定查找用户类文件的位置 -sourcepath 指定查找输入源文件的位置 -bootclasspath 覆盖引导类文件的位置 -extdirs 覆盖安装的扩展目录的位置 -endorseddirs 覆盖签名的标准路径的位置 -d 指定存放生成的类文件的位置 -encoding 指定源文件使用的字符编码 -source 提供与指定版本的源兼容性 -target 生成特定 VM 版本的类文件 -version 版本信息 -help 输出标准选项的提要 -X 输出非标准选项的提要 -J 直接将 传递给运行时系统</pre> <br>修改部分代码如下: <p>Java代码 <a href="http://www.javaeye.com/problems/14909#"><img alt="复制代码" src="http://www.javaeye.com/images/icon_copy.gif"></a></p> <ol> <li>String cp=PathTool.get(AdvancedCompilerAPIDemo.class); </li> <li> Log.info(cp); </li> <li>int i=cp.indexOf("/WEB-INF/classes/"); </li> <li> cp=cp.substring(0, i+17); </li> <li> Log.info(cp); </li> <li> Iterable<string> options = Arrays.asList("-d", cp,"-cp",cp); // 编译选项,将编译产生的类文件放在当前目录下 </string> </li> <li> CompilationTask task = compiler.getTask(null, fileManager, </li> <li> diagnostics, options, null, sourcefiles); </li> </ol> <pre>String cp=PathTool.get(AdvancedCompilerAPIDemo.class); Log.info(cp); int i=cp.indexOf("/WEB-INF/classes/"); cp=cp.substring(0, i+17); Log.info(cp); Iterable<string> options = Arrays.asList("-d", cp,"-cp",cp); // 编译选项,将编译产生的类文件放在当前目录下 CompilationTask task = compiler.getTask(null, fileManager, diagnostics, options, null, sourcefiles);</string></pre> <br>这里找到了WEb应用的classes目录并设置为编译输出目录和类路径。编译通过并可以使用了。 <p></p> <p>那就得自己定义类加载器去加载com.youngor.*里面的类文件,而不是用tomcat默认的加载器去加载类,因为父加载器是不能加载子加载器下面的类文件的,</p> </clazz.length></javafileobject></javafileobject></javafileobject></javafileobject>
相关推荐
Java6动态编译案例Java6动态编译案例Java6动态编译案例Java6动态编译案例Java6动态编译案例Java6动态编译案例Java6动态编译案例Java6动态编译案例
java内存动态编译执行
java动态编译的几种技术介绍。JavaCompiler --JDK6 API的简介(java动态编译)
JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA...
java动态编译java源文件,并利用Instrumentation实现重定义class
添加动态执行的编译环境 options 是个集合,添加内容,字符集,classpath等 * 6.传入JavaFileObject的java文件,是个集合,创建JavaSourceObject实现这个接口,Kind.SOURCE.extension = '.java' * 7.创建任务并...
java 动态编译.java文件,动态运行类
SpringBoot 应用动态编译 Java 源码并注入 Spring 容器,实现动态修改接口和抽象类的实现。注意,项目以 Jar 包形式启动时要在命令行引入 tools.jar 的包,IDEA下可直接调试。 基于接口、抽象类实现不停机动态调整...
利用Java的动态编译、动态加载结合EasyRules实现业务规则的动态性的项目源码,具体详情请查看相关博客https://blog.csdn.net/qq_31142553/article/details/85013989
NULL 博文链接:https://zheng12tian.iteye.com/blog/1488813
java 动态编译.java文件,动态运行类 _1.2
java6提供标准包javax.tools操作Java编译器,本例实现在内存动态编译java代码,并加载动态生成类 执行 console: public class HelloWorld { public static void main(String args[]) { System.out.println("Hello...
java 动态编译.java文件,动态运行类 _1.3
Java语言-动态编译代码并热加载类,js热加载
本代码块为动态编译指定java文件,将编译后的class生成jar文件.调用示例为BuildRmi类
Java的动态编译知识,真真在实际开发中并不是经常遇到。但是学习java动态编译有助于我们从更深一层次去了解java。对掌握jdk的动态代理模式,还有比如CGLIB,Spring 的AOP的原理就很有帮助。这样我们在学习其他一些开源...
JAVA代码反编译工具,把class反编译成.java文件
jd-gui ,java Class反编译工具 ,java jar反编译工具。经济实惠只要1分。这个是在凑字数。这个是在凑字数。这个是在凑字数。
java动态编译 ,写了一个jsp在页面上编辑java代码,然后servlet动态编译并执行main方法
很小巧的javaclass反编译工具 只需要把点击exe文件执行 然后点击打开想要反编译的class文件 在对应的目录下就会生成.java的javabean文件 非常好用