`
guoxinzz
  • 浏览: 430995 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JAVA6动态编译的问题

 
阅读更多

在使用JAVA6动态编译时遇到的一个问题,动态编译方法已经写就。通过main方法调用的动态编译时,编译通过,并可以使用编译生成的类。但是,在Tomcat下调用同样的方法进行动态编译时,编译无法通过。其原因是找不到对应的包。因为动态生成的类中import了其他的一些类。我猜是tomcat的某些加载机制影响了动态编译过程,导致动态编译找不引用的类。请问各位,是否有方法解决?
问题补充:
补充代码:
参数 files是一个JavaFile类型的数组,其中包含了Java类的源文件

Java代码 复制代码

  1. public static Class[] complie(JavaFile[] files) throws Exception
  2. {
  3. JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
  4. //ClassLoader clsLoader=ToolProvider.getSystemToolClassLoader();
  5. DiagnosticCollector<javafileobject> diagnostics = new DiagnosticCollector<javafileobject>(); </javafileobject></javafileobject>
  6. MemoryFileManager filemanage = new MemoryFileManager(compiler
  7. .getStandardFileManager(diagnostics, null, null));
  8. //MemoryFileManager filemanage = new MemoryFileManager(compiler
  9. //.getStandardFileManager(diagnostics, null, null));
  10. //Log.info("Location/t"+filemanage.)
  11. ArrayList<javafileobject> clsFiles=new ArrayList<javafileobject>(); </javafileobject></javafileobject>
  12. for(JavaFile file:files)
  13. {
  14. JavaFileObject clsfile = MemoryFileManager.makeSource(file
  15. .getFileName(), file.toString());
  16. clsFiles.add(clsfile);
  17. Log.info("compile:"+file.getFileName()+"/t"+clsfile.getName()+"/t"+clsfile.getKind()+"/t"+clsfile.toUri());
  18. }
  19. Iterable extends JavaFileObject> compilationUnits=clsFiles;
  20. JavaCompiler.CompilationTask task = compiler.getTask(null, filemanage,
  21. diagnostics, null, options.getClassNames(), compilationUnits);
  22. boolean success=false;
  23. try
  24. {
  25. success = task.call();
  26. } catch (Exception e)
  27. {
  28. e.printStackTrace();
  29. }
  30. Class[] clazz=new Class[files.length];
  31. if(success)
  32. {
  33. 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&gt; 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&gt;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&gt;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>
分享到:
评论
1 楼 李_俊 2012-07-09  
汗哒哒,原路径在这里:
http://www.iteye.com/problems/14909

相关推荐

Global site tag (gtag.js) - Google Analytics