動態加載類出現問題 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));
		
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章