¿Cómo establecer classpath cuando uso javax.tools.JavaCompiler compile el código fuente?

Uso la clase javax.tools.JavaCompiler (jdk6) para comstackr un archivo fuente, pero el archivo fuente depende de algún archivo jar. Cómo establecer el classpath de javax.tools.JavaCompiler ?

El método javax.tools.JavaCompiler # getTask () toma un parámetro de options que permite establecer las opciones del comstackdor. El siguiente mensaje describe una manera fácil de configurarlos para acceder al classpath del progtwig de llamada:

Necesita configurar el administrador de archivos java estándar para saber sobre los archivos jar – usted usa el argumento de opciones del comstackdor para hacer eso.

De forma predeterminada, el objeto del comstackdor de Java solo parece conocer las ubicaciones predeterminadas de los directorios bootclasspath, extdirs y endorseddirs en términos de su classpath.

Debe agregar el classpath actual del progtwig de llamada a la instancia del comstackdor de java que se pasa al administrador de archivos estándar, que luego encontrará las clases en los archivos jar.

Así es como lo hago en el envoltorio del comstackdor que escribí

 List optionList = new ArrayList(); // 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.ComstacktionTask task = compiler.getTask(out,jfm,diagnostics,optionList,null,jfos); 

Todo lo que necesitará entonces es obtener el conjunto de ruta de clases adecuado al ejecutar el progtwig que realiza la llamada.

El mismo problema se me ocurrió recientemente, finalmente encontré dos soluciones. Puede establecer la ruta de clase ya sea por invocación StandardJavaFileManager.setLocation (StandardLocation.CLASS_PATH, “YOUR_CLASS_PATH”) o Compiler.getTask (ARG_0, ARG_1, ARG_2, CLASS_PATH_OPTIONS, tal como lo indica la primera respuesta publicada aquí.