58
58
import java .util .List ;
59
59
60
60
import static org .graalvm .python .embedding .tools .vfs .VFSUtils .GRAALPY_GROUP_ID ;
61
+ import static org .graalvm .python .embedding .tools .vfs .VFSUtils .VFS_ROOT ;
61
62
62
63
63
64
public abstract class GraalPyGradlePlugin implements Plugin <Project > {
@@ -67,7 +68,8 @@ public abstract class GraalPyGradlePlugin implements Plugin<Project> {
67
68
private static final String PYTHON_COMMUNITY_ARTIFACT_ID = "python-community" ;
68
69
private static final String PYTHON_ARTIFACT_ID = "python" ;
69
70
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" ;
71
73
private static final String GRAALPY_RESOURCES_TASK = "graalPyResources" ;
72
74
private static final String GRAALPY_NATIVE_IMAGE_CONFIG_TASK = "graalPyNativeImageConfig" ;
73
75
private static final String GRAALPY_VFS_FILESLIST_TASK = "graalPyVFSFilesList" ;
@@ -86,51 +88,52 @@ public void apply(Project project) {
86
88
extension .getPythonHome ().getExcludes ().convention (Collections .emptyList ());
87
89
extension .getPackages ().convention (Collections .emptyList ());
88
90
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 -> {
91
93
t .getIncludes ().set (extension .getPythonHome ().getIncludes ());
92
94
t .getExcludes ().set (extension .getPythonHome ().getExcludes ());
93
95
t .getPackages ().set (extension .getPackages ());
94
- t .getIncludeVfsRoot ().set (extension .getIncludeVfsRootDir ());
95
96
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
+ }
97
104
98
105
t .setGroup (GRAALPY_GRADLE_PLUGIN_TASK_GROUP );
99
106
});
100
107
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 ));
105
112
t .setGroup (GRAALPY_GRADLE_PLUGIN_TASK_GROUP );
106
113
});
107
114
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 -> {
110
117
t .getResourcesDir ().convention ((((ProcessResources ) project .getTasks ().getByName (JavaPlugin .PROCESS_RESOURCES_TASK_NAME )).getDestinationDir ()));
111
118
t .setGroup (GRAALPY_GRADLE_PLUGIN_TASK_GROUP );
112
119
});
113
120
project .getTasks ().getByName (JavaPlugin .PROCESS_RESOURCES_TASK_NAME , t -> t .finalizedBy (GRAALPY_VFS_FILESLIST_TASK ));
114
121
115
122
project .afterEvaluate (p -> {
116
123
checkAndAddDependencies ();
117
-
118
124
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 ));
120
128
}
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 ));
124
129
});
125
-
126
130
}
127
131
128
132
private void checkAndAddDependencies () {
129
133
project .getDependencies ().add (JavaPlugin .IMPLEMENTATION_CONFIGURATION_NAME , "%s:%s:%s" .formatted (GRAALPY_GROUP_ID , PYTHON_LAUNCHER_ARTIFACT_ID , getGraalPyVersion (project )));
130
134
project .getDependencies ().add (JavaPlugin .IMPLEMENTATION_CONFIGURATION_NAME , "%s:%s:%s" .formatted (GRAALPY_GROUP_ID , PYTHON_EMBEDDING_ARTIFACT_ID , getGraalPyVersion (project )));
131
135
}
132
136
133
-
134
137
public static String getGraalPyVersion (Project project ) {
135
138
return getGraalPyDependency (project ).getVersion ();
136
139
}
0 commit comments