From 8a6b9dace8e85e76675e1e85c8f88959f80c16f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20L=C3=A4ubrich?= Date: Mon, 27 Nov 2023 16:04:04 +0100 Subject: [PATCH] Support sub bundles build Currently PDE only builds the "main bundle" but not sub-bundles, this adds support for building these as well. --- ui/org.eclipse.pde.core/META-INF/MANIFEST.MF | 2 +- .../pde/internal/core/bnd/BndBuilder.java | 30 ++++++++++++++++++- .../internal/core/bnd/BndErrorReporter.java | 6 ++-- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF index 2ce192598f..b9414e2680 100644 --- a/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF +++ b/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %name Bundle-SymbolicName: org.eclipse.pde.core; singleton:=true -Bundle-Version: 3.17.300.qualifier +Bundle-Version: 3.17.400.qualifier Bundle-Activator: org.eclipse.pde.internal.core.PDECore Bundle-Vendor: %provider-name Bundle-Localization: plugin diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bnd/BndBuilder.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bnd/BndBuilder.java index 225116ec2d..9d5ae34b1b 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bnd/BndBuilder.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bnd/BndBuilder.java @@ -13,6 +13,8 @@ *******************************************************************************/ package org.eclipse.pde.internal.core.bnd; +import java.io.File; +import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; @@ -42,6 +44,8 @@ import aQute.bnd.build.Project; import aQute.bnd.build.ProjectBuilder; +import aQute.bnd.osgi.Builder; +import aQute.bnd.osgi.Jar; public class BndBuilder extends IncrementalProjectBuilder { @@ -154,8 +158,32 @@ public void addClasspath(aQute.bnd.osgi.Jar jar) { builder.setBase(bnd.getBase()); ProjectJar jar = new ProjectJar(project, CLASS_FILTER); builder.setJar(jar); + // build the main jar builder.build(); - new BndErrorReporter(project, bnd).validateContent(monitor); + new BndErrorReporter(project, bnd, project.getFile(BndProject.INSTRUCTIONS_FILE)) + .validateContent(monitor); + // now build sub jars + List subBuilders = builder.getSubBuilders(); + if (subBuilders.size() > 0) { + for (Builder subBuilder : subBuilders) { + File outputFile = subBuilder.getOutputFile(null); + if (outputFile != null) { + Jar subJar = subBuilder.build(); + subJar.write(outputFile); + for (IFile file : project.getWorkspace().getRoot() + .findFilesForLocationURI(outputFile.toURI())) { + file.refreshLocal(IResource.DEPTH_ZERO, monitor); + } + File propertiesFile = subBuilder.getPropertiesFile(); + if (propertiesFile != null) { + for (IFile file : project.getWorkspace().getRoot() + .findFilesForLocationURI(propertiesFile.toURI())) { + new BndErrorReporter(project, subBuilder, file).validateContent(monitor); + } + } + } + } + } } if (monitor.isCanceled()) { return; diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bnd/BndErrorReporter.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bnd/BndErrorReporter.java index f72228a6bc..e0b76aec9a 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bnd/BndErrorReporter.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bnd/BndErrorReporter.java @@ -13,13 +13,13 @@ *******************************************************************************/ package org.eclipse.pde.internal.core.bnd; +import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.text.IDocument; import org.eclipse.pde.internal.core.builders.CompilerFlags; import org.eclipse.pde.internal.core.builders.ErrorReporter; import org.eclipse.pde.internal.core.builders.PDEMarkerFactory; -import org.eclipse.pde.internal.core.natures.BndProject; import aQute.bnd.properties.IRegion; import aQute.bnd.properties.LineType; @@ -32,8 +32,8 @@ public class BndErrorReporter extends ErrorReporter { private BndDocument bndDocument; private final Report report; - public BndErrorReporter(IProject project, Report report) { - super(project.getFile(BndProject.INSTRUCTIONS_FILE)); + public BndErrorReporter(IProject project, Report report, IFile file) { + super(file); this.report = report; IDocument document = createDocument(fFile); if (document != null) {