From 13079293d557eb8f0d043d8666b2fd04e5cd9abf Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Fri, 23 Jan 2026 11:49:48 +0100 Subject: [PATCH 1/6] use the new interface to the packager to copy to a new folder instead of rewriting in place. the new target folder is set such that downstream plugins see the new folder and not the old --- .../java/org/rascalmpl/maven/PackageRascalMojo.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/java/org/rascalmpl/maven/PackageRascalMojo.java b/src/main/java/org/rascalmpl/maven/PackageRascalMojo.java index 245dd05..c55cd6d 100644 --- a/src/main/java/org/rascalmpl/maven/PackageRascalMojo.java +++ b/src/main/java/org/rascalmpl/maven/PackageRascalMojo.java @@ -12,6 +12,7 @@ */ package org.rascalmpl.maven; +import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; @@ -31,12 +32,24 @@ public class PackageRascalMojo extends AbstractRascalMojo @Parameter(defaultValue = "|mvn://${project.groupId}--${project.name}--${project.version}/|", property = "sourceLookup", required = true ) private String sourceLookup; + @Parameter(defaultValue = "${project.basedir}/target/relocatedClasses", property = "relocatedClasses", required = true ) + private String relocatedClasses; + public PackageRascalMojo() { super("org.rascalmpl.shell.RascalPackage", "package"); } + @Override + public void execute() throws MojoExecutionException { + super.execute(); + + // after this the other plugins (like the shader) should use the new folder + project.getBuild().setOutputDirectory(relocatedClasses); + } + @Override protected void setExtraParameters() { extraParameters.put("sourceLookup", sourceLookup); + extraParameters.put("relocatedClasses", relocatedClasses); } } From 60ad2512cebcca8e406851e830f45cfeb522ef2e Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Fri, 23 Jan 2026 11:51:03 +0100 Subject: [PATCH 2/6] improved error handling and cleanup of nested processes in case of errors --- .../rascalmpl/maven/AbstractRascalMojo.java | 33 ++++++++++++++----- .../org/rascalmpl/maven/TutorRascalMojo.java | 16 ++++----- 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java b/src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java index 7820594..df51013 100644 --- a/src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java +++ b/src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java @@ -64,7 +64,7 @@ public abstract class AbstractRascalMojo extends AbstractMojo @Parameter(defaultValue="${project}", readonly=true, required=true) protected MavenProject project; - @Parameter(property="memory", defaultValue="2G", readonly=true, required=false) + @Parameter(property="memory", defaultValue="2G", readonly=false, required=false) protected String memory; @Parameter(defaultValue = "${project.build.outputDirectory}", property = "bin", required = true ) @@ -88,7 +88,7 @@ public abstract class AbstractRascalMojo extends AbstractMojo @Parameter(defaultValue = "${session}", required = true, readonly = true) protected MavenSession session; - @Parameter(defaultValue = "0.41.0-RC49", required = false, readonly = false) + @Parameter(defaultValue = "0.41.3-SNAPSHOT", required = false, readonly = false) protected String bootstrapRascalVersion; @SuppressWarnings("deprecation") // Can't get @Parameter to work for the pluginManager. @@ -169,11 +169,9 @@ public void execute() throws MojoExecutionException { } for (File resource : resources) { - getLog().debug("\tcopying resources: " + resource); + getLog().debug("\tregistered resource: " + resource); } - getLog().info("Checking if any files need compilation..."); - libs.addAll(collectDependentArtifactLibraries(project)); for (File lib : libs) { @@ -184,7 +182,7 @@ public void execute() throws MojoExecutionException { setExtraParameters(); - runMain( + int result = runMain( verbose, "", srcs, @@ -196,13 +194,19 @@ public void execute() throws MojoExecutionException { true) .waitFor(); + if (result != 0) { + throw new MojoExecutionException(mainClass + "terminated with errors. Exit code was " + result); + } return; } catch (InterruptedException e) { - throw new MojoExecutionException("nested " + mainClass + " was killed", e); + throw new MojoExecutionException(mainClass + " process was killed.", e); + } + catch (MojoExecutionException e) { + throw e; } catch (Throwable e) { - throw new MojoExecutionException("error launching " + mainClass, e); + throw new MojoExecutionException(mainClass + " process execution threw an unexpected exception.", e); } } @@ -386,7 +390,18 @@ protected Process runMain(boolean verbose, String moreClasspath, List srcs p.redirectErrorStream(true); } - return p.start(); + Process runningProcess = p.start(); + + // try to clean up the forked process as nicely as possible if we get killed prematurely ourselves + Runtime.getRuntime().addShutdownHook(new Thread("shutdown-hook-" + mainClass) { + public synchronized void start() { + if (runningProcess != null && runningProcess.isAlive()) { + runningProcess.destroy(); + } + }; + }); + + return runningProcess; } protected List getTodoList(File binLoc, List srcLocs, List ignoredLocs, String dirtyExtension, String binaryExtension, String binaryPrefix) throws InclusionScanException, URISyntaxException { diff --git a/src/main/java/org/rascalmpl/maven/TutorRascalMojo.java b/src/main/java/org/rascalmpl/maven/TutorRascalMojo.java index 602154b..e107424 100644 --- a/src/main/java/org/rascalmpl/maven/TutorRascalMojo.java +++ b/src/main/java/org/rascalmpl/maven/TutorRascalMojo.java @@ -102,23 +102,23 @@ public void execute() throws MojoExecutionException { return; } - getLog().info("configuring paths"); + getLog().debug("configuring paths"); for (File src : srcs) { - getLog().info("\tregistered source location: " + src); + getLog().debug("\tregistered source location: " + src); } for (File ignore : ignores) { - getLog().warn("\tignoring sources in: " + ignore); + getLog().debug("\tignoring sources in: " + ignore); } var deps = collectDependentArtifactLibraries(project); libs.addAll(deps); for (File lib : libs) { - getLog().info("\tregistered library location: " + lib); + getLog().debug("\tregistered library location: " + lib); } - getLog().info("Paths have been configured."); + getLog().debug("Paths have been configured."); extraParameters.putAll(Map.of( "license", license, @@ -161,15 +161,15 @@ public void execute() throws MojoExecutionException { .waitFor(); if (exitCode != 0) { - throw new MojoExecutionException("tutor returned non-zero exit status"); + throw new MojoExecutionException(mainClass + " terminated with errors."); } } catch (InterruptedException e) { - throw new MojoExecutionException("nested " + mainClass + " was killed", e); + throw new MojoExecutionException(mainClass + " was killed.", e); } catch (Throwable e) { - throw new MojoExecutionException("error launching " + mainClass, e); + throw new MojoExecutionException(mainClass + " terminated with an exception.", e); } } From 286707da57b5e9de9a572bee73e21420e34cc0dc Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Fri, 23 Jan 2026 12:18:09 +0100 Subject: [PATCH 3/6] bumped reference rascal to 0.41.3-RC1 --- src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java b/src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java index df51013..5b17063 100644 --- a/src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java +++ b/src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java @@ -273,7 +273,7 @@ protected List collectDependentArtifactLibraries(MavenProject project) thr } protected final ArtifactVersion getReferenceRascalVersion() { - return new DefaultArtifactVersion("0.41.0-RC30"); + return new DefaultArtifactVersion("0.41.3-RC1"); } protected Path installBootstrapRascalVersion(MavenProject project, MavenSession session) throws MojoExecutionException { From cb448c720f4271198fd4bfc8cd4414cd7f0e7f52 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Fri, 23 Jan 2026 16:34:01 +0100 Subject: [PATCH 4/6] refactored shutdownhook --- .../java/org/rascalmpl/maven/AbstractRascalMojo.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java b/src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java index 5b17063..1fa953d 100644 --- a/src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java +++ b/src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java @@ -393,13 +393,13 @@ protected Process runMain(boolean verbose, String moreClasspath, List srcs Process runningProcess = p.start(); // try to clean up the forked process as nicely as possible if we get killed prematurely ourselves - Runtime.getRuntime().addShutdownHook(new Thread("shutdown-hook-" + mainClass) { - public synchronized void start() { - if (runningProcess != null && runningProcess.isAlive()) { + if (runningProcess != null) { + Runtime.getRuntime().addShutdownHook(() -> { + if (runningProcess.isAlive()) { runningProcess.destroy(); } - }; - }); + }); + } return runningProcess; } From df53ef73108e21136cff81fd20e31e1ceaede6c5 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Fri, 23 Jan 2026 16:35:23 +0100 Subject: [PATCH 5/6] set the rascal version, again --- src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java b/src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java index 1fa953d..aecacc4 100644 --- a/src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java +++ b/src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java @@ -88,7 +88,7 @@ public abstract class AbstractRascalMojo extends AbstractMojo @Parameter(defaultValue = "${session}", required = true, readonly = true) protected MavenSession session; - @Parameter(defaultValue = "0.41.3-SNAPSHOT", required = false, readonly = false) + @Parameter(defaultValue = "0.41.3-RC1", required = false, readonly = false) protected String bootstrapRascalVersion; @SuppressWarnings("deprecation") // Can't get @Parameter to work for the pluginManager. From 3c653f6f80ec2c5e6974aff4ccc56348445f8b08 Mon Sep 17 00:00:00 2001 From: "Jurgen J. Vinju" Date: Mon, 26 Jan 2026 10:14:50 +0100 Subject: [PATCH 6/6] fixed java compilation error --- src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java b/src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java index d082594..be141d3 100644 --- a/src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java +++ b/src/main/java/org/rascalmpl/maven/AbstractRascalMojo.java @@ -396,11 +396,11 @@ protected Process runMain(boolean verbose, String moreClasspath, List srcs // try to clean up the forked process as nicely as possible if we get killed prematurely ourselves if (runningProcess != null) { - Runtime.getRuntime().addShutdownHook(() -> { + Runtime.getRuntime().addShutdownHook(new Thread(() -> { if (runningProcess.isAlive()) { runningProcess.destroy(); } - }); + })); } return runningProcess;