From d8b7ac1368c49c1930568b4c49f5233a3ca03ba3 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Fri, 12 Apr 2024 13:04:31 +0200 Subject: [PATCH] Generate JPMS module-info --- src/org/argeo/build/Make.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/org/argeo/build/Make.java b/src/org/argeo/build/Make.java index e1e81de..05f95b3 100644 --- a/src/org/argeo/build/Make.java +++ b/src/org/argeo/build/Make.java @@ -45,6 +45,7 @@ import org.eclipse.jdt.core.compiler.CompilationProgress; import aQute.bnd.osgi.Analyzer; import aQute.bnd.osgi.Jar; +import aQute.bnd.osgi.Resource; import aQute.bnd.plugin.jpms.JPMSModuleInfoPlugin; /** @@ -482,6 +483,7 @@ public class Make { if (!Files.exists(binP)) Files.createDirectories(binP); Manifest manifest; + Resource moduleInfoClass = null; try (Analyzer bndAnalyzer = new Analyzer()) { bndAnalyzer.setProperties(properties); Jar jar = new Jar(bundleSymbolicName, binP.toFile()); @@ -492,6 +494,7 @@ public class Make { jar.setManifest(manifest); JPMSModuleInfoPlugin jpmsModuleInfoPlugin = new JPMSModuleInfoPlugin(); jpmsModuleInfoPlugin.verify(bndAnalyzer); + moduleInfoClass = jar.getResource("module-info.class"); } catch (Exception e) { throw new RuntimeException("Bnd analysis of " + compiled + " failed", e); } @@ -508,6 +511,17 @@ public class Make { manifest.write(out); } + // Write module-info.class + if (moduleInfoClass != null) { + Path moduleInfoClassP = compiled.resolve("module-info.class"); + Files.createDirectories(moduleInfoClassP.getParent()); + try (OutputStream out = Files.newOutputStream(moduleInfoClassP)) { + moduleInfoClass.write(out); + } catch (Exception e) { + throw new RuntimeException("Cannot write module-info.class"); + } + } + // Load excludes List excludes = new ArrayList<>(); Path excludesP = argeoBuildBase.resolve("excludes.txt"); -- 2.30.2