Hoe om n stel classpath wanneer ek gebruik javax.tools.JavaCompiler Stel die bron?
-
21-09-2019 - |
Vra
Ek gebruik die klas javax.tools.JavaCompiler
(jdk6) om 'n bron lêer saam te stel, maar die bron lêer is afhanklik van 'n paar jar-lêer. Hoe om die classpath van die javax.tools.JavaCompiler
stel?
Oplossing
Die javax.tools.JavaCompiler # getTask () metode neem 'n options
parameter wat dit moontlik maak om set samesteller opsies. Die volgende boodskap beskryf 'n maklike manier om dit te stel ten einde toegang tot die roep classpath program se:
Jy moet die standaard instel java lêer bestuurder om te weet oor die jar lêers (s) - jy die samesteller gebruik opsies argument om dit te doen.
By verstek die Java samesteller voorwerp lyk net om te weet oor die verstek plekke vir bootclasspath, extdirs en endorseddirs dopgehou in terme van sy classpath.
Jy moet die roeping program se voeg huidige classpath om die Java samesteller Byvoorbeeld se wat op die kry geslaag die standaard lêer bestuurder, wat sal vind dan klasse in die pot lêers.
Hier is hoe ek dit doen in die samesteller wrapper ek geskryf
List<String> optionList = new ArrayList<String>(); // set compiler's classpath to be same as the runtime's optionList.addAll(Arrays.asList("-classpath",System.getProperty("java.class.path"))); // any other options you want optionList.addAll(Arrays.asList(options)); JavaCompiler.CompilationTask task = compiler.getTask(out,jfm,diagnostics,optionList,null,jfos);
Al wat jy nodig het dan is die behoorlike classpath stel wanneer die bestuur van die roeping program.
Ander wenke
Dieselfde probleem by my opgekom het onlangs, uiteindelik ek het twee regstellings. Jy kan die klas pad óf stel deur te roep StandardJavaFileManager.setLocation (StandardLocation.CLASS_PATH, "YOUR_CLASS_PATH") of Compiler.getTask (ARG_0, ARG_1, ARG_2, CLASS_PATH_OPTIONS, net soos die eerste antwoord hier gepos sê.