@@ -124,6 +124,8 @@ public class JdkInitializer
124124 private final List <File > sourceFiles ;
125125 private final List <Path > sourceDirectories ;
126126 private final List <JavaFileObject > javaFileObjects ;
127+ private final List <Path > classpath ;
128+ private final List <Path > modulePath ;
127129
128130 private boolean initialized = false ;
129131
@@ -137,16 +139,37 @@ public class JdkInitializer
137139 /**
138140 * Creates a {@link JdkInitializer} with explicit source inputs.
139141 *
140- * @param sourceFiles individual {@link File} source files to parse
142+ * @param sourceFiles individual {@link File} source files to parse
141143 * @param sourceDirectories directories to walk recursively for {@code .java} files
142- * @param javaFileObjects in-memory or pre-built {@link JavaFileObject} sources
144+ * @param javaFileObjects in-memory or pre-built {@link JavaFileObject} sources
143145 */
144146 public JdkInitializer (final List <File > sourceFiles ,
145147 final List <Path > sourceDirectories ,
146148 final List <JavaFileObject > javaFileObjects ) {
149+ this (sourceFiles , sourceDirectories , javaFileObjects , List .of (), List .of ());
150+ }
151+
152+ /**
153+ * Creates a {@link JdkInitializer} with explicit source inputs and dependency paths.
154+ * Callers are responsible for assembling the classpath and module-path lists; this class
155+ * does no jar classification or module dependency resolution.
156+ *
157+ * @param sourceFiles individual {@link File} source files to parse
158+ * @param sourceDirectories directories to walk recursively for {@code .java} files
159+ * @param javaFileObjects in-memory or pre-built {@link JavaFileObject} sources
160+ * @param classpath jars or directories to pass as {@code --class-path}
161+ * @param modulePath jars or directories to pass as {@code --module-path}
162+ */
163+ public JdkInitializer (final List <File > sourceFiles ,
164+ final List <Path > sourceDirectories ,
165+ final List <JavaFileObject > javaFileObjects ,
166+ final List <Path > classpath ,
167+ final List <Path > modulePath ) {
147168 this .sourceFiles = sourceFiles ;
148169 this .sourceDirectories = sourceDirectories ;
149170 this .javaFileObjects = javaFileObjects ;
171+ this .classpath = classpath ;
172+ this .modulePath = modulePath ;
150173 }
151174
152175 /**
@@ -193,7 +216,7 @@ public void initialize(final CodeModel codeModel) {
193216 return ;
194217 }
195218
196- final var task = compiler .getTask (null , fileManager , diagnostic -> {}, null , null , combined );
219+ final var task = compiler .getTask (null , fileManager , diagnostic -> {}, buildOptions () , null , combined );
197220 final var javacTask = (JavacTask ) task ;
198221 final var compilationUnits = javacTask .parse ();
199222 javacTask .analyze ();
@@ -226,6 +249,25 @@ public Void visitClass(final ClassTree classTree, final Void unused) {
226249 }
227250 }
228251
252+ // --- Compiler options ---
253+
254+ private List <String > buildOptions () {
255+ final var options = new ArrayList <String >();
256+ if (!classpath .isEmpty ()) {
257+ options .add ("--class-path" );
258+ options .add (classpath .stream ()
259+ .map (Path ::toString )
260+ .collect (Collectors .joining (File .pathSeparator )));
261+ }
262+ if (!modulePath .isEmpty ()) {
263+ options .add ("--module-path" );
264+ options .add (modulePath .stream ()
265+ .map (Path ::toString )
266+ .collect (Collectors .joining (File .pathSeparator )));
267+ }
268+ return options .isEmpty () ? null : options ;
269+ }
270+
229271 // --- Source collection ---
230272
231273 private List <JavaFileObject > collectSources (final StandardJavaFileManager fileManager ) throws IOException {
0 commit comments