动态加载类出现问题 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));
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值