Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Expand All @@ -39,6 +40,7 @@
import aQute.bnd.result.Result;
import aQute.bnd.service.Plugin;
import aQute.bnd.service.RegistryPlugin;
import aQute.bnd.service.Strategy;
import aQute.bnd.service.externalplugin.ExternalPluginNamespace;
import aQute.bnd.service.progress.ProgressPlugin.Task;
import aQute.bnd.service.progress.TaskManager;
Expand Down Expand Up @@ -111,31 +113,25 @@ public <T, R> Result<R> call(String pluginName, VersionRange range, Class<T> c,

public Result<Integer> call(String mainClass, VersionRange range, Processor context, Map<String, String> attrs,
List<String> args, InputStream stdin, OutputStream stdout, OutputStream stderr) {
List<File> cp = new ArrayList<>();
try {
String mainClassBin = Descriptors.fqnClassToBinary(mainClass);
boolean mainClassPresent = false;

Parameters cpp = new Parameters(attrs.get("classpath"));

for (Map.Entry<String, Attrs> e : cpp.entrySet()) {
String v = e.getValue()
.getVersion();
MavenVersion mv = MavenVersion.parseMavenString(v);
String classpath = attrs.get("classpath");
Result<List<File>> cpResult = getClasspath(classpath, context);
if (cpResult.isErr())
return cpResult.asError();

Result<File> result = workspace.getBundle(e.getKey(), mv.getOSGiVersion(), null);
if (result.isErr())
return result.asError();
List<File> cp = cpResult.unwrap();

try (Jar jar = new Jar(result.unwrap())) {
boolean mainClassPresent = false;
for (File file : cp) {
try (Jar jar = new Jar(file)) {
Resource resource = jar.getResource(mainClassBin);
if (resource != null) {
mainClassPresent = true;
}
}
cp.add(result.unwrap());
}

String filter = MainClassNamespace.filter(mainClass, range);

List<Capability> caps = workspace.findProviders(MainClassNamespace.MAINCLASS_NAMESPACE, filter)
Expand Down Expand Up @@ -175,8 +171,7 @@ public Result<Integer> call(String mainClass, VersionRange range, Processor cont
c.add(context.getProperty("java", IO.getJavaExecutablePath("java")));
c.add("-cp");

String classpath = Strings.join(File.pathSeparator, cp);
c.add(classpath);
c.add(Strings.join(File.pathSeparator, cp));

c.add(mainClass);

Expand All @@ -203,6 +198,46 @@ public Result<Integer> call(String mainClass, VersionRange range, Processor cont
}
}

private Result<List<File>> getClasspath(String classpath, Processor context) throws Exception {
List<File> cp = new ArrayList<>();

if (context instanceof Project project) {
try {
if (classpath != null && !classpath.isBlank()) {
Collection<Container> bundles = project.getBundles(Strategy.HIGHEST, classpath);
for (Container c : bundles) {
if (c.getError() != null) {
return Result.err("dependency has error %s", c);
} else if (!c.getFile()
.isFile()) {
return Result.err("dependency is not an existing file %s", c);
} else {
cp.add(c.getFile());
}
}
}
return Result.ok(cp);
} catch (Exception e) {
logger.debug("loading classpath via project, if it fails we try old way: {}", e, e);
}
}

Parameters cpp = new Parameters(classpath);

for (Map.Entry<String, Attrs> e : cpp.entrySet()) {
String v = e.getValue()
.getVersion();
MavenVersion mv = MavenVersion.parseMavenString(v);

Result<File> result = workspace.getBundle(e.getKey(), mv.getOSGiVersion(), null);
if (result.isErr())
return result.asError();

cp.add(result.unwrap());
}
return Result.ok(cp);
}

private Task getTask(Command c) {
return new Task() {

Expand Down
Loading