5858import java .util .List ;
5959
6060import static org .graalvm .python .embedding .tools .vfs .VFSUtils .GRAALPY_GROUP_ID ;
61+ import static org .graalvm .python .embedding .tools .vfs .VFSUtils .VFS_ROOT ;
6162
6263
6364public abstract class GraalPyGradlePlugin implements Plugin <Project > {
@@ -67,7 +68,8 @@ public abstract class GraalPyGradlePlugin implements Plugin<Project> {
6768 private static final String PYTHON_COMMUNITY_ARTIFACT_ID = "python-community" ;
6869 private static final String PYTHON_ARTIFACT_ID = "python" ;
6970 private static final String GRAALPY_GRADLE_PLUGIN_TASK_GROUP = "graalPy" ;
70- private static final String DEFAULT_WRAPPER_DIRECTORY = "python-generated" ;
71+ private static final String DEFAULT_RESOURCES_DIRECTORY = "graalpy-resources" ;
72+ private static final String GRAALPY_META_INF_DIRECTORY = "graalpy-meta-inf" ;
7173 private static final String GRAALPY_RESOURCES_TASK = "graalPyResources" ;
7274 private static final String GRAALPY_NATIVE_IMAGE_CONFIG_TASK = "graalPyNativeImageConfig" ;
7375 private static final String GRAALPY_VFS_FILESLIST_TASK = "graalPyVFSFilesList" ;
@@ -86,51 +88,52 @@ public void apply(Project project) {
8688 extension .getPythonHome ().getExcludes ().convention (Collections .emptyList ());
8789 extension .getPackages ().convention (Collections .emptyList ());
8890
89- TaskProvider <ResourcesTask > installPackagesTask = project .getTasks ().register (GRAALPY_RESOURCES_TASK , ResourcesTask .class );
90- installPackagesTask .configure (t -> {
91+ TaskProvider <ResourcesTask > resourcesTask = project .getTasks ().register (GRAALPY_RESOURCES_TASK , ResourcesTask .class );
92+ resourcesTask .configure (t -> {
9193 t .getIncludes ().set (extension .getPythonHome ().getIncludes ());
9294 t .getExcludes ().set (extension .getPythonHome ().getExcludes ());
9395 t .getPackages ().set (extension .getPackages ());
94- t .getIncludeVfsRoot ().set (extension .getIncludeVfsRootDir ());
9596
96- t .getOutput ().set (extension .getPythonResourcesDirectory ());
97+ if (extension .getPythonResourcesDirectory ().isPresent ()) {
98+ t .getOutput ().set (extension .getPythonResourcesDirectory ());
99+ t .getIncludeVfsRoot ().set (false );
100+ } else {
101+ t .getOutput ().set (project .getLayout ().getBuildDirectory ().dir (DEFAULT_RESOURCES_DIRECTORY ));
102+ t .getIncludeVfsRoot ().set (true );
103+ }
97104
98105 t .setGroup (GRAALPY_GRADLE_PLUGIN_TASK_GROUP );
99106 });
100107
101- TaskProvider <NativeImageConfigTask > generateManifestTask = project .getTasks ().register (GRAALPY_NATIVE_IMAGE_CONFIG_TASK , NativeImageConfigTask .class );
102- project .getTasks ().getByName (JavaPlugin .JAR_TASK_NAME , t -> ((Jar ) t ).getMetaInf ().from (generateManifestTask ));
103- generateManifestTask .configure (t -> {
104- t .getManifestOutputDir ().convention (project .getLayout ().getBuildDirectory ().dir ("GRAAL-META-INF" ));
108+ TaskProvider <NativeImageConfigTask > nativeImageConfigTask = project .getTasks ().register (GRAALPY_NATIVE_IMAGE_CONFIG_TASK , NativeImageConfigTask .class );
109+ project .getTasks ().getByName (JavaPlugin .JAR_TASK_NAME , t -> ((Jar ) t ).getMetaInf ().from (nativeImageConfigTask ));
110+ nativeImageConfigTask .configure (t -> {
111+ t .getManifestOutputDir ().convention (project .getLayout ().getBuildDirectory ().dir (GRAALPY_META_INF_DIRECTORY ));
105112 t .setGroup (GRAALPY_GRADLE_PLUGIN_TASK_GROUP );
106113 });
107114
108- TaskProvider <VFSFilesListTask > generateVFSFilesListTask = project .getTasks ().register (GRAALPY_VFS_FILESLIST_TASK , VFSFilesListTask .class );
109- generateVFSFilesListTask .configure (t -> {
115+ TaskProvider <VFSFilesListTask > vfsFilesListTask = project .getTasks ().register (GRAALPY_VFS_FILESLIST_TASK , VFSFilesListTask .class );
116+ vfsFilesListTask .configure (t -> {
110117 t .getResourcesDir ().convention ((((ProcessResources ) project .getTasks ().getByName (JavaPlugin .PROCESS_RESOURCES_TASK_NAME )).getDestinationDir ()));
111118 t .setGroup (GRAALPY_GRADLE_PLUGIN_TASK_GROUP );
112119 });
113120 project .getTasks ().getByName (JavaPlugin .PROCESS_RESOURCES_TASK_NAME , t -> t .finalizedBy (GRAALPY_VFS_FILESLIST_TASK ));
114121
115122 project .afterEvaluate (p -> {
116123 checkAndAddDependencies ();
117-
118124 if (!extension .getPythonResourcesDirectory ().isPresent ()) {
119- ((ProcessResources ) project .getTasks ().getByName (JavaPlugin .PROCESS_RESOURCES_TASK_NAME )).with (project .copySpec ().from (installPackagesTask ));
125+ ((ProcessResources ) project .getTasks ().getByName (JavaPlugin .PROCESS_RESOURCES_TASK_NAME )).with (project .copySpec ().from (resourcesTask ));
126+ } else {
127+ project .getTasks ().getByName (JavaPlugin .CLASSES_TASK_NAME , t -> t .dependsOn (GRAALPY_RESOURCES_TASK ));
120128 }
121-
122- // Provide the default value after the isPresent check, otherwise isPresent always returns true
123- extension .getPythonResourcesDirectory ().convention (project .getLayout ().getBuildDirectory ().dir (DEFAULT_WRAPPER_DIRECTORY ));
124129 });
125-
126130 }
127131
128132 private void checkAndAddDependencies () {
129133 project .getDependencies ().add (JavaPlugin .IMPLEMENTATION_CONFIGURATION_NAME , "%s:%s:%s" .formatted (GRAALPY_GROUP_ID , PYTHON_LAUNCHER_ARTIFACT_ID , getGraalPyVersion (project )));
130134 project .getDependencies ().add (JavaPlugin .IMPLEMENTATION_CONFIGURATION_NAME , "%s:%s:%s" .formatted (GRAALPY_GROUP_ID , PYTHON_EMBEDDING_ARTIFACT_ID , getGraalPyVersion (project )));
131135 }
132136
133-
134137 public static String getGraalPyVersion (Project project ) {
135138 return getGraalPyDependency (project ).getVersion ();
136139 }
0 commit comments