Skip to content

Commit d3bc833

Browse files
tomasstupkaelkorchi
authored andcommitted
extracted generating of native image config files from maven and gradle plugin into embedding.tools
(cherry picked from commit 7edb41a)
1 parent 14b7746 commit d3bc833

File tree

6 files changed

+47
-70
lines changed

6 files changed

+47
-70
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ graalpython/com.oracle.graal.python.test/src/tests/patched_package/build/
8787
graalpython/com.oracle.graal.python.test/src/tests/patched_package/src/patched_package.egg-info
8888
graalpython/com.oracle.graal.python.test.integration/target
8989
graalpython/graalpy-maven-plugin/target
90+
graalpython/graalpy-gradle-plugin/target
9091
graalpython/graalpy-archetype-polyglot-app/target
91-
graalpython/graalpy-micronaut-embedding/target
9292
graalpython/com.oracle.graal.python.test/src/tests/standalone/micronaut/hello/target/
9393
graalpython/com.oracle.graal.python.test/src/tests/cpyext/build/
9494
pom-mx.xml

graalpython/graalpy-gradle-plugin/pom.xml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ SOFTWARE.
5757
<maven.compiler.target>17</maven.compiler.target>
5858
<maven.compiler.source>17</maven.compiler.source>
5959
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
60+
<!-- XXX -->
6061
<graalpy.version>24.2.0</graalpy.version>
6162
<gradle.version>6.1.1</gradle.version>
6263
</properties>
@@ -158,10 +159,10 @@ SOFTWARE.
158159
</dependencies>
159160

160161
<repositories>
161-
<repository>
162-
<id>maven</id>
163-
<url>https://repo1.maven.org/maven2/</url>
164-
</repository>
162+
<!-- <repository>-->
163+
<!-- <id>maven</id>-->
164+
<!-- <url>https://repo1.maven.org/maven2/</url>-->
165+
<!-- </repository>-->
165166
<repository>
166167
<id>gradle</id>
167168
<url>https://repo.gradle.org/gradle/libs-releases/</url>

graalpython/graalpy-gradle-plugin/src/main/java/org/graalvm/python/GraalPyGradlePlugin.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,12 @@
5555
import java.util.Collections;
5656
import java.util.List;
5757

58+
import static org.graalvm.python.embedding.tools.vfs.VFSUtils.GRAALPY_GROUP_ID;
59+
5860

5961
public abstract class GraalPyGradlePlugin implements Plugin<Project> {
6062
private static final String PYTHON_LAUNCHER_ARTIFACT_ID = "python-launcher";
6163
private static final String PYTHON_EMBEDDING_ARTIFACT_ID = "python-embedding";
62-
public static final String GRAALPY_GROUP_ID = "org.graalvm.python";
6364

6465
private static final String POLYGLOT_GROUP_ID = "org.graalvm.polyglot";
6566
private static final String PYTHON_COMMUNITY_ARTIFACT_ID = "python-community";

graalpython/graalpy-gradle-plugin/src/main/java/org/graalvm/python/tasks/GenerateManifestTask.java

Lines changed: 3 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -40,59 +40,27 @@
4040
*/
4141
package org.graalvm.python.tasks;
4242

43+
import org.graalvm.python.embedding.tools.vfs.VFSUtils;
4344
import org.gradle.api.DefaultTask;
4445
import org.gradle.api.GradleScriptException;
4546
import org.gradle.api.file.DirectoryProperty;
4647
import org.gradle.api.tasks.OutputDirectory;
4748
import org.gradle.api.tasks.TaskAction;
48-
4949
import java.io.IOException;
50-
import java.nio.file.Files;
51-
import java.nio.file.Path;
52-
import java.nio.file.StandardOpenOption;
53-
54-
import static org.graalvm.python.GraalPyGradlePlugin.GRAALPY_GROUP_ID;
55-
import static org.graalvm.python.embedding.tools.vfs.VFSUtils.VFS_ROOT;
56-
5750

5851
public abstract class GenerateManifestTask extends DefaultTask {
5952

60-
private static final String NATIVE_IMAGE_RESOURCES_CONFIG = """
61-
{
62-
"resources": {
63-
"includes": [
64-
{"pattern": "$vfs/.*"}
65-
]
66-
}
67-
}
68-
""".replace("$vfs", VFS_ROOT);
69-
70-
private static final String NATIVE_IMAGE_ARGS = "Args = -H:-CopyLanguageResources";
7153
private static final String GRAALPY_GRADLE_PLUGIN_ARTIFACT_ID = "graalpy-gradle-plugin";
7254

7355
@OutputDirectory
7456
public abstract DirectoryProperty getManifestOutputDir();
7557

7658
@TaskAction
7759
public void generateManifest() {
78-
Path metaInf = getMetaInfDirectory();
79-
Path resourceConfig = metaInf.resolve("resource-config.json");
8060
try {
81-
Files.createDirectories(resourceConfig.getParent());
82-
Files.writeString(resourceConfig, NATIVE_IMAGE_RESOURCES_CONFIG, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
61+
VFSUtils.writeNativeImageConfig(getManifestOutputDir().get().getAsFile().getAbsolutePath(), GRAALPY_GRADLE_PLUGIN_ARTIFACT_ID);
8362
} catch (IOException e) {
84-
throw new GradleScriptException(String.format("failed to write %s", resourceConfig), e);
63+
throw new GradleScriptException(e.getMessage(), e);
8564
}
86-
Path nativeImageProperties = metaInf.resolve("native-image.properties");
87-
try {
88-
Files.createDirectories(nativeImageProperties.getParent());
89-
Files.writeString(nativeImageProperties, NATIVE_IMAGE_ARGS, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
90-
} catch (IOException e) {
91-
throw new GradleScriptException(String.format("failed to write %s", nativeImageProperties), e);
92-
}
93-
}
94-
95-
private Path getMetaInfDirectory() {
96-
return Path.of(getManifestOutputDir().get().getAsFile().getAbsolutePath(), "native-image", GRAALPY_GROUP_ID, GRAALPY_GRADLE_PLUGIN_ARTIFACT_ID);
9765
}
9866
}

graalpython/graalpy-maven-plugin/src/main/java/org/graalvm/python/maven/plugin/ManageResourcesMojo.java

Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
import static org.graalvm.python.embedding.tools.vfs.VFSUtils.VFS_HOME;
7070
import static org.graalvm.python.embedding.tools.vfs.VFSUtils.VFS_ROOT;
7171
import static org.graalvm.python.embedding.tools.vfs.VFSUtils.VFS_VENV;
72+
import static org.graalvm.python.embedding.tools.vfs.VFSUtils.GRAALPY_GROUP_ID;
7273

7374
@Mojo(name = "process-graalpy-resources", defaultPhase = LifecyclePhase.PROCESS_RESOURCES,
7475
requiresDependencyCollection = ResolutionScope.COMPILE_PLUS_RUNTIME,
@@ -78,7 +79,6 @@ public class ManageResourcesMojo extends AbstractMojo {
7879
private static final String PYTHON_LANGUAGE_ARTIFACT_ID = "python-language";
7980
private static final String PYTHON_RESOURCES = "python-resources";
8081
private static final String PYTHON_LAUNCHER_ARTIFACT_ID = "python-launcher";
81-
private static final String GRAALPY_GROUP_ID = "org.graalvm.python";
8282

8383
private static final String POLYGLOT_GROUP_ID = "org.graalvm.polyglot";
8484
private static final String PYTHON_COMMUNITY_ARTIFACT_ID = "python-community";
@@ -94,18 +94,6 @@ public class ManageResourcesMojo extends AbstractMojo {
9494

9595
private static final String EXCLUDE_PREFIX = "exclude:";
9696

97-
private static final String NATIVE_IMAGE_RESOURCES_CONFIG = """
98-
{
99-
"resources": {
100-
"includes": [
101-
{"pattern": "$vfs/.*"}
102-
]
103-
}
104-
}
105-
""".replace("$vfs", VFS_ROOT);
106-
107-
private static final String NATIVE_IMAGE_ARGS = "Args = -H:-CopyLanguageResources";
108-
10997
@Parameter(defaultValue = "${project}", required = true, readonly = true)
11098
MavenProject project;
11199

@@ -131,10 +119,6 @@ public static class PythonHome {
131119

132120
private Set<String> launcherClassPath;
133121

134-
static Path getMetaInfDirectory(MavenProject project) {
135-
return Path.of(project.getBuild().getOutputDirectory(), "META-INF", "native-image", GRAALPY_GROUP_ID, GRAALPY_MAVEN_PLUGIN_ARTIFACT_ID);
136-
}
137-
138122
public void execute() throws MojoExecutionException {
139123

140124
if(pythonResourcesDirectory != null) {
@@ -177,20 +161,10 @@ private void trim(List<String> l) {
177161
}
178162

179163
private void manageNativeImageConfig() throws MojoExecutionException {
180-
Path metaInf = getMetaInfDirectory(project);
181-
Path resourceConfig = metaInf.resolve("resource-config.json");
182-
try {
183-
Files.createDirectories(resourceConfig.getParent());
184-
Files.writeString(resourceConfig, NATIVE_IMAGE_RESOURCES_CONFIG, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
185-
} catch (IOException e) {
186-
throw new MojoExecutionException(String.format("failed to write %s", resourceConfig), e);
187-
}
188-
Path nativeImageProperties = metaInf.resolve("native-image.properties");
189164
try {
190-
Files.createDirectories(nativeImageProperties.getParent());
191-
Files.writeString(nativeImageProperties, NATIVE_IMAGE_ARGS, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
165+
VFSUtils.writeNativeImageConfig(project.getBuild().getOutputDirectory(), GRAALPY_MAVEN_PLUGIN_ARTIFACT_ID);
192166
} catch (IOException e) {
193-
throw new MojoExecutionException(String.format("failed to write %s", nativeImageProperties), e);
167+
throw new MojoExecutionException(e);
194168
}
195169
}
196170

graalpython/org.graalvm.python.embedding.tools/src/org/graalvm/python/embedding/tools/vfs/VFSUtils.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import java.nio.file.Path;
5252
import java.nio.file.Paths;
5353
import java.nio.file.SimpleFileVisitor;
54+
import java.nio.file.StandardOpenOption;
5455
import java.nio.file.attribute.BasicFileAttributes;
5556
import java.util.ArrayList;
5657
import java.util.Arrays;
@@ -69,6 +70,38 @@ public final class VFSUtils {
6970
public static final String VFS_VENV = "venv";
7071
public static final String VFS_FILESLIST = "fileslist.txt";
7172

73+
public static final String GRAALPY_GROUP_ID = "org.graalvm.python";
74+
75+
private static final String NATIVE_IMAGE_RESOURCES_CONFIG = """
76+
{
77+
"resources": {
78+
"includes": [
79+
{"pattern": "$vfs/.*"}
80+
]
81+
}
82+
}
83+
""".replace("$vfs", VFS_ROOT);
84+
85+
private static final String NATIVE_IMAGE_ARGS = "Args = -H:-CopyLanguageResources";
86+
87+
public static void writeNativeImageConfig(String metaInfRoot, String pluginId) throws IOException {
88+
Path metaInf = Path.of(metaInfRoot, "META-INF", "native-image", GRAALPY_GROUP_ID, pluginId);
89+
Path resourceConfig = metaInf.resolve("resource-config.json");
90+
try {
91+
Files.createDirectories(resourceConfig.getParent());
92+
Files.writeString(resourceConfig, NATIVE_IMAGE_RESOURCES_CONFIG, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
93+
} catch (IOException e) {
94+
throw new IOException(String.format("failed to write %s", resourceConfig), e);
95+
}
96+
Path nativeImageProperties = metaInf.resolve("native-image.properties");
97+
try {
98+
Files.createDirectories(nativeImageProperties.getParent());
99+
Files.writeString(nativeImageProperties, NATIVE_IMAGE_ARGS, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
100+
} catch (IOException e) {
101+
throw new IOException(String.format("failed to write %s", nativeImageProperties), e);
102+
}
103+
}
104+
72105
public static void generateVFSFilesList(Path vfs) throws IOException {
73106
Path filesList = vfs.resolve(VFS_FILESLIST);
74107
if (!Files.isDirectory(vfs)) {

0 commit comments

Comments
 (0)