动态加载类出现问题 ToolProvider.getSystemJavaCompiler() Return NULL和动态加载pack

小G今天使用Java动态加载出现问题总结如下,见笑
问题1:
在spring boot 项目中新增一个动态加载class类使用的是tool.jar ,在eclipse上运行正常,部署到线上,就报错调用getSystemJavaCompiler的时候返回为null;
线上环境如下:
1、jdk 1.8或者OpenJDK1.8 都可以,亲自试验过,
2、部署环境容器docker或者tomcat
3、项目spring boot或spring都可以
解决方法如下:
不管使用的是openjdk还是jdk,需要全部下载到项目中,这里的全部是要包括jdk,之前只下载jre,然后把jdk中lib下tool.java放到jre下,还是报错,所以其实关移动tool不行,必须环境中需要有jdk,
总结下:下载jdk全部放到服务器上,然后把jdk中lib里面tool包放到,jre的lib里面,然后tomcat环境指到jre中(如何指向百度查询下,可以在profile环境变量中指向)
问题2: 动态加载过程总项目中pack无法import
解决方法,在使用getTask使用加载
Iterable options = Arrays.asList("-encoding", “UTF-8”, “-classpath”,classpath );
代码如下只是一段代码

String classpath ="';
 URL   parentClassLoaderUrl= (URLClassLoader) this.getClass().getClassLoader().getURLs();
          StringBuilder sb = new StringBuilder();
         
	        for (URL url : parentClassLoaderUrl ) {
	            String p = url.getFile();
	            sb.append(p).append(File.pathSeparator);
	        }
	   //获取lib的项目路径和项目的包
	 classpath = sb.toString();
	 //javaFileObject
	  Iterable<String> options = Arrays.asList("-encoding", "UTF-8", "-classpath",classpath );			      
	CompilationTask task = compiler.getTask(null, manager, null, options, null, Arrays.asList(javaFileObject));
		
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章