@@ -51,6 +51,7 @@ public class DependencyResolver {
5151 public static String resolveDependenciesToClasspath (String projectBaseDirectoryString , String [] dependencies ) throws IOException {
5252 try {
5353 simpleLog ("Fetch dependencies: " + Arrays .toString (dependencies ));
54+ simpleLog ("Classpath: " + System .getProperty ("java.class.path" ));
5455 var projectBasePath = new File (projectBaseDirectoryString ).toPath ();
5556
5657 File projectDir = Files .createTempDirectory ("java-swift-dependencies" ).toFile ();
@@ -118,7 +119,7 @@ private static String resolveDependenciesWithSubprocess(File gradleProjectDir) t
118119 stderrFile .deleteOnExit ();
119120
120121 try {
121- ProcessBuilder gradleBuilder = new ProcessBuilder ("gradle " , ":printRuntimeClasspath" );
122+ ProcessBuilder gradleBuilder = new ProcessBuilder ("./gradlew " , ":printRuntimeClasspath" );
122123 gradleBuilder .directory (gradleProjectDir );
123124 gradleBuilder .redirectOutput (stdoutFile );
124125 gradleBuilder .redirectError (stderrFile );
@@ -172,7 +173,7 @@ public static boolean hasDependencyResolverDependenciesLoaded() {
172173 *
173174 * @return classpath which was resolved for the dependencies
174175 */
175- private static String resolveDependenciesUsingAPI (File projectDir , String [] dependencies ) throws FileNotFoundException {
176+ private static String resolveDependenciesUsingAPI (File projectDir , String [] dependencies ) throws IOException {
176177 printBuildFiles (projectDir , dependencies );
177178
178179 var connection = GradleConnector .newConnector ()
@@ -196,7 +197,7 @@ private static String resolveDependenciesUsingAPI(File projectDir, String[] depe
196197
197198 // remove output directories of the project we used for the dependency resolution
198199 var classpath = Arrays .stream (classpathString
199- .split (":" ))
200+ .split (":" ))
200201 .filter (s -> !s .startsWith (projectDir .getAbsolutePath ()))
201202 .collect (Collectors .joining (":" ));
202203
@@ -221,7 +222,8 @@ private static boolean hasDependencyResolverDependenciesLoaded(ClassLoader class
221222 }
222223 }
223224
224- private static void printBuildFiles (File projectDir , String [] dependencies ) throws FileNotFoundException {
225+ private static void printBuildFiles (File projectDir , String [] dependencies ) throws IOException {
226+ // === build.gradle
225227 File buildFile = new File (projectDir , "build.gradle" );
226228 try (PrintWriter writer = new PrintWriter (buildFile )) {
227229 writer .println ("plugins { id 'java-library' }" );
@@ -244,12 +246,48 @@ private static void printBuildFiles(File projectDir, String[] dependencies) thro
244246 """ );
245247 }
246248
249+ // === settings.gradle
247250 File settingsFile = new File (projectDir , "settings.gradle.kts" );
248251 try (PrintWriter writer = new PrintWriter (settingsFile )) {
249252 writer .println ("""
250253 rootProject.name = "swift-java-resolve-temp-project"
251254 """ );
252255 }
256+
257+ // === gradle wrapper files, so we can even download gradle when necessary to bootstrap
258+ File gradlew = new File (projectDir , "gradlew" );
259+ writeResourceToFile ("/gradle/gradlew" , gradlew );
260+ gradlew .setExecutable (true );
261+
262+ File gradlewBat = new File (projectDir , "gradlew.bat" );
263+ writeResourceToFile ("/gradle/gradlew.bat" , gradlewBat );
264+ gradlew .setExecutable (true );
265+
266+ File gradleDir = new File (projectDir , "gradle" );
267+ File gradleWrapperDir = new File (gradleDir , "wrapper" );
268+ gradleWrapperDir .mkdirs ();
269+
270+ File gradleWrapperJar = new File (gradleWrapperDir , "gradle-wrapper.jar" );
271+ writeResourceToFile ("/gradle/wrapper/gradle-wrapper.jar" , gradleWrapperJar );
272+ File gradleWrapperProps = new File (gradleWrapperDir , "gradle-wrapper.properties" );
273+ writeResourceToFile ("/gradle/wrapper/gradle-wrapper.properties" , gradleWrapperProps );
274+ }
275+
276+ private static void writeResourceToFile (String resource , File target ) throws IOException {
277+ try (PrintWriter writer = new PrintWriter (target )) {
278+ try (InputStream inputStream = DependencyResolver .class .getResourceAsStream (resource )) {
279+ if (inputStream == null ) {
280+ throw new FileNotFoundException ("Not found: gradlew wrapper in resources!" );
281+ }
282+ try (var os = new BufferedOutputStream (new FileOutputStream (target ))) {
283+ byte [] buffer = new byte [8192 ]; // Buffer size of 8 KB
284+ int bytesRead ;
285+ while ((bytesRead = inputStream .read (buffer )) != -1 ) {
286+ os .write (buffer , 0 , bytesRead );
287+ }
288+ }
289+ }
290+ }
253291 }
254292
255293 private static void simpleLog (String message ) {
0 commit comments