projects
/
cc0
/
argeo-build.git
/ commitdiff
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
d1dda80
)
Improve build classpath
author
Mathieu Baudier <mbaudier@argeo.org>
Fri, 17 Mar 2023 05:36:01 +0000
(06:36 +0100)
committer
Mathieu Baudier <mbaudier@argeo.org>
Fri, 17 Mar 2023 05:36:01 +0000
(06:36 +0100)
src/org/argeo/build/Make.java
patch
|
blob
|
history
diff --git
a/src/org/argeo/build/Make.java
b/src/org/argeo/build/Make.java
index fa903c3d026c27bffdc9a85601748ec8c07f3da1..782cfed024bd0af26af1cd359018d5e41d95cc9c 100644
(file)
--- a/
src/org/argeo/build/Make.java
+++ b/
src/org/argeo/build/Make.java
@@
-21,12
+21,14
@@
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Properties;
import java.util.StringJoiner;
import java.util.StringTokenizer;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Properties;
import java.util.StringJoiner;
import java.util.StringTokenizer;
+import java.util.TreeMap;
import java.util.concurrent.CompletableFuture;
import java.util.jar.Attributes;
import java.util.jar.JarEntry;
import java.util.concurrent.CompletableFuture;
import java.util.jar.Attributes;
import java.util.jar.JarEntry;
@@
-126,7
+128,7
@@
public class Make {
List<String> a2Categories = options.getOrDefault("--dep-categories", new ArrayList<>());
List<String> a2Bases = options.getOrDefault("--a2-bases", new ArrayList<>());
List<String> a2Categories = options.getOrDefault("--dep-categories", new ArrayList<>());
List<String> a2Bases = options.getOrDefault("--a2-bases", new ArrayList<>());
- if (a2Bases.isEmpty()) {
+ if (a2Bases.isEmpty()
|| !a2Bases.contains(a2Output.toString())
) {
a2Bases.add(a2Output.toString());
}
a2Bases.add(a2Output.toString());
}
@@
-137,7
+139,10
@@
public class Make {
// classpath
if (!a2Categories.isEmpty()) {
// classpath
if (!a2Categories.isEmpty()) {
- StringJoiner classPath = new StringJoiner(File.pathSeparator);
+ // We will keep only the highest major.minor
+ // and order by bundle name, for predictability
+ Map<String, A2Jar> a2Jars = new TreeMap<>();
+
StringJoiner modulePath = new StringJoiner(File.pathSeparator);
for (String a2Base : a2Bases) {
categories: for (String a2Category : a2Categories) {
StringJoiner modulePath = new StringJoiner(File.pathSeparator);
for (String a2Base : a2Bases) {
categories: for (String a2Category : a2Categories) {
@@
-147,10
+152,27
@@
public class Make {
modulePath.add(a2Dir.toString());
for (Path jarP : Files.newDirectoryStream(a2Dir,
(p) -> p.getFileName().toString().endsWith(".jar"))) {
modulePath.add(a2Dir.toString());
for (Path jarP : Files.newDirectoryStream(a2Dir,
(p) -> p.getFileName().toString().endsWith(".jar"))) {
- classPath.add(jarP.toString());
+ // classPath.add(jarP.toString());
+ A2Jar a2Jar = new A2Jar(jarP);
+ if (a2Jars.containsKey(a2Jar.name)) {
+ A2Jar current = a2Jars.get(a2Jar.name);
+ if (a2Jar.major > current.major)
+ a2Jars.put(a2Jar.name, a2Jar);
+ else if (a2Jar.major == current.major //
+ // if minor equals, we take the last one
+ && a2Jar.minor >= current.minor)
+ a2Jars.put(a2Jar.name, a2Jar);
+ } else {
+ a2Jars.put(a2Jar.name, a2Jar);
+ }
}
}
}
}
}
}
+
+ StringJoiner classPath = new StringJoiner(File.pathSeparator);
+ for (Iterator<A2Jar> it = a2Jars.values().iterator(); it.hasNext();)
+ classPath.add(it.next().path.toString());
+
compilerArgs.add("-cp");
compilerArgs.add(classPath.toString());
// compilerArgs.add("--module-path");
compilerArgs.add("-cp");
compilerArgs.add(classPath.toString());
// compilerArgs.add("--module-path");
@@
-469,6
+491,23
@@
public class Make {
}
}
}
}
+ static class A2Jar {
+ final Path path;
+ final String name;
+ final int major;
+ final int minor;
+
+ A2Jar(Path path) {
+ this.path = path;
+ String fileName = path.getFileName().toString();
+ fileName = fileName.substring(0, fileName.lastIndexOf('.'));
+ minor = Integer.parseInt(fileName.substring(fileName.lastIndexOf('.') + 1));
+ fileName = fileName.substring(0, fileName.lastIndexOf('.'));
+ major = Integer.parseInt(fileName.substring(fileName.lastIndexOf('.') + 1));
+ name = fileName.substring(0, fileName.lastIndexOf('.'));
+ }
+ }
+
/**
* An ECJ {@link CompilationProgress} printing a progress bar while compiling.
*/
/**
* An ECJ {@link CompilationProgress} printing a progress bar while compiling.
*/