5656import org .gradle .api .file .Directory ;
5757import org .gradle .api .file .DirectoryProperty ;
5858import org .gradle .api .file .ProjectLayout ;
59+ import org .gradle .api .file .RegularFile ;
5960import org .gradle .api .plugins .JavaPlugin ;
6061import org .gradle .api .plugins .JavaPluginExtension ;
6162import org .gradle .api .provider .Provider ;
63+ import org .gradle .api .tasks .Internal ;
6264import org .gradle .api .tasks .SourceSet ;
6365import org .gradle .api .tasks .TaskProvider ;
6466import org .gradle .jvm .tasks .Jar ;
7476
7577import static org .graalvm .python .embedding .tools .vfs .VFSUtils .GRAALPY_GROUP_ID ;
7678import static org .graalvm .python .embedding .tools .vfs .VFSUtils .VFS_ROOT ;
79+ import static org .graalvm .python .embedding .tools .vfs .VFSUtils .VFS_VENV ;
7780
7881public abstract class GraalPyGradlePlugin implements Plugin <Project > {
7982 private static final String LAUNCHER_CONFIGURATION_NAME = "pythonLauncherClasspath" ;
@@ -211,8 +214,6 @@ private TaskProvider<InstallPackagesTask> registerInstallPackagesTask(Project pr
211214 private TaskProvider <LockPackagesTask > registerLockPackagesTask (Project project , Configuration launcherClasspath , GraalPyExtension extension ) {
212215 return project .getTasks ().register (GRAALPY_LOCK_PACKAGES_TASK , LockPackagesTask .class , t -> {
213216 registerPackagesTask (project , launcherClasspath , extension , t );
214- // TODO probably not necessary
215- // t.getOutputs().upToDateWhen(tt -> false);
216217 });
217218 }
218219
@@ -227,11 +228,18 @@ private void registerPackagesTask(Project project, Configuration launcherClasspa
227228 t .getPackages ().set (extension .getPackages ());
228229
229230 DirectoryProperty externalDirectory = extension .getExternalDirectory ();
230- t .getOutput ().convention (externalDirectory .orElse (extension .getPythonResourcesDirectory ().orElse (buildDirectory .dir (DEFAULT_RESOURCES_DIRECTORY ))));
231- t .getIncludeVfsRoot ().convention (externalDirectory .map (d -> false ).orElse (extension .getPythonResourcesDirectory ().map (d -> false ).orElse (true )));
232- t .getResourceDirectory ().set (extension .getResourceDirectory ());
231+ Directory output = externalDirectory .orElse (extension .getPythonResourcesDirectory ().orElse (buildDirectory .dir (DEFAULT_RESOURCES_DIRECTORY ))).get ();
232+ t .getOutput ().convention (output );
233233
234- t .getGraalPyLockFile ().convention (extension .getGraalPyLockFile ().orElse (projectDirectory .file (GRAALPY_LOCK_FILE )));
234+ String vfsRoot = externalDirectory .isPresent () ? "" : extension .getResourceDirectory ().getOrElse (VFS_ROOT );
235+ t .getVenvDirectory ().set (output .getAsFile ().toPath ().resolve (vfsRoot ).resolve (VFS_VENV ).toFile ());
236+
237+ RegularFile graalPyLockFile = extension .getGraalPyLockFile ().orElse (projectDirectory .file (GRAALPY_LOCK_FILE )).get ();
238+ File glfFile = graalPyLockFile .getAsFile ();
239+ if (!glfFile .isAbsolute ()) {
240+ graalPyLockFile = projectDirectory .file (glfFile .getPath ());
241+ }
242+ t .getGraalPyLockFile ().set (graalPyLockFile );
235243
236244 t .setGroup (GRAALPY_GRADLE_PLUGIN_TASK_GROUP );
237245 }
0 commit comments