diff --git a/.idea/app.iml b/.idea/app.iml
index 707518b..0809558 100644
--- a/.idea/app.iml
+++ b/.idea/app.iml
@@ -27,6 +27,5 @@
-
\ No newline at end of file
diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml
index 867d049..0a7a3e9 100644
--- a/.idea/libraries/bld.xml
+++ b/.idea/libraries/bld.xml
@@ -2,12 +2,12 @@
-
+
-
+
diff --git a/.idea/libraries/runtime.xml b/.idea/libraries/runtime.xml
index 2ae5c4b..0ac86f6 100644
--- a/.idea/libraries/runtime.xml
+++ b/.idea/libraries/runtime.xml
@@ -3,6 +3,7 @@
+
diff --git a/.idea/libraries/test.xml b/.idea/libraries/test.xml
index ce3c795..8e2361c 100644
--- a/.idea/libraries/test.xml
+++ b/.idea/libraries/test.xml
@@ -11,9 +11,9 @@
-
-
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/Run Tests.xml b/.idea/runConfigurations/Run_all_tests.xml
similarity index 78%
rename from .idea/runConfigurations/Run Tests.xml
rename to .idea/runConfigurations/Run_all_tests.xml
index f60aaeb..2388b07 100644
--- a/.idea/runConfigurations/Run Tests.xml
+++ b/.idea/runConfigurations/Run_all_tests.xml
@@ -1,6 +1,7 @@
-
+
+
diff --git a/.idea/runConfigurations/Run_bld_tests.xml b/.idea/runConfigurations/Run_bld_tests.xml
new file mode 100644
index 0000000..94ce292
--- /dev/null
+++ b/.idea/runConfigurations/Run_bld_tests.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/scala_compiler.xml b/.idea/scala_compiler.xml
new file mode 100644
index 0000000..3c0e0f6
--- /dev/null
+++ b/.idea/scala_compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core b/core
index d965055..b94124f 160000
--- a/core
+++ b/core
@@ -1 +1 @@
-Subproject commit d965055ac90308ced33c6c0b95a3db38c6e43a69
+Subproject commit b94124fe6d0fd40974f3e882f2ac1335f095ce80
diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar
index 28104f0..3fa6557 100644
Binary files a/lib/bld/bld-wrapper.jar and b/lib/bld/bld-wrapper.jar differ
diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties
index 5370ffd..0116e67 100644
--- a/lib/bld/bld-wrapper.properties
+++ b/lib/bld/bld-wrapper.properties
@@ -8,4 +8,4 @@ bld.javaOptions=
bld.javacOptions=
bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES
bld.sourceDirectories=core/src/bld/java
-bld.version=2.0.1
\ No newline at end of file
+bld.version=2.0.0-SNAPSHOT
\ No newline at end of file
diff --git a/src/main/java/rife/bld/BaseProject.java b/src/main/java/rife/bld/BaseProject.java
index 74d0bd8..3fd1f10 100644
--- a/src/main/java/rife/bld/BaseProject.java
+++ b/src/main/java/rife/bld/BaseProject.java
@@ -5,6 +5,7 @@
package rife.bld;
import rife.bld.dependencies.*;
+import rife.bld.dependencies.Module;
import rife.bld.help.*;
import rife.bld.operations.*;
import rife.tools.FileUtils;
@@ -245,6 +246,13 @@ public class BaseProject extends BuildExecutor {
* @since 1.5
*/
protected File libCompileDirectory = null;
+ /**
+ * The modules compile scope lib directory.
+ *
+ * @see #libCompileModulesDirectory()
+ * @since 2.1
+ */
+ protected File libCompileModulesDirectory = null;
/**
* The provided scope lib directory.
*
@@ -252,6 +260,13 @@ public class BaseProject extends BuildExecutor {
* @since 1.8
*/
protected File libProvidedDirectory = null;
+ /**
+ * The modules provided scope lib directory.
+ *
+ * @see #libProvidedModulesDirectory()
+ * @since 2.1
+ */
+ protected File libProvidedModulesDirectory = null;
/**
* The runtime scope lib directory.
*
@@ -259,6 +274,13 @@ public class BaseProject extends BuildExecutor {
* @since 1.5
*/
protected File libRuntimeDirectory = null;
+ /**
+ * The modules runtime scope lib directory.
+ *
+ * @see #libRuntimeModulesDirectory()
+ * @since 2.1
+ */
+ protected File libRuntimeModulesDirectory = null;
/**
* The standalone scope lib directory.
*
@@ -267,12 +289,26 @@ public class BaseProject extends BuildExecutor {
*/
protected File libStandaloneDirectory = null;
/**
- * The standalone scope lib directory.
+ * The modules standalone scope lib directory.
+ *
+ * @see #libStandaloneModulesDirectory()
+ * @since 2.1
+ */
+ protected File libStandaloneModulesDirectory = null;
+ /**
+ * The test scope lib directory.
*
* @see #libTestDirectory()
* @since 1.5
*/
protected File libTestDirectory = null;
+ /**
+ * The modules test scope lib directory.
+ *
+ * @see #libTestModulesDirectory()
+ * @since 2.1
+ */
+ protected File libTestModulesDirectory = null;
/**
* The build directory.
*
@@ -860,6 +896,101 @@ public class BaseProject extends BuildExecutor {
return new LocalDependency(path);
}
+ /**
+ * Creates a new module instance.
+ *
+ * @param groupId the module group identifier
+ * @param artifactId the module artifact identifier
+ * @return a newly created {@code Module} instance
+ * @since 2.1
+ */
+ public Module module(String groupId, String artifactId) {
+ return new Module(groupId, artifactId);
+ }
+
+ /**
+ * Creates a new module instance.
+ *
+ * @param groupId the module group identifier
+ * @param artifactId the module artifact identifier
+ * @param version the module version
+ * @return a newly created {@code Module} instance
+ * @since 2.1
+ */
+ public Module module(String groupId, String artifactId, String version) {
+ return new Module(groupId, artifactId, version(version));
+ }
+
+ /**
+ * Creates a new module instance.
+ *
+ * @param groupId the module group identifier
+ * @param artifactId the module artifact identifier
+ * @param version the module version
+ * @param classifier the module classifier
+ * @return a newly created {@code Module} instance
+ * @since 2.1
+ */
+ public Module module(String groupId, String artifactId, String version, String classifier) {
+ return new Module(groupId, artifactId, version(version), classifier);
+ }
+
+ /**
+ * Creates a new module instance.
+ *
+ * @param groupId the module group identifier
+ * @param artifactId the module artifact identifier
+ * @param version the module version
+ * @return a newly created {@code Module} instance
+ * @since 2.1
+ */
+ public Module module(String groupId, String artifactId, Version version) {
+ return new Module(groupId, artifactId, version);
+ }
+
+ /**
+ * Creates a new module instance.
+ *
+ * @param groupId the module group identifier
+ * @param artifactId the module artifact identifier
+ * @param version the module version
+ * @param classifier the module classifier
+ * @return a newly created {@code Module} instance
+ * @since 2.1
+ */
+ public Module module(String groupId, String artifactId, Version version, String classifier) {
+ return new Module(groupId, artifactId, version, classifier);
+ }
+
+ /**
+ * Creates a new module instance from a string representation.
+ * The format is {@code groupId:artifactId:version:classifier}.
+ * The {@code version} and {@code classifier} are optional.
+ *
+ * If the string can't be successfully parsed, {@code null} will be returned.
+ *
+ * @param description the module string to parse
+ * @return a parsed instance of {@code Module}; or
+ * {@code null} when the string couldn't be parsed
+ * @since 2.1
+ */
+ public Module module(String description) {
+ return Module.parse(description);
+ }
+
+ /**
+ * Creates a local module instance.
+ *
+ * If the local module points to a directory, it will be scanned for jar files.
+ *
+ * @param path the file system path of the local module
+ * @since 2.1
+ */
+
+ public LocalModule localModule(String path) {
+ return new LocalModule(path);
+ }
+
/*
* Project directories
*/
@@ -1012,6 +1143,16 @@ public class BaseProject extends BuildExecutor {
return Objects.requireNonNullElseGet(libCompileDirectory, () -> new File(libDirectory(), "compile"));
}
+ /**
+ * Returns the project modules compile scope lib directory.
+ * Defaults to {@code "modules"} relative to {@link #libCompileDirectory()}.
+ *
+ * @since 2.1
+ */
+ public File libCompileModulesDirectory() {
+ return Objects.requireNonNullElseGet(libCompileModulesDirectory, () -> new File(libCompileDirectory(), "modules"));
+ }
+
/**
* Returns the project provided scope lib directory.
* Defaults to {@code "provided"} relative to {@link #libDirectory()}.
@@ -1022,6 +1163,16 @@ public class BaseProject extends BuildExecutor {
return Objects.requireNonNullElseGet(libProvidedDirectory, () -> new File(libDirectory(), "provided"));
}
+ /**
+ * Returns the project modules provided scope lib directory.
+ * Defaults to {@code "modules"} relative to {@link #libProvidedDirectory()}.
+ *
+ * @since 2.1
+ */
+ public File libProvidedModulesDirectory() {
+ return Objects.requireNonNullElseGet(libProvidedModulesDirectory, () -> new File(libProvidedDirectory(), "modules"));
+ }
+
/**
* Returns the project runtime scope lib directory.
* Defaults to {@code "runtime"} relative to {@link #libDirectory()}.
@@ -1032,6 +1183,16 @@ public class BaseProject extends BuildExecutor {
return Objects.requireNonNullElseGet(libRuntimeDirectory, () -> new File(libDirectory(), "runtime"));
}
+ /**
+ * Returns the project modules runtime scope lib directory.
+ * Defaults to {@code "modules"} relative to {@link #libRuntimeDirectory()}.
+ *
+ * @since 1.5
+ */
+ public File libRuntimeModulesDirectory() {
+ return Objects.requireNonNullElseGet(libRuntimeModulesDirectory, () -> new File(libRuntimeDirectory(), "modules"));
+ }
+
/**
* Returns the project standalone scope lib directory.
* Defaults to {@code null}.
@@ -1039,7 +1200,17 @@ public class BaseProject extends BuildExecutor {
* @since 1.5
*/
public File libStandaloneDirectory() {
- return null;
+ return libStandaloneDirectory;
+ }
+
+ /**
+ * Returns the project standalone scope lib directory.
+ * Defaults to {@code null}.
+ *
+ * @since 2.1
+ */
+ public File libStandaloneModulesDirectory() {
+ return libStandaloneModulesDirectory;
}
/**
@@ -1052,6 +1223,16 @@ public class BaseProject extends BuildExecutor {
return Objects.requireNonNullElseGet(libTestDirectory, () -> new File(libDirectory(), "test"));
}
+ /**
+ * Returns the project modules test scope lib directory.
+ * Defaults to {@code "modules"} relative to {@link #libTestDirectory()}.
+ *
+ * @since 2.1
+ */
+ public File libTestModulesDirectory() {
+ return Objects.requireNonNullElseGet(libTestModulesDirectory, () -> new File(libTestDirectory(), "modules"));
+ }
+
/**
* Returns the project build directory.
* Defaults to {@code "build"} relative to {@link #workDirectory()}.
@@ -1142,12 +1323,19 @@ public class BaseProject extends BuildExecutor {
libDirectory().mkdirs();
libBldDirectory().mkdirs();
libCompileDirectory().mkdirs();
+ libCompileModulesDirectory().mkdirs();
libProvidedDirectory().mkdirs();
+ libProvidedModulesDirectory().mkdirs();
libRuntimeDirectory().mkdirs();
+ libRuntimeModulesDirectory().mkdirs();
if (libStandaloneDirectory() != null) {
libStandaloneDirectory().mkdirs();
}
+ if (libStandaloneModulesDirectory() != null) {
+ libStandaloneModulesDirectory().mkdirs();
+ }
libTestDirectory().mkdirs();
+ libTestModulesDirectory().mkdirs();
}
/**
@@ -1415,6 +1603,25 @@ public class BaseProject extends BuildExecutor {
return classpath;
}
+ /**
+ * Returns all the jar files that are in the compile scope module path.
+ *
+ * By default, this collects all the jar files in the {@link #libCompileModulesDirectory()}
+ * and adds all the jar files from the compile scope local modules.
+ *
+ * @since 2.1
+ */
+ public List compileModulePathJars() {
+ // detect the jar files in the modules compile lib directory
+ var dir_abs = libCompileModulesDirectory().getAbsoluteFile();
+ var jar_files = FileUtils.getFileList(dir_abs, INCLUDED_JARS, EXCLUDED_JARS);
+
+ // build the compilation module path
+ var module_path = new ArrayList<>(jar_files.stream().map(file -> new File(dir_abs, file)).toList());
+ addLocalModules(module_path, Scope.compile);
+ return module_path;
+ }
+
/**
* Returns all the jar files that are in the provided scope classpath.
*
@@ -1434,6 +1641,25 @@ public class BaseProject extends BuildExecutor {
return classpath;
}
+ /**
+ * Returns all the jar files that are in the provided scope module path.
+ *
+ * By default, this collects all the jar files in the {@link #libProvidedModulesDirectory()}
+ * and adds all the jar files from the provided scope local modules.
+ *
+ * @since 2.1
+ */
+ public List providedModulePathJars() {
+ // detect the jar files in the modules provided lib directory
+ var dir_abs = libProvidedModulesDirectory().getAbsoluteFile();
+ var jar_files = FileUtils.getFileList(dir_abs, INCLUDED_JARS, EXCLUDED_JARS);
+
+ // build the provided module path
+ var module_path = new ArrayList<>(jar_files.stream().map(file -> new File(dir_abs, file)).toList());
+ addLocalModules(module_path, Scope.provided);
+ return module_path;
+ }
+
/**
* Returns all the jar files that are in the runtime scope classpath.
*
@@ -1453,6 +1679,25 @@ public class BaseProject extends BuildExecutor {
return classpath;
}
+ /**
+ * Returns all the jar files that are in the runtime scope module path.
+ *
+ * By default, this collects all the jar files in the {@link #libRuntimeModulesDirectory()}
+ * and adds all the jar files from the runtime scope local modules.
+ *
+ * @since 2.1
+ */
+ public List runtimeModulePathJars() {
+ // detect the jar files in the modules runtime lib directory
+ var dir_abs = libRuntimeModulesDirectory().getAbsoluteFile();
+ var jar_files = FileUtils.getFileList(dir_abs, INCLUDED_JARS, EXCLUDED_JARS);
+
+ // build the runtime module path
+ var module_path = new ArrayList<>(jar_files.stream().map(file -> new File(dir_abs, file)).toList());
+ addLocalModules(module_path, Scope.runtime);
+ return module_path;
+ }
+
/**
* Returns all the jar files that are in the standalone scope classpath.
*
@@ -1477,6 +1722,30 @@ public class BaseProject extends BuildExecutor {
return classpath;
}
+ /**
+ * Returns all the jar files that are in the standalone scope module path.
+ *
+ * By default, this collects all the jar files in the {@link #libStandaloneModulesDirectory()}
+ * and adds all the jar files from the standalone scope local modules.
+ *
+ * @since 2.1
+ */
+ public List standaloneModulePathJars() {
+ // build the standalone classpath
+ List module_path;
+ if (libStandaloneModulesDirectory() == null) {
+ module_path = new ArrayList<>();
+ } else {
+ // detect the jar files in the modules standalone lib directory
+ var dir_abs = libStandaloneModulesDirectory().getAbsoluteFile();
+ var jar_files = FileUtils.getFileList(dir_abs, INCLUDED_JARS, EXCLUDED_JARS);
+
+ module_path = new ArrayList<>(jar_files.stream().map(file -> new File(dir_abs, file)).toList());
+ }
+ addLocalModules(module_path, Scope.standalone);
+ return module_path;
+ }
+
/**
* Returns all the jar files that are in the test scope classpath.
*
@@ -1496,20 +1765,51 @@ public class BaseProject extends BuildExecutor {
return classpath;
}
+ /**
+ * Returns all the jar files that are in the test scope module path.
+ *
+ * By default, this collects all the jar files in the {@link #libTestModulesDirectory()}
+ * and adds all the jar files from the test scope local modules.
+ *
+ * @since 2.1
+ */
+ public List testModulePathJars() {
+ // detect the jar files in the test lib directory
+ var dir_abs = libTestModulesDirectory().getAbsoluteFile();
+ var jar_files = FileUtils.getFileList(dir_abs, INCLUDED_JARS, EXCLUDED_JARS);
+
+ // build the test module path
+ var module_path = new ArrayList<>(jar_files.stream().map(file -> new File(dir_abs, file)).toList());
+ addLocalModules(module_path, Scope.test);
+ return module_path;
+ }
+
private void addLocalDependencies(List classpath, Scope scope) {
if (dependencies.get(scope) == null) {
return;
}
-
for (var dependency : dependencies.get(scope).localDependencies()) {
- var local_file = new File(workDirectory(), dependency.path());
- if (local_file.exists()) {
- if (local_file.isDirectory()) {
- var local_jar_files = FileUtils.getFileList(local_file.getAbsoluteFile(), INCLUDED_JARS, EXCLUDED_JARS);
- classpath.addAll(new ArrayList<>(local_jar_files.stream().map(file -> new File(local_file, file)).toList()));
- } else {
- classpath.add(local_file);
- }
+ addLocalJars(classpath, dependency.path());
+ }
+ }
+
+ private void addLocalModules(List classpath, Scope scope) {
+ if (dependencies.get(scope) == null) {
+ return;
+ }
+ for (var module : dependencies.get(scope).localModules()) {
+ addLocalJars(classpath, module.path());
+ }
+ }
+
+ private void addLocalJars(List jars, String path) {
+ var local_file = new File(workDirectory(), path);
+ if (local_file.exists()) {
+ if (local_file.isDirectory()) {
+ var local_jar_files = FileUtils.getFileList(local_file.getAbsoluteFile(), INCLUDED_JARS, EXCLUDED_JARS);
+ jars.addAll(new ArrayList<>(local_jar_files.stream().map(file -> new File(local_file, file)).toList()));
+ } else {
+ jars.add(local_file);
}
}
}
@@ -1517,7 +1817,7 @@ public class BaseProject extends BuildExecutor {
/**
* Returns all the classpath entries for compiling the main sources.
*
- * By default, this converts the files from {@link #compileClasspathJars()} to absolute paths.
+ * By default, this converts the files from {@link #compileClasspathJars()} and {@link #providedClasspathJars()} to absolute paths.
*
* @since 1.5
*/
@@ -1525,10 +1825,21 @@ public class BaseProject extends BuildExecutor {
return FileUtils.combineToAbsolutePaths(compileClasspathJars(), providedClasspathJars());
}
+ /**
+ * Returns all the module path entries for compiling the main sources.
+ *
+ * By default, this converts the files from {@link #compileModulePathJars()} and {@link #providedModulePathJars()} to absolute paths.
+ *
+ * @since 2.1
+ */
+ public List compileMainModulePath() {
+ return FileUtils.combineToAbsolutePaths(compileModulePathJars(), providedModulePathJars());
+ }
+
/**
* Returns all the classpath entries for compiling the test sources.
*
- * By default, this converts the files from {@link #compileClasspathJars()} and
+ * By default, this converts the files from {@link #compileClasspathJars()}, {@link #providedClasspathJars()} and
* {@link #testClasspathJars()} to absolute paths, as well as the {@link #buildMainDirectory()}
*
* @since 1.5
@@ -1540,6 +1851,18 @@ public class BaseProject extends BuildExecutor {
return paths;
}
+ /**
+ * Returns all the module path entries for compiling the test sources.
+ *
+ * By default, this converts the files from {@link #compileModulePathJars()}, {@link #providedModulePathJars()} and
+ * {@link #testModulePathJars()} to absolute paths.
+ *
+ * @since 2.1
+ */
+ public List compileTestModulePath() {
+ return FileUtils.combineToAbsolutePaths(compileModulePathJars(), providedModulePathJars(), testModulePathJars());
+ }
+
/**
* Returns all the classpath entries for running the application.
*
@@ -1557,10 +1880,22 @@ public class BaseProject extends BuildExecutor {
return paths;
}
+ /**
+ * Returns all the module path entries for running the application.
+ *
+ * By default, this converts the files from {@link #compileModulePathJars()},
+ * {@link #runtimeModulePathJars()} and {@link #standaloneModulePathJars()} to absolute paths.
+ *
+ * @since 2.1
+ */
+ public List runModulePath() {
+ return FileUtils.combineToAbsolutePaths(compileModulePathJars(), runtimeModulePathJars(), standaloneModulePathJars());
+ }
+
/**
* Returns all the classpath entries for testing the application.
*
- * By default, this converts the files from {@link #compileClasspathJars()},
+ * By default, this converts the files from {@link #compileClasspathJars()}, {@link #providedClasspathJars()},
* {@link #runtimeClasspathJars()} and {@link #testClasspathJars()}
* to absolute paths, as well as the {@link #srcMainResourcesDirectory()},
* {@link #buildMainDirectory()} and {@link #buildTestDirectory()}
@@ -1577,6 +1912,19 @@ public class BaseProject extends BuildExecutor {
return paths;
}
+ /**
+ * Returns all the module path entries for testing the application.
+ *
+ * By default, this converts the files from {@link #compileModulePathJars()}, {@link #providedModulePathJars()},
+ * {@link #runtimeModulePathJars()} and {@link #testModulePathJars()}
+ * to absolute paths.
+ *
+ * @since 2.1
+ */
+ public List testModulePath() {
+ return FileUtils.combineToAbsolutePaths(compileModulePathJars(), providedModulePathJars(), runtimeModulePathJars(), standaloneModulePathJars(), testModulePathJars());
+ }
+
/**
* Executes download and purge commands automatically when the
* {@code autoDownloadPurge} flag is set and changes have been detected.
diff --git a/src/main/java/rife/bld/WebProject.java b/src/main/java/rife/bld/WebProject.java
index 1314525..2ac96a2 100644
--- a/src/main/java/rife/bld/WebProject.java
+++ b/src/main/java/rife/bld/WebProject.java
@@ -108,6 +108,11 @@ public class WebProject extends Project {
return Objects.requireNonNullElseGet(libStandaloneDirectory, () -> new File(libDirectory(), "standalone"));
}
+ @Override
+ public File libStandaloneModulesDirectory() {
+ return Objects.requireNonNullElseGet(libStandaloneModulesDirectory, () -> new File(libStandaloneDirectory(), "modules"));
+ }
+
/**
* Returns the project main webapp directory.
* Defaults to {@code "webapp"} relative to {@link #srcMainDirectory()}.
diff --git a/src/main/java/rife/bld/dependencies/Dependency.java b/src/main/java/rife/bld/dependencies/Dependency.java
index 9dd28c3..e926f6e 100644
--- a/src/main/java/rife/bld/dependencies/Dependency.java
+++ b/src/main/java/rife/bld/dependencies/Dependency.java
@@ -8,22 +8,45 @@ import java.util.Objects;
import java.util.regex.Pattern;
/**
- * Contains the information required to describe an url dependency in the build system.
+ * Contains the information required to describe a dependency in the build system.
*
- * @param groupId the dependency group identifier
- * @param artifactId the dependency url identifier
- * @param version the dependency version
- * @param classifier the dependency classier
- * @param type the dependency type
- * @param exclusions the dependency exclusions for transitive resolution
- * @param parent the parent dependency that created this dependency (only for information purposes)
* @author Geert Bevin (gbevin[remove] at uwyn dot com)
* @since 1.5
*/
-public record Dependency(String groupId, String artifactId, Version version, String classifier, String type, ExclusionSet exclusions, Dependency parent) {
+public class Dependency {
public static final String CLASSIFIER_SOURCES = "sources";
public static final String CLASSIFIER_JAVADOC = "javadoc";
+ /**
+ * The dependency type name for a JAR file that can be placed either on the class-path or on the module-path.
+ *
+ * @since 2.1
+ */
+ public static final String TYPE_JAR = "jar";
+
+ /**
+ * The dependency type name for a JAR file to unconditionally place on the class-path.
+ *
+ * @since 2.1
+ */
+ public static final String TYPE_CLASSPATH_JAR = "classpath-jar";
+
+ /**
+ * The dependency type name for a JAR file to unconditionally place on the module-path.
+ *
+ * @since 2.1
+ */
+ // see https://github.com/apache/maven/blob/maven-4.0.0-beta-3/api/maven-api-core/src/main/java/org/apache/maven/api/Type.java
+ public static final String TYPE_MODULAR_JAR = "modular-jar";
+
+ private final String groupId_;
+ private final String artifactId_;
+ private final Version version_;
+ private final String classifier_;
+ private final String type_;
+ private final ExclusionSet exclusions_;
+ private final Dependency parent_;
+
public Dependency(String groupId, String artifactId) {
this(groupId, artifactId, null, null, null);
}
@@ -45,13 +68,20 @@ public record Dependency(String groupId, String artifactId, Version version, Str
}
public Dependency(String groupId, String artifactId, Version version, String classifier, String type, ExclusionSet exclusions, Dependency parent) {
- this.groupId = groupId;
- this.artifactId = artifactId;
- this.version = (version == null ? VersionNumber.UNKNOWN : version);
- this.classifier = (classifier == null ? "" : classifier);
- this.type = (type == null ? "jar" : type);
- this.exclusions = (exclusions == null ? new ExclusionSet() : exclusions);
- this.parent = parent;
+ if (type == null) {
+ type = TYPE_JAR;
+ }
+ if (parent != null && parent.isModularJar() && TYPE_JAR.equals(type)) {
+ type = TYPE_MODULAR_JAR;
+ }
+
+ this.groupId_ = groupId;
+ this.artifactId_ = artifactId;
+ this.version_ = (version == null ? VersionNumber.UNKNOWN : version);
+ this.classifier_ = (classifier == null ? "" : classifier);
+ this.type_ = type;
+ this.exclusions_ = (exclusions == null ? new ExclusionSet() : exclusions);
+ this.parent_ = parent;
}
private static final Pattern DEPENDENCY_PATTERN = Pattern.compile("^(?[^:@]+):(?[^:@]+)(?::(?[^:@]+)(?::(?[^:@]+))?)?(?:@(?[^:@]+))?$");
@@ -95,7 +125,7 @@ public record Dependency(String groupId, String artifactId, Version version, Str
* @since 1.5
*/
public Dependency baseDependency() {
- return new Dependency(groupId, artifactId, VersionNumber.UNKNOWN, classifier, type);
+ return new Dependency(groupId_, artifactId_, VersionNumber.UNKNOWN, classifier_, type_);
}
/**
@@ -107,7 +137,7 @@ public record Dependency(String groupId, String artifactId, Version version, Str
* @since 1.5
*/
public Dependency exclude(String groupId, String artifactId) {
- exclusions.add(new DependencyExclusion(groupId, artifactId));
+ exclusions_.add(new DependencyExclusion(groupId, artifactId));
return this;
}
@@ -119,7 +149,7 @@ public record Dependency(String groupId, String artifactId, Version version, Str
* @since 1.5.6
*/
public Dependency withClassifier(String classifier) {
- return new Dependency(groupId, artifactId, version, classifier, type);
+ return new Dependency(groupId_, artifactId_, version_, classifier, type_);
}
/**
@@ -146,34 +176,130 @@ public record Dependency(String groupId, String artifactId, Version version, Str
* @since 2.0
*/
public String toArtifactString() {
- return groupId + ':' + artifactId;
+ return groupId_ + ':' + artifactId_;
}
public String toString() {
- var result = new StringBuilder(groupId).append(':').append(artifactId);
- if (!version.equals(VersionNumber.UNKNOWN)) {
- result.append(':').append(version);
+ var result = new StringBuilder(groupId_).append(':').append(artifactId_);
+ if (!version_.equals(VersionNumber.UNKNOWN)) {
+ result.append(':').append(version_);
}
- if (!classifier.isEmpty()) {
- result.append(':').append(classifier);
+ if (!classifier_.isEmpty()) {
+ result.append(':').append(classifier_);
}
- if (!type.isEmpty() && !"jar".equals(type)) {
- result.append('@').append(type);
+ if (!type_.isEmpty() && !TYPE_JAR.equals(type_)) {
+ result.append('@').append(type_);
}
return result.toString();
}
+ /**
+ * Returns this dependency's {@code groupId}.
+ *
+ * @return the {@code groupId} of this dependency
+ * @since 1.5
+ */
+ public String groupId() {
+ return groupId_;
+ }
+
+ /**
+ * Returns this dependency's {@code artifactId}.
+ *
+ * @return the {@code artifactId} of this dependency
+ * @since 1.5
+ */
+ public String artifactId() {
+ return artifactId_;
+ }
+
+ /**
+ * Returns this dependency's {@code version}.
+ *
+ * @return the {@code version} of this dependency
+ * @since 1.5
+ */
+ public Version version() {
+ return version_;
+ }
+
+ /**
+ * Returns this dependency's {@code classifier}.
+ *
+ * @return the {@code classifier} of this dependency
+ * @since 1.5
+ */
+ public String classifier() {
+ return classifier_;
+ }
+
+ /**
+ * Returns this dependency's {@code type}.
+ *
+ * @return the {@code type} of this dependency
+ * @since 1.5
+ */
+ public String type() {
+ return type_;
+ }
+
+ /**
+ * Returns this dependency's {@code exclusions} for transitive resolution.
+ *
+ * @return the {@code exclusions} of this dependency
+ * @since 1.5
+ */
+ public ExclusionSet exclusions() {
+ return exclusions_;
+ }
+
+ /**
+ * Returns this dependency's {@code parent} dependency that created this
+ * dependency (only for information purposes).
+ *
+ * @return the {@code parent} of this dependency
+ * @since 1.5
+ */
+ public Dependency parent() {
+ return parent_;
+ }
+
+ /**
+ * Indicates whether this dependency specifically is a classpath jar or not.
+ *
+ * @return {@code true} when this dependency specifically is a classpath jar; or {@code false} otherwise
+ * @since 2.1
+ */
+ public boolean isClasspathJar() {
+ return Module.TYPE_CLASSPATH_JAR.equals(type_);
+ }
+
+ /**
+ * Indicates whether this dependency is a modular jar or not.
+ *
+ * @return {@code true} when this dependency is a modular jar; or {@code false} otherwise
+ * @since 2.1
+ */
+ public boolean isModularJar() {
+ return Module.TYPE_MODULAR_JAR.equals(type_);
+ }
+
+ private static String normalizedJarType(String type) {
+ if (TYPE_JAR.equals(type) || TYPE_MODULAR_JAR.equals(type) || TYPE_CLASSPATH_JAR.equals(type)) {
+ return TYPE_JAR;
+ }
+ return type;
+ }
public boolean equals(Object o) {
if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- var that = (Dependency) o;
- return groupId.equals(that.groupId) &&
- artifactId.equals(that.artifactId) &&
- classifier.equals(that.classifier) &&
- type.equals(that.type);
+ if (!(o instanceof Dependency that)) return false;
+ return groupId_.equals(that.groupId_) &&
+ artifactId_.equals(that.artifactId_) &&
+ classifier_.equals(that.classifier_) &&
+ normalizedJarType(type_).equals(normalizedJarType(that.type_));
}
public int hashCode() {
- return Objects.hash(groupId, artifactId, classifier, type);
+ return Objects.hash(groupId_, artifactId_, classifier_, normalizedJarType(type_));
}
}
diff --git a/src/main/java/rife/bld/dependencies/DependencyResolver.java b/src/main/java/rife/bld/dependencies/DependencyResolver.java
index 24b7bef..b671f90 100644
--- a/src/main/java/rife/bld/dependencies/DependencyResolver.java
+++ b/src/main/java/rife/bld/dependencies/DependencyResolver.java
@@ -11,6 +11,8 @@ import java.io.*;
import java.util.*;
import java.util.stream.Collectors;
+import static rife.bld.dependencies.Dependency.*;
+
/**
* Resolves a dependency within a list of Maven-compatible repositories.
*
@@ -333,7 +335,7 @@ public class DependencyResolver {
result.append('-').append(dependency_.classifier());
}
var type = dependency_.type();
- if (type == null) {
+ if (type == null || TYPE_JAR.equals(type) || TYPE_MODULAR_JAR.equals(type) || TYPE_CLASSPATH_JAR.equals(type)) {
type = "jar";
}
result.append('.').append(type);
diff --git a/src/main/java/rife/bld/dependencies/DependencySet.java b/src/main/java/rife/bld/dependencies/DependencySet.java
index 6232ba0..9df7b4f 100644
--- a/src/main/java/rife/bld/dependencies/DependencySet.java
+++ b/src/main/java/rife/bld/dependencies/DependencySet.java
@@ -23,6 +23,7 @@ import java.util.*;
public class DependencySet extends AbstractSet implements Set {
private final Map dependencies_ = new LinkedHashMap<>();
private final Set localDependencies_ = new LinkedHashSet<>();
+ private final Set localModules_ = new LinkedHashSet<>();
/**
* Creates an empty dependency set.
@@ -79,42 +80,86 @@ public class DependencySet extends AbstractSet implements Set
+ * Local modules aren't resolved and point to a location on
+ * the file system.
+ *
+ * @param module the module to include
+ * @return this dependency set instance
+ * @since 2.1
+ */
+ public DependencySet include(LocalModule module) {
+ localModules_.add(module);
+ return this;
+ }
+
+ /**
+ * Retrieves the local modules.
+ *
+ * @return the set of local modules
+ * @since 2.1
+ */
+ public Set localModules() {
+ return localModules_;
+ }
+
/**
* Transfers the artifacts for the dependencies into the provided directory.
*
* The destination directory must exist and be writable.
*
- * @param resolution the version resolution state that can be cached
- * @param retriever the retriever to use to get artifacts
- * @param repositories the repositories to use for the transfer
- * @param directory the directory to transfer the artifacts into
+ * @param resolution the version resolution state that can be cached
+ * @param retriever the retriever to use to get artifacts
+ * @param repositories the repositories to use for the transfer
+ * @param directory the directory to transfer the artifacts into
+ * @param modulesDirectory the directory to download the modules into
* @return the list of artifacts that were transferred successfully
* @throws DependencyTransferException when an error occurred during the transfer
- * @since 2.0
+ * @since 2.1
*/
- public List transferIntoDirectory(VersionResolution resolution, ArtifactRetriever retriever, List repositories, File directory) {
- return transferIntoDirectory(resolution, retriever, repositories, directory, (String[]) null);
+ public List transferIntoDirectory(VersionResolution resolution, ArtifactRetriever retriever, List repositories, File directory, File modulesDirectory) {
+ return transferIntoDirectory(resolution, retriever, repositories, directory, modulesDirectory, (String[]) null);
}
/**
- * Transfers the artifacts for the dependencies into the provided directory,
+ * Transfers the artifacts for the dependencies into the provided directories,
* including other classifiers.
*
* The destination directory must exist and be writable.
*
- * @param resolution the version resolution state that can be cached
- * @param retriever the retriever to use to get artifacts
- * @param repositories the repositories to use for the download
- * @param directory the directory to download the artifacts into
+ * @param resolution the version resolution state that can be cached
+ * @param retriever the retriever to use to get artifacts
+ * @param repositories the repositories to use for the download
+ * @param directory the directory to download the artifacts into
+ * @param modulesDirectory the directory to download the modules into
* @param classifiers the additional classifiers to transfer
* @return the list of artifacts that were transferred successfully
* @throws DependencyTransferException when an error occurred during the transfer
- * @since 2.0
+ * @since 2.1
*/
- public List transferIntoDirectory(VersionResolution resolution, ArtifactRetriever retriever, List repositories, File directory, String... classifiers) {
+ public List transferIntoDirectory(VersionResolution resolution, ArtifactRetriever retriever, List repositories, File directory, File modulesDirectory, String... classifiers) {
var result = new ArrayList();
for (var dependency : this) {
- var artifact = new DependencyResolver(resolution, retriever, repositories, dependency).transferIntoDirectory(directory);
+ var transfer_directory = directory;
+ if (dependency.isModularJar()) {
+ if (modulesDirectory == null) {
+ throw new DependencyTransferException(dependency, "modules directory is not provided");
+ }
+ transfer_directory = modulesDirectory;
+ }
+ else if (directory == null) {
+ throw new DependencyTransferException(dependency, "artifacts directory is not provided");
+ }
+
+ if (!transfer_directory.exists()) {
+ if (!transfer_directory.mkdirs()) {
+ throw new DependencyTransferException(dependency, transfer_directory, "couldn't create directory");
+ }
+ }
+
+ var artifact = new DependencyResolver(resolution, retriever, repositories, dependency).transferIntoDirectory(transfer_directory);
if (artifact != null) {
result.add(artifact);
}
@@ -122,7 +167,7 @@ public class DependencySet extends AbstractSet implements Set
+ * If the local module points to a directory, it will be scanned for jar files.
+ *
+ * @param path the file system path of the local module
+ * @author Geert Bevin (gbevin[remove] at uwyn dot com)
+ * @since 2.1
+ */
+public record LocalModule(String path) {
+}
diff --git a/src/main/java/rife/bld/dependencies/Module.java b/src/main/java/rife/bld/dependencies/Module.java
new file mode 100644
index 0000000..7dbb5f1
--- /dev/null
+++ b/src/main/java/rife/bld/dependencies/Module.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2001-2024 Geert Bevin (gbevin[remove] at uwyn dot com)
+ * Licensed under the Apache License, Version 2.0 (the "License")
+ */
+package rife.bld.dependencies;
+
+import java.util.regex.Pattern;
+
+/**
+ * Contains the information required to describe a Java module dependency in the build system.
+ *
+ * @author Geert Bevin (gbevin[remove] at uwyn dot com)
+ * @since 2.1
+ */
+public class Module extends Dependency {
+ public Module(String groupId, String artifactId) {
+ this(groupId, artifactId, null, null, null, null);
+ }
+
+ public Module(String groupId, String artifactId, Version version) {
+ this(groupId, artifactId, version, null, null, null);
+ }
+
+ public Module(String groupId, String artifactId, Version version, String classifier) {
+ this(groupId, artifactId, version, classifier, null, null);
+ }
+
+ public Module(String groupId, String artifactId, Version version, String classifier, ExclusionSet exclusions) {
+ this(groupId, artifactId, version, classifier, exclusions, null);
+ }
+
+ public Module(String groupId, String artifactId, Version version, String classifier, ExclusionSet exclusions, Dependency parent) {
+ super(groupId, artifactId, version, classifier, TYPE_MODULAR_JAR, exclusions, parent);
+ }
+
+ private static final Pattern MODULE_PATTERN = Pattern.compile("^(?[^:@]+):(?[^:@]+)(?::(?[^:@]+)(?::(?[^:@]+))?)?(?:@modular-jar)?$");
+
+ /**
+ * Parses a module from a string representation.
+ * The format is {@code groupId:artifactId:version:classifier}.
+ * The {@code version} and {@code classifier} are optional.
+ *
+ * If the string can't be successfully parsed, {@code null} will be returned.
+ *
+ * @param module the module string to parse
+ * @return a parsed instance of {@code Module}; or
+ * {@code null} when the string couldn't be parsed
+ * @since 2.1
+ */
+ public static Module parse(String module) {
+ if (module == null || module.isEmpty()) {
+ return null;
+ }
+
+ var matcher = MODULE_PATTERN.matcher(module);
+ if (!matcher.matches()) {
+ return null;
+ }
+
+ var groupId = matcher.group("groupId");
+ var artifactId = matcher.group("artifactId");
+ var version = Version.parse(matcher.group("version"));
+ var classifier = matcher.group("classifier");
+
+ return new Module(groupId, artifactId, version, classifier);
+ }
+}
diff --git a/src/main/java/rife/bld/dependencies/Xml2MavenPom.java b/src/main/java/rife/bld/dependencies/Xml2MavenPom.java
index 7bdb3d1..ec315df 100644
--- a/src/main/java/rife/bld/dependencies/Xml2MavenPom.java
+++ b/src/main/java/rife/bld/dependencies/Xml2MavenPom.java
@@ -10,6 +10,8 @@ import rife.xml.Xml2Data;
import java.util.*;
import java.util.regex.Pattern;
+import static rife.bld.dependencies.Dependency.TYPE_JAR;
+
/**
* Parses an XML document to retrieve POM information, this is an internal class.
*
@@ -103,7 +105,7 @@ class Xml2MavenPom extends Xml2Data {
"false",
exclusions,
dependency.parent());
- if (resolved_dependency.type() == null || resolved_dependency.type().equals("jar")) {
+ if (resolved_dependency.type() == null || TYPE_JAR.equals(resolved_dependency.type())) {
var scope = Scope.valueOf(resolved_dependency.scope());
if (scopes_list.contains(scope)) {
var resolved_dependency_set = resolved_dependencies.computeIfAbsent(scope, k -> new LinkedHashSet<>());
diff --git a/src/main/java/rife/bld/dependencies/exceptions/DependencyTransferException.java b/src/main/java/rife/bld/dependencies/exceptions/DependencyTransferException.java
index febbe4d..888d708 100644
--- a/src/main/java/rife/bld/dependencies/exceptions/DependencyTransferException.java
+++ b/src/main/java/rife/bld/dependencies/exceptions/DependencyTransferException.java
@@ -24,6 +24,22 @@ public class DependencyTransferException extends DependencyException {
destination_ = destination;
}
+ public DependencyTransferException(Dependency dependency, File destination, String message) {
+ super("Unable to transfer dependency '" + dependency + "' into '" + destination + "': " + message);
+
+ dependency_ = dependency;
+ location_ = null;
+ destination_ = destination;
+ }
+
+ public DependencyTransferException(Dependency dependency, String message) {
+ super("Unable to transfer dependency '" + dependency + "': " + message);
+
+ dependency_ = dependency;
+ location_ = null;
+ destination_ = null;
+ }
+
public Dependency getDependency() {
return dependency_;
}
diff --git a/src/main/java/rife/bld/operations/AbstractProcessOperation.java b/src/main/java/rife/bld/operations/AbstractProcessOperation.java
index 7c85a89..acc49a1 100644
--- a/src/main/java/rife/bld/operations/AbstractProcessOperation.java
+++ b/src/main/java/rife/bld/operations/AbstractProcessOperation.java
@@ -27,6 +27,7 @@ public abstract class AbstractProcessOperation classpath_ = new ArrayList<>();
+ protected final List modulePath_ = new ArrayList<>();
protected String mainClass_;
protected Function outputProcessor_;
protected Function errorProcessor_;
@@ -213,6 +214,32 @@ public abstract class AbstractProcessOperation
+ * A copy will be created to allow this list to be independently modifiable.
+ *
+ * @param modulePath a list of module path entries for the operation
+ * @return this operation instance
+ * @since 2.1
+ */
+ public T modulePath(List modulePath) {
+ modulePath_.addAll(modulePath);
+ return (T) this;
+ }
+
/**
* Provides the main class to launch with the java tool.
*
@@ -297,6 +324,18 @@ public abstract class AbstractProcessOperation
+ * This is a modifiable list that can be retrieved and changed.
+ *
+ * @return the operation's module path
+ * @since 2.1
+ */
+ public List modulePath() {
+ return modulePath_;
+ }
+
/**
* Retrieves the main class to launch with the java tool.
*
diff --git a/src/main/java/rife/bld/operations/CompileOperation.java b/src/main/java/rife/bld/operations/CompileOperation.java
index 6805926..651ff16 100644
--- a/src/main/java/rife/bld/operations/CompileOperation.java
+++ b/src/main/java/rife/bld/operations/CompileOperation.java
@@ -26,6 +26,8 @@ public class CompileOperation extends AbstractOperation {
private File buildTestDirectory_;
private final List compileMainClasspath_ = new ArrayList<>();
private final List compileTestClasspath_ = new ArrayList<>();
+ private final List compileMainModulePath_ = new ArrayList<>();
+ private final List compileTestModulePath_ = new ArrayList<>();
private final List mainSourceFiles_ = new ArrayList<>();
private final List testSourceFiles_ = new ArrayList<>();
private final List mainSourceDirectories_ = new ArrayList<>();
@@ -78,6 +80,7 @@ public class CompileOperation extends AbstractOperation {
}
executeBuildSources(
compileMainClasspath(),
+ compileMainModulePath(),
sources,
buildMainDirectory());
}
@@ -95,6 +98,7 @@ public class CompileOperation extends AbstractOperation {
}
executeBuildSources(
compileTestClasspath(),
+ compileTestModulePath(),
sources,
buildTestDirectory());
}
@@ -103,11 +107,12 @@ public class CompileOperation extends AbstractOperation {
* Part of the {@link #execute} operation, build sources to a destination.
*
* @param classpath the classpath list used for the compilation
+ * @param modulePath the module path list used for the compilation
* @param sources the source files to compile
* @param destination the destination directory
- * @since 1.5
+ * @since 2.1
*/
- protected void executeBuildSources(List classpath, List sources, File destination)
+ protected void executeBuildSources(List classpath, List modulePath, List sources, File destination)
throws IOException {
if (sources.isEmpty() || destination == null) {
return;
@@ -117,7 +122,13 @@ public class CompileOperation extends AbstractOperation {
try (var file_manager = compiler.getStandardFileManager(null, null, null)) {
var compilation_units = file_manager.getJavaFileObjectsFromFiles(sources);
var diagnostics = new DiagnosticCollector();
- var options = new ArrayList<>(List.of("-d", destination.getAbsolutePath(), "-cp", FileUtils.joinPaths(classpath)));
+ var options = new ArrayList<>(List.of("-d", destination.getAbsolutePath()));
+ if (!classpath.isEmpty()) {
+ options.addAll(List.of("-cp", FileUtils.joinPaths(classpath)));
+ }
+ if (!modulePath.isEmpty()) {
+ options.addAll(List.of("-p", FileUtils.joinPaths(modulePath)));
+ }
options.addAll(compileOptions());
var compilation_task = compiler.getTask(null, file_manager, diagnostics, options, null, compilation_units);
if (!compilation_task.call()) {
@@ -161,6 +172,8 @@ public class CompileOperation extends AbstractOperation {
.buildTestDirectory(project.buildTestDirectory())
.compileMainClasspath(project.compileMainClasspath())
.compileTestClasspath(project.compileTestClasspath())
+ .compileMainModulePath(project.compileMainModulePath())
+ .compileTestModulePath(project.compileTestModulePath())
.mainSourceFiles(project.mainSourceFiles())
.testSourceFiles(project.testSourceFiles());
if (project.javaRelease() != null && !compileOptions().containsRelease()) {
@@ -245,6 +258,58 @@ public class CompileOperation extends AbstractOperation {
return this;
}
+ /**
+ * Provides entries for the main compilation module path.
+ *
+ * @param modulePath module path entries
+ * @return this operation instance
+ * @since 2.1
+ */
+ public CompileOperation compileMainModulePath(String... modulePath) {
+ compileMainModulePath_.addAll(Arrays.asList(modulePath));
+ return this;
+ }
+
+ /**
+ * Provides a list of entries for the main compilation module path.
+ *
+ * A copy will be created to allow this list to be independently modifiable.
+ *
+ * @param modulePath a list of module path entries
+ * @return this operation instance
+ * @since 2.1
+ */
+ public CompileOperation compileMainModulePath(List modulePath) {
+ compileMainModulePath_.addAll(modulePath);
+ return this;
+ }
+
+ /**
+ * Provides entries for the test compilation module path.
+ *
+ * @param modulePath module path entries
+ * @return this operation instance
+ * @since 2.1
+ */
+ public CompileOperation compileTestModulePath(String... modulePath) {
+ compileTestModulePath_.addAll(Arrays.asList(modulePath));
+ return this;
+ }
+
+ /**
+ * Provides a list of entries for the test compilation module path.
+ *
+ * A copy will be created to allow this list to be independently modifiable.
+ *
+ * @param modulePath a list of module path entries
+ * @return this operation instance
+ * @since 2.1
+ */
+ public CompileOperation compileTestModulePath(List modulePath) {
+ compileTestModulePath_.addAll(modulePath);
+ return this;
+ }
+
/**
* Provides main files that should be compiled.
*
@@ -407,6 +472,30 @@ public class CompileOperation extends AbstractOperation {
return compileTestClasspath_;
}
+ /**
+ * Retrieves the list of entries for the main compilation module path.
+ *
+ * This is a modifiable list that can be retrieved and changed.
+ *
+ * @return the main compilation module path list
+ * @since 2.1
+ */
+ public List compileMainModulePath() {
+ return compileMainModulePath_;
+ }
+
+ /**
+ * Retrieves the list of entries for the test compilation module path.
+ *
+ * This is a modifiable list that can be retrieved and changed.
+ *
+ * @return the test compilation module path list
+ * @since 2.1
+ */
+ public List compileTestModulePath() {
+ return compileTestModulePath_;
+ }
+
/**
* Retrieves the list of main files that should be compiled.
*
diff --git a/src/main/java/rife/bld/operations/DownloadOperation.java b/src/main/java/rife/bld/operations/DownloadOperation.java
index de1a569..be6d397 100644
--- a/src/main/java/rife/bld/operations/DownloadOperation.java
+++ b/src/main/java/rife/bld/operations/DownloadOperation.java
@@ -31,10 +31,15 @@ public class DownloadOperation extends AbstractOperation {
private final List repositories_ = new ArrayList<>();
private final DependencyScopes dependencies_ = new DependencyScopes();
private File libCompileDirectory_;
+ private File libCompileModulesDirectory_;
private File libProvidedDirectory_;
+ private File libProvidedModulesDirectory_;
private File libRuntimeDirectory_;
+ private File libRuntimeModulesDirectory_;
private File libStandaloneDirectory_;
+ private File libStandaloneModulesDirectory_;
private File libTestDirectory_;
+ private File libTestModulesDirectory_;
private boolean downloadSources_ = false;
private boolean downloadJavadoc_ = false;
@@ -65,7 +70,7 @@ public class DownloadOperation extends AbstractOperation {
* @since 1.5
*/
protected void executeDownloadCompileDependencies() {
- executeDownloadDependencies(libCompileDirectory(), dependencies().resolveCompileDependencies(properties(), artifactRetriever(), repositories()));
+ executeDownloadDependencies(libCompileDirectory(), libCompileModulesDirectory(), dependencies().resolveCompileDependencies(properties(), artifactRetriever(), repositories()));
}
/**
@@ -74,7 +79,7 @@ public class DownloadOperation extends AbstractOperation {
* @since 1.8
*/
protected void executeDownloadProvidedDependencies() {
- executeDownloadDependencies(libProvidedDirectory(), dependencies().resolveProvidedDependencies(properties(), artifactRetriever(), repositories()));
+ executeDownloadDependencies(libProvidedDirectory(), libProvidedModulesDirectory(), dependencies().resolveProvidedDependencies(properties(), artifactRetriever(), repositories()));
}
/**
@@ -83,7 +88,7 @@ public class DownloadOperation extends AbstractOperation {
* @since 1.5
*/
protected void executeDownloadRuntimeDependencies() {
- executeDownloadDependencies(libRuntimeDirectory(), dependencies().resolveRuntimeDependencies(properties(), artifactRetriever(), repositories()));
+ executeDownloadDependencies(libRuntimeDirectory(), libRuntimeModulesDirectory(), dependencies().resolveRuntimeDependencies(properties(), artifactRetriever(), repositories()));
}
/**
@@ -92,7 +97,7 @@ public class DownloadOperation extends AbstractOperation {
* @since 1.5
*/
protected void executeDownloadStandaloneDependencies() {
- executeDownloadDependencies(libStandaloneDirectory(), dependencies().resolveStandaloneDependencies(properties(), artifactRetriever(), repositories()));
+ executeDownloadDependencies(libStandaloneDirectory(), libStandaloneModulesDirectory(), dependencies().resolveStandaloneDependencies(properties(), artifactRetriever(), repositories()));
}
/**
@@ -101,23 +106,18 @@ public class DownloadOperation extends AbstractOperation {
* @since 1.5
*/
protected void executeDownloadTestDependencies() {
- executeDownloadDependencies(libTestDirectory(), dependencies().resolveTestDependencies(properties(), artifactRetriever(), repositories()));
+ executeDownloadDependencies(libTestDirectory(), libTestModulesDirectory(), dependencies().resolveTestDependencies(properties(), artifactRetriever(), repositories()));
}
/**
* Part of the {@link #execute} operation, download the artifacts for a particular dependency scope.
*
* @param destinationDirectory the directory in which the artifacts should be downloaded
+ * @param modulesDirectory the directory in which the modules should be downloaded
* @param dependencies the dependencies to download
- * @since 1.6
+ * @since 2.1
*/
- protected void executeDownloadDependencies(File destinationDirectory, DependencySet dependencies) {
- if (destinationDirectory == null) {
- return;
- }
-
- destinationDirectory.mkdirs();
-
+ protected void executeDownloadDependencies(File destinationDirectory, File modulesDirectory, DependencySet dependencies) {
var additional_classifiers = new String[0];
if (downloadSources_ || downloadJavadoc_) {
@@ -128,7 +128,7 @@ public class DownloadOperation extends AbstractOperation {
additional_classifiers = classifiers.toArray(new String[0]);
}
- dependencies.transferIntoDirectory(new VersionResolution(properties()), artifactRetriever(), repositories(), destinationDirectory, additional_classifiers);
+ dependencies.transferIntoDirectory(new VersionResolution(properties()), artifactRetriever(), repositories(), destinationDirectory, modulesDirectory, additional_classifiers);
}
/**
@@ -145,10 +145,15 @@ public class DownloadOperation extends AbstractOperation {
.repositories(project.repositories())
.dependencies(project.dependencies())
.libCompileDirectory(project.libCompileDirectory())
+ .libCompileModulesDirectory(project.libCompileModulesDirectory())
.libProvidedDirectory(project.libProvidedDirectory())
+ .libProvidedModulesDirectory(project.libProvidedModulesDirectory())
.libRuntimeDirectory(project.libRuntimeDirectory())
+ .libRuntimeModulesDirectory(project.libRuntimeModulesDirectory())
.libStandaloneDirectory(project.libStandaloneDirectory())
+ .libStandaloneModulesDirectory(project.libStandaloneModulesDirectory())
.libTestDirectory(project.libTestDirectory())
+ .libTestModulesDirectory(project.libTestModulesDirectory())
.downloadSources(project.downloadSources())
.downloadJavadoc(project.downloadJavadoc());
}
@@ -227,6 +232,18 @@ public class DownloadOperation extends AbstractOperation {
return this;
}
+ /**
+ * Provides the {@code compile} scope modules download directory.
+ *
+ * @param directory the directory to download the {@code compile} scope modules into
+ * @return this operation instance
+ * @since 2.1
+ */
+ public DownloadOperation libCompileModulesDirectory(File directory) {
+ libCompileModulesDirectory_ = directory;
+ return this;
+ }
+
/**
* Provides the {@code provided} scope download directory.
*
@@ -239,6 +256,18 @@ public class DownloadOperation extends AbstractOperation {
return this;
}
+ /**
+ * Provides the {@code provided} scope modules download directory.
+ *
+ * @param directory the directory to download the {@code provided} scope modules into
+ * @return this operation instance
+ * @since 2.1
+ */
+ public DownloadOperation libProvidedModulesDirectory(File directory) {
+ libProvidedModulesDirectory_ = directory;
+ return this;
+ }
+
/**
* Provides the {@code runtime} scope download directory.
*
@@ -251,6 +280,18 @@ public class DownloadOperation extends AbstractOperation {
return this;
}
+ /**
+ * Provides the {@code runtime} scope modules download directory.
+ *
+ * @param directory the directory to download the {@code runtime} scope modules into
+ * @return this operation instance
+ * @since 2.1
+ */
+ public DownloadOperation libRuntimeModulesDirectory(File directory) {
+ libRuntimeModulesDirectory_ = directory;
+ return this;
+ }
+
/**
* Provides the {@code standalone} scope download directory.
*
@@ -263,6 +304,18 @@ public class DownloadOperation extends AbstractOperation {
return this;
}
+ /**
+ * Provides the {@code standalone} scope modules download directory.
+ *
+ * @param directory the directory to download the {@code standalone} scope modules into
+ * @return this operation instance
+ * @since 2.1
+ */
+ public DownloadOperation libStandaloneModulesDirectory(File directory) {
+ libStandaloneModulesDirectory_ = directory;
+ return this;
+ }
+
/**
* Provides the {@code test} scope download directory.
*
@@ -275,6 +328,18 @@ public class DownloadOperation extends AbstractOperation {
return this;
}
+ /**
+ * Provides the {@code test} scope modules download directory.
+ *
+ * @param directory the directory to download the {@code test} scope modules into
+ * @return this operation instance
+ * @since 2.1
+ */
+ public DownloadOperation libTestModulesDirectory(File directory) {
+ libTestModulesDirectory_ = directory;
+ return this;
+ }
+
/**
* Indicates whether the sources classifier should also be downloaded.
*
@@ -359,6 +424,16 @@ public class DownloadOperation extends AbstractOperation {
return libCompileDirectory_;
}
+ /**
+ * Retrieves the {@code compile} scope modules download directory.
+ *
+ * @return the {@code compile} scope modules download directory
+ * @since 2.1
+ */
+ public File libCompileModulesDirectory() {
+ return libCompileModulesDirectory_;
+ }
+
/**
* Retrieves the {@code provided} scope download directory.
*
@@ -369,6 +444,16 @@ public class DownloadOperation extends AbstractOperation {
return libProvidedDirectory_;
}
+ /**
+ * Retrieves the {@code provided} scope modules download directory.
+ *
+ * @return the {@code provided} scope modules download directory
+ * @since 2.1
+ */
+ public File libProvidedModulesDirectory() {
+ return libProvidedModulesDirectory_;
+ }
+
/**
* Retrieves the {@code runtime} scope download directory.
*
@@ -379,6 +464,16 @@ public class DownloadOperation extends AbstractOperation {
return libRuntimeDirectory_;
}
+ /**
+ * Retrieves the {@code runtime} scope modules download directory.
+ *
+ * @return the {@code runtime} scope modules download directory
+ * @since 2.1
+ */
+ public File libRuntimeModulesDirectory() {
+ return libRuntimeModulesDirectory_;
+ }
+
/**
* Retrieves the {@code standalone} scope download directory.
*
@@ -389,6 +484,16 @@ public class DownloadOperation extends AbstractOperation {
return libStandaloneDirectory_;
}
+ /**
+ * Retrieves the {@code standalone} scope modules download directory.
+ *
+ * @return the {@code standalone} scope modules download directory
+ * @since 2.1
+ */
+ public File libStandaloneModulesDirectory() {
+ return libStandaloneModulesDirectory_;
+ }
+
/**
* Retrieves the {@code test} scope download directory.
*
@@ -399,6 +504,16 @@ public class DownloadOperation extends AbstractOperation {
return libTestDirectory_;
}
+ /**
+ * Retrieves the {@code test} scope modules download directory.
+ *
+ * @return the {@code test} scope modules download directory
+ * @since 2.1
+ */
+ public File libTestModulesDirectory() {
+ return libTestModulesDirectory_;
+ }
+
/**
* Retrieves whether the sources classifier should also be downloaded.
*
diff --git a/src/main/java/rife/bld/operations/JavadocOperation.java b/src/main/java/rife/bld/operations/JavadocOperation.java
index 29573ca..b754b67 100644
--- a/src/main/java/rife/bld/operations/JavadocOperation.java
+++ b/src/main/java/rife/bld/operations/JavadocOperation.java
@@ -26,6 +26,7 @@ import java.util.regex.Pattern;
public class JavadocOperation extends AbstractOperation {
private File buildDirectory_;
private final List classpath_ = new ArrayList<>();
+ private final List modulePath_ = new ArrayList<>();
private final List sourceFiles_ = new ArrayList<>();
private final List sourceDirectories_ = new ArrayList<>();
private final JavadocOptions javadocOptions_ = new JavadocOptions();
@@ -74,6 +75,7 @@ public class JavadocOperation extends AbstractOperation {
}
executeBuildSources(
classpath(),
+ modulePath(),
sources,
buildDirectory());
}
@@ -81,12 +83,13 @@ public class JavadocOperation extends AbstractOperation {
/**
* Part of the {@link #execute} operation, build sources to a destination.
*
- * @param classpath the classpath list used for the compilation
+ * @param classpath the classpath list used for the javadoc generation
+ * @param modulePath the module path list used for the javadoc generation
* @param sources the source files to compile
* @param destination the destination directory
- * @since 1.5.10
+ * @since 2.1
*/
- protected void executeBuildSources(List classpath, List sources, File destination)
+ protected void executeBuildSources(List classpath, List modulePath, List sources, File destination)
throws IOException {
if (sources.isEmpty() || destination == null) {
return;
@@ -103,7 +106,13 @@ public class JavadocOperation extends AbstractOperation {
try (var file_manager = documentation.getStandardFileManager(null, null, null)) {
var compilation_units = file_manager.getJavaFileObjectsFromFiles(filtered_sources);
var diagnostics = new DiagnosticCollector();
- var options = new ArrayList<>(List.of("-d", destination.getAbsolutePath(), "-cp", FileUtils.joinPaths(classpath)));
+ var options = new ArrayList<>(List.of("-d", destination.getAbsolutePath()));
+ if (!classpath.isEmpty()) {
+ options.addAll(List.of("-cp", FileUtils.joinPaths(classpath)));
+ }
+ if (!modulePath.isEmpty()) {
+ options.addAll(List.of("-p", FileUtils.joinPaths(modulePath)));
+ }
options.addAll(javadocOptions());
var documentation_task = documentation.getTask(null, file_manager, diagnostics, null, options, compilation_units);
if (!documentation_task.call()) {
@@ -146,6 +155,7 @@ public class JavadocOperation extends AbstractOperation {
var operation = buildDirectory(project.buildJavadocDirectory())
.classpath(project.compileMainClasspath())
.classpath(project.buildMainDirectory().getAbsolutePath())
+ .modulePath(project.compileMainModulePath())
.sourceFiles(project.mainSourceFiles());
if (project.javaRelease() != null && !javadocOptions().containsRelease()) {
javadocOptions().release(project.javaRelease());
@@ -191,6 +201,32 @@ public class JavadocOperation extends AbstractOperation {
return this;
}
+ /**
+ * Provides entries for the javadoc module path.
+ *
+ * @param modulePath module path entries
+ * @return this operation instance
+ * @since 2.1
+ */
+ public JavadocOperation modulePath(String... modulePath) {
+ modulePath_.addAll(Arrays.asList(modulePath));
+ return this;
+ }
+
+ /**
+ * Provides a list of entries for the javadoc moduel path.
+ *
+ * A copy will be created to allow this list to be independently modifiable.
+ *
+ * @param modulePath a list of module path entries
+ * @return this operation instance
+ * @since 2.1
+ */
+ public JavadocOperation modulePath(List modulePath) {
+ modulePath_.addAll(modulePath);
+ return this;
+ }
+
/**
* Provides files for which documentation should be generated.
*
@@ -361,6 +397,18 @@ public class JavadocOperation extends AbstractOperation {
return classpath_;
}
+ /**
+ * Retrieves the list of entries for the javadoc module path.
+ *
+ * This is a modifiable list that can be retrieved and changed.
+ *
+ * @return the javadoc module path list
+ * @since 2.1
+ */
+ public List modulePath() {
+ return modulePath_;
+ }
+
/**
* Retrieves the list of files for which documentation should be generation.
*
diff --git a/src/main/java/rife/bld/operations/PublishOperation.java b/src/main/java/rife/bld/operations/PublishOperation.java
index 8181725..c732f7d 100644
--- a/src/main/java/rife/bld/operations/PublishOperation.java
+++ b/src/main/java/rife/bld/operations/PublishOperation.java
@@ -28,6 +28,7 @@ import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.List;
+import static rife.bld.dependencies.Dependency.*;
import static rife.bld.publish.MetadataBuilder.SNAPSHOT_TIMESTAMP_FORMATTER;
import static rife.tools.HttpUtils.*;
import static rife.tools.StringUtils.encodeHexLower;
@@ -180,8 +181,8 @@ public class PublishOperation extends AbstractOperation {
artifact_name.append('-').append(artifact.classifier());
}
var type = artifact.type();
- if (type == null) {
- type = "jar";
+ if (type == null || TYPE_JAR.equals(type) || TYPE_MODULAR_JAR.equals(type) || TYPE_CLASSPATH_JAR.equals(type)) {
+ type = TYPE_JAR;
}
artifact_name.append('.').append(type);
@@ -517,9 +518,9 @@ public class PublishOperation extends AbstractOperation {
artifactRetriever(project.artifactRetriever());
dependencies().include(project.dependencies());
artifacts(List.of(
- new PublishArtifact(new File(project.buildDistDirectory(), project.jarFileName()), "", "jar"),
- new PublishArtifact(new File(project.buildDistDirectory(), project.sourcesJarFileName()), "sources", "jar"),
- new PublishArtifact(new File(project.buildDistDirectory(), project.javadocJarFileName()), "javadoc", "jar")));
+ new PublishArtifact(new File(project.buildDistDirectory(), project.jarFileName()), "", TYPE_JAR),
+ new PublishArtifact(new File(project.buildDistDirectory(), project.sourcesJarFileName()), CLASSIFIER_SOURCES, TYPE_JAR),
+ new PublishArtifact(new File(project.buildDistDirectory(), project.javadocJarFileName()), CLASSIFIER_JAVADOC, TYPE_JAR)));
if (info().groupId() == null) {
info().groupId(project.pkg());
}
diff --git a/src/main/java/rife/bld/operations/PurgeOperation.java b/src/main/java/rife/bld/operations/PurgeOperation.java
index 267a121..c958faf 100644
--- a/src/main/java/rife/bld/operations/PurgeOperation.java
+++ b/src/main/java/rife/bld/operations/PurgeOperation.java
@@ -31,10 +31,15 @@ public class PurgeOperation extends AbstractOperation {
private final List repositories_ = new ArrayList<>();
private final DependencyScopes dependencies_ = new DependencyScopes();
private File libCompileDirectory_;
+ private File libCompileModulesDirectory_;
private File libProvidedDirectory_;
+ private File libProvidedModulesDirectory_;
private File libRuntimeDirectory_;
+ private File libRuntimeModulesDirectory_;
private File libStandaloneDirectory_;
+ private File libStandaloneModulesDirectory_;
private File libTestDirectory_;
+ private File libTestModulesDirectory_;
private boolean preserveSources_ = false;
private boolean preserveJavadoc_ = false;
@@ -65,7 +70,7 @@ public class PurgeOperation extends AbstractOperation {
* @since 1.5
*/
protected void executePurgeCompileDependencies() {
- executePurgeDependencies(libCompileDirectory(), dependencies().resolveCompileDependencies(properties(), artifactRetriever(), repositories()));
+ executePurgeDependencies(libCompileDirectory(), libCompileModulesDirectory(), dependencies().resolveCompileDependencies(properties(), artifactRetriever(), repositories()));
}
/**
@@ -74,7 +79,7 @@ public class PurgeOperation extends AbstractOperation {
* @since 1.8
*/
protected void executePurgeProvidedDependencies() {
- executePurgeDependencies(libProvidedDirectory(), dependencies().resolveProvidedDependencies(properties(), artifactRetriever(), repositories()));
+ executePurgeDependencies(libProvidedDirectory(), libProvidedModulesDirectory(), dependencies().resolveProvidedDependencies(properties(), artifactRetriever(), repositories()));
}
/**
@@ -83,7 +88,7 @@ public class PurgeOperation extends AbstractOperation {
* @since 1.5
*/
protected void executePurgeRuntimeDependencies() {
- executePurgeDependencies(libRuntimeDirectory(), dependencies().resolveRuntimeDependencies(properties(), artifactRetriever(), repositories()));
+ executePurgeDependencies(libRuntimeDirectory(), libRuntimeModulesDirectory(), dependencies().resolveRuntimeDependencies(properties(), artifactRetriever(), repositories()));
}
/**
@@ -92,7 +97,7 @@ public class PurgeOperation extends AbstractOperation {
* @since 1.5
*/
protected void executePurgeStandaloneDependencies() {
- executePurgeDependencies(libStandaloneDirectory(), dependencies().resolveStandaloneDependencies(properties(), artifactRetriever(), repositories()));
+ executePurgeDependencies(libStandaloneDirectory(), libStandaloneModulesDirectory(), dependencies().resolveStandaloneDependencies(properties(), artifactRetriever(), repositories()));
}
/**
@@ -101,22 +106,29 @@ public class PurgeOperation extends AbstractOperation {
* @since 1.5
*/
protected void executePurgeTestDependencies() {
- executePurgeDependencies(libTestDirectory(), dependencies().resolveTestDependencies(properties(), artifactRetriever(), repositories()));
+ executePurgeDependencies(libTestDirectory(), libTestModulesDirectory(), dependencies().resolveTestDependencies(properties(), artifactRetriever(), repositories()));
}
/**
* Part of the {@link #execute} operation, purge the artifacts for a particular dependency scope.
*
- * @param destinationDirectory the directory from which the artifacts should be purged
- * @param dependencies the dependencies to purge
- * @since 1.6
+ * @param classpathDirectory the directory from which the artifacts should be purged
+ * @param modulesDirectory the directory from which the modules should be purged
+ * @param dependencies the dependencies to purge
+ * @since 2.1
*/
- protected void executePurgeDependencies(File destinationDirectory, DependencySet dependencies) {
- if (destinationDirectory == null) {
+ protected void executePurgeDependencies(File classpathDirectory, File modulesDirectory, DependencySet dependencies) {
+ if (classpathDirectory == null && modulesDirectory == null) {
return;
}
- var filenames = new HashSet();
+
+ var classpath_names = new HashSet();
+ var modules_names = new HashSet();
for (var dependency : dependencies) {
+ var filenames = classpath_names;
+ if (dependency.isModularJar()) {
+ filenames = modules_names;
+ }
addTransferLocations(filenames, dependency);
if (preserveSources_) {
addTransferLocations(filenames, dependency.withClassifier(CLASSIFIER_SOURCES));
@@ -126,15 +138,27 @@ public class PurgeOperation extends AbstractOperation {
}
}
+ purgeFromDirectory(classpathDirectory, modulesDirectory, classpath_names);
+ purgeFromDirectory(modulesDirectory, classpathDirectory, modules_names);
+ }
+
+ private static void purgeFromDirectory(File directory, File preserveDirectory, HashSet preservedFileNames) {
+ if (directory == null) {
+ return;
+ }
+
boolean printed_header = false;
- for (var file : destinationDirectory.listFiles()) {
- if (!filenames.contains(file.getName())) {
- if (!printed_header) {
- printed_header = true;
- System.out.println("Deleting from " + destinationDirectory.getName() + ":");
+ var classpath_files = directory.listFiles();
+ if (classpath_files != null) {
+ for (var file : classpath_files) {
+ if (!preservedFileNames.contains(file.getName()) && !file.equals(preserveDirectory)) {
+ if (!printed_header) {
+ printed_header = true;
+ System.out.println("Deleting from " + directory.getName() + ":");
+ }
+ System.out.println(" " + file.getName());
+ file.delete();
}
- System.out.println(" " + file.getName());
- file.delete();
}
}
}
@@ -159,10 +183,15 @@ public class PurgeOperation extends AbstractOperation {
.repositories(project.repositories())
.dependencies(project.dependencies())
.libCompileDirectory(project.libCompileDirectory())
+ .libCompileModulesDirectory(project.libCompileModulesDirectory())
.libProvidedDirectory(project.libProvidedDirectory())
+ .libProvidedModulesDirectory(project.libProvidedModulesDirectory())
.libRuntimeDirectory(project.libRuntimeDirectory())
+ .libRuntimeModulesDirectory(project.libRuntimeModulesDirectory())
.libStandaloneDirectory(project.libStandaloneDirectory())
+ .libStandaloneModulesDirectory(project.libStandaloneModulesDirectory())
.libTestDirectory(project.libTestDirectory())
+ .libTestModulesDirectory(project.libTestModulesDirectory())
.preserveSources(project.downloadSources())
.preserveJavadoc(project.downloadJavadoc());
}
@@ -267,6 +296,18 @@ public class PurgeOperation extends AbstractOperation {
return this;
}
+ /**
+ * Provides the {@code compile} scope modules purge directory.
+ *
+ * @param directory the directory to purge the {@code compile} scope modules from
+ * @return this operation instance
+ * @since 2.1
+ */
+ public PurgeOperation libCompileModulesDirectory(File directory) {
+ libCompileModulesDirectory_ = directory;
+ return this;
+ }
+
/**
* Provides the {@code provided} scope purge directory.
*
@@ -279,6 +320,18 @@ public class PurgeOperation extends AbstractOperation {
return this;
}
+ /**
+ * Provides the {@code provided} scope modules purge directory.
+ *
+ * @param directory the directory to purge the {@code provided} scope modules from
+ * @return this operation instance
+ * @since 2.1
+ */
+ public PurgeOperation libProvidedModulesDirectory(File directory) {
+ libProvidedModulesDirectory_ = directory;
+ return this;
+ }
+
/**
* Provides the {@code runtime} scope purge directory.
*
@@ -291,6 +344,18 @@ public class PurgeOperation extends AbstractOperation {
return this;
}
+ /**
+ * Provides the {@code runtime} scope modules purge directory.
+ *
+ * @param directory the directory to purge the {@code runtime} scope modules from
+ * @return this operation instance
+ * @since 2.1
+ */
+ public PurgeOperation libRuntimeModulesDirectory(File directory) {
+ libRuntimeModulesDirectory_ = directory;
+ return this;
+ }
+
/**
* Provides the {@code standalone} scope purge directory.
*
@@ -303,6 +368,18 @@ public class PurgeOperation extends AbstractOperation {
return this;
}
+ /**
+ * Provides the {@code standalone} scope modules purge directory.
+ *
+ * @param directory the directory to purge the {@code standalone} scope modules from
+ * @return this operation instance
+ * @since 2.1
+ */
+ public PurgeOperation libStandaloneModulesDirectory(File directory) {
+ libStandaloneModulesDirectory_ = directory;
+ return this;
+ }
+
/**
* Provides the {@code test} scope purge directory.
*
@@ -315,6 +392,18 @@ public class PurgeOperation extends AbstractOperation {
return this;
}
+ /**
+ * Provides the {@code test} scope modules purge directory.
+ *
+ * @param directory the directory to purge the {@code test} scope modules from
+ * @return this operation instance
+ * @since 2.1
+ */
+ public PurgeOperation libTestModulesDirectory(File directory) {
+ libTestModulesDirectory_ = directory;
+ return this;
+ }
+
/**
* Provides the artifact retriever to use.
*
@@ -373,6 +462,16 @@ public class PurgeOperation extends AbstractOperation {
return libCompileDirectory_;
}
+ /**
+ * Retrieves the {@code compile} scope modules purge directory.
+ *
+ * @return the {@code compile} scope modules purge directory
+ * @since 2.1
+ */
+ public File libCompileModulesDirectory() {
+ return libCompileModulesDirectory_;
+ }
+
/**
* Retrieves the {@code provided} scope purge directory.
*
@@ -383,6 +482,16 @@ public class PurgeOperation extends AbstractOperation {
return libProvidedDirectory_;
}
+ /**
+ * Retrieves the {@code provided} scope modules purge directory.
+ *
+ * @return the {@code provided} scope modules purge directory
+ * @since 2.1
+ */
+ public File libProvidedModulesDirectory() {
+ return libProvidedModulesDirectory_;
+ }
+
/**
* Retrieves the {@code runtime} scope purge directory.
*
@@ -393,6 +502,16 @@ public class PurgeOperation extends AbstractOperation {
return libRuntimeDirectory_;
}
+ /**
+ * Retrieves the {@code runtime} scope modules purge directory.
+ *
+ * @return the {@code runtime} scope modules purge directory
+ * @since 2.1
+ */
+ public File libRuntimeModulesDirectory() {
+ return libRuntimeModulesDirectory_;
+ }
+
/**
* Retrieves the {@code standalone} scope purge directory.
*
@@ -403,6 +522,16 @@ public class PurgeOperation extends AbstractOperation {
return libStandaloneDirectory_;
}
+ /**
+ * Retrieves the {@code standalone} scope modules purge directory.
+ *
+ * @return the {@code standalone} scope modules purge directory
+ * @since 2.1
+ */
+ public File libStandaloneModulesDirectory() {
+ return libStandaloneModulesDirectory_;
+ }
+
/**
* Retrieves the {@code test} scope purge directory.
*
@@ -413,6 +542,16 @@ public class PurgeOperation extends AbstractOperation {
return libTestDirectory_;
}
+ /**
+ * Retrieves the {@code test} scope modules purge directory.
+ *
+ * @return the {@code test} scope modules purge directory
+ * @since 2.1
+ */
+ public File libTestModulesDirectory() {
+ return libTestModulesDirectory_;
+ }
+
/**
* Retrieves whether the sources classifier files should be preserved.
*
diff --git a/src/main/java/rife/bld/operations/RunOperation.java b/src/main/java/rife/bld/operations/RunOperation.java
index 35968cb..e59f6e2 100644
--- a/src/main/java/rife/bld/operations/RunOperation.java
+++ b/src/main/java/rife/bld/operations/RunOperation.java
@@ -35,6 +35,10 @@ public class RunOperation extends AbstractProcessOperation {
args.add("-cp");
args.add(FileUtils.joinPaths(classpath()));
}
+ if (!modulePath().isEmpty()) {
+ args.add("-p");
+ args.add(FileUtils.joinPaths(modulePath()));
+ }
args.add(mainClass());
args.addAll(runOptions());
return args;
@@ -50,6 +54,7 @@ public class RunOperation extends AbstractProcessOperation {
var operation = workDirectory(project.workDirectory())
.javaTool(project.javaTool())
.classpath(project.runClasspath())
+ .modulePath(project.runModulePath())
.mainClass(project.mainClass());
if (project.usesRife2Agent()) {
operation.javaOptions().javaAgent(project.getRife2AgentFile());
diff --git a/src/main/java/rife/bld/operations/TestOperation.java b/src/main/java/rife/bld/operations/TestOperation.java
index 184e8ba..5fcd5b5 100644
--- a/src/main/java/rife/bld/operations/TestOperation.java
+++ b/src/main/java/rife/bld/operations/TestOperation.java
@@ -51,8 +51,14 @@ public class TestOperation, O extends List
var args = new ArrayList();
args.add(javaTool());
args.addAll(javaOptions());
- args.add("-cp");
- args.add(FileUtils.joinPaths(classpath()));
+ if (!classpath().isEmpty()) {
+ args.add("-cp");
+ args.add(FileUtils.joinPaths(classpath()));
+ }
+ if (!modulePath().isEmpty()) {
+ args.add("-p");
+ args.add(FileUtils.joinPaths(modulePath()));
+ }
args.add(mainClass());
args.addAll(testToolOptions());
@@ -68,7 +74,8 @@ public class TestOperation, O extends List
public T fromProject(BaseProject project) {
var operation = workDirectory(project.workDirectory())
.javaTool(project.javaTool())
- .classpath(project.testClasspath());
+ .classpath(project.testClasspath())
+ .modulePath(project.testModulePath());
if (project.usesRife2Agent()) {
operation.javaOptions().javaAgent(project.getRife2AgentFile());
}
diff --git a/src/main/java/rife/bld/publish/PomBuilder.java b/src/main/java/rife/bld/publish/PomBuilder.java
index a850486..fa2bceb 100644
--- a/src/main/java/rife/bld/publish/PomBuilder.java
+++ b/src/main/java/rife/bld/publish/PomBuilder.java
@@ -14,6 +14,8 @@ import rife.tools.exceptions.FileUtilsErrorException;
import java.io.File;
import java.util.Objects;
+import static rife.bld.dependencies.Dependency.TYPE_JAR;
+
/**
* Provides the functionalities to build a Maven POM xml file.
*
@@ -186,7 +188,7 @@ public class PomBuilder {
t.blankValue("dependency-type");
t.blankValue("dependency-type-tag");
- if (!"jar".equals(dependency.type())) {
+ if (!TYPE_JAR.equals(dependency.type())) {
t.setValueEncoded("dependency-type", dependency.type());
t.setBlock("dependency-type-tag");
}
diff --git a/src/main/java/rife/bld/publish/PublishArtifact.java b/src/main/java/rife/bld/publish/PublishArtifact.java
index 4f70148..ff32b69 100644
--- a/src/main/java/rife/bld/publish/PublishArtifact.java
+++ b/src/main/java/rife/bld/publish/PublishArtifact.java
@@ -6,6 +6,8 @@ package rife.bld.publish;
import java.io.File;
+import static rife.bld.dependencies.Dependency.TYPE_JAR;
+
/**
* Contains the information about an artifact that will be published.
*
@@ -19,6 +21,6 @@ public record PublishArtifact(File file, String classifier, String type) {
public PublishArtifact(File file, String classifier, String type) {
this.file = file;
this.classifier = (classifier == null ? "" : classifier);
- this.type = (type == null ? "jar" : type);
+ this.type = (type == null ? TYPE_JAR : type);
}
}
diff --git a/src/main/java/rife/bld/wrapper/WrapperExtensionResolver.java b/src/main/java/rife/bld/wrapper/WrapperExtensionResolver.java
index 17ad1bd..af5671a 100644
--- a/src/main/java/rife/bld/wrapper/WrapperExtensionResolver.java
+++ b/src/main/java/rife/bld/wrapper/WrapperExtensionResolver.java
@@ -109,7 +109,7 @@ public class WrapperExtensionResolver {
additional_classifiers = classifiers.toArray(new String[0]);
}
- var artifacts = dependencies.transferIntoDirectory(resolution_, retriever_, repositories_, destinationDirectory_, additional_classifiers);
+ var artifacts = dependencies.transferIntoDirectory(resolution_, retriever_, repositories_, destinationDirectory_, destinationDirectory_, additional_classifiers);
for (var artifact : artifacts) {
var location = artifact.location();
diff --git a/src/test/java/rife/bld/TestProject.java b/src/test/java/rife/bld/TestProject.java
index 26c1b56..6b3da04 100644
--- a/src/test/java/rife/bld/TestProject.java
+++ b/src/test/java/rife/bld/TestProject.java
@@ -114,6 +114,11 @@ public class TestProject {
assertNotNull(project.compileTestClasspath());
assertNotNull(project.runClasspath());
assertNotNull(project.testClasspath());
+
+ assertNotNull(project.compileMainModulePath());
+ assertNotNull(project.compileTestModulePath());
+ assertNotNull(project.runModulePath());
+ assertNotNull(project.testModulePath());
}
static class CustomProject extends Project {
@@ -321,10 +326,6 @@ public class TestProject {
.include(dependency("org.jsoup", "jsoup", version(1, 15, 4)))
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 9, 2)))
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 9, 2)));
- scope(standalone)
- .include(dependency("org.eclipse.jetty", "jetty-server", version(11, 0, 14)))
- .include(dependency("org.eclipse.jetty", "jetty-servlet", version(11, 0, 14)))
- .include(dependency("org.slf4j", "slf4j-simple", version(2, 0, 7)));
}
public void enableAutoDownloadPurge() {
@@ -364,8 +365,6 @@ public class TestProject {
/lib/bld/bld.cache
/lib/compile
/lib/compile/rife2-1.5.11.jar
- /lib/provided
- /lib/runtime
/lib/test
/lib/test/apiguardian-api-1.1.2.jar
/lib/test/jsoup-1.15.4.jar
@@ -379,8 +378,6 @@ public class TestProject {
/lib/test/opentest4j-1.2.0.jar""", FileUtils.generateDirectoryListing(tmp));
FileUtils.deleteDirectory(new File(tmp, "lib/compile"));
- FileUtils.deleteDirectory(new File(tmp, "lib/provided"));
- FileUtils.deleteDirectory(new File(tmp, "lib/runtime"));
FileUtils.deleteDirectory(new File(tmp, "lib/test"));
assertEquals("""
/lib
@@ -405,8 +402,6 @@ public class TestProject {
/lib/bld/bld.cache
/lib/compile
/lib/compile/rife2-1.5.12.jar
- /lib/provided
- /lib/runtime
/lib/test
/lib/test/apiguardian-api-1.1.2.jar
/lib/test/jsoup-1.15.4.jar
@@ -429,8 +424,6 @@ public class TestProject {
/lib/bld/bld.cache
/lib/compile
/lib/compile/rife2-1.5.15.jar
- /lib/provided
- /lib/runtime
/lib/test
/lib/test/apiguardian-api-1.1.2.jar
/lib/test/jsoup-1.15.4.jar
diff --git a/src/test/java/rife/bld/TestWebProject.java b/src/test/java/rife/bld/TestWebProject.java
index f794adc..79816c9 100644
--- a/src/test/java/rife/bld/TestWebProject.java
+++ b/src/test/java/rife/bld/TestWebProject.java
@@ -8,9 +8,14 @@ import org.junit.jupiter.api.Test;
import rife.bld.dependencies.VersionNumber;
import rife.tools.FileUtils;
+import java.io.File;
import java.nio.file.Files;
+import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
+import static rife.bld.dependencies.Repository.MAVEN_CENTRAL;
+import static rife.bld.dependencies.Scope.*;
+import static rife.bld.dependencies.Scope.compile;
public class TestWebProject {
@Test
@@ -149,4 +154,167 @@ public class TestWebProject {
FileUtils.deleteDirectory(tmp);
}
}
+
+ static class CustomWebProjectAutoPurge extends WebProject {
+ CustomWebProjectAutoPurge(File tmp) {
+ workDirectory = tmp;
+ pkg = "test.pkg";
+ name = "my_project";
+ version = new VersionNumber(0, 0, 1);
+
+ repositories = List.of(MAVEN_CENTRAL);
+ scope(compile)
+ .include(dependency("com.uwyn.rife2", "rife2", version(1, 5, 11)));
+ scope(test)
+ .include(dependency("org.jsoup", "jsoup", version(1, 15, 4)))
+ .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 9, 2)))
+ .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 9, 2)));
+ scope(standalone)
+ .include(dependency("org.eclipse.jetty", "jetty-server", version(11, 0, 14)))
+ .include(dependency("org.eclipse.jetty", "jetty-servlet", version(11, 0, 14)))
+ .include(dependency("org.slf4j", "slf4j-simple", version(2, 0, 7)));
+ }
+
+ public void enableAutoDownloadPurge() {
+ autoDownloadPurge = true;
+ }
+
+ public void increaseRife2Version() {
+ scope(compile).clear();
+ scope(compile)
+ .include(dependency("com.uwyn.rife2", "rife2", version(1, 5, 12)));
+ }
+
+ public void increaseRife2VersionMore() {
+ scope(compile).clear();
+ scope(compile)
+ .include(dependency("com.uwyn.rife2", "rife2", version(1, 5, 15)));
+ }
+ }
+
+ @Test
+ void testAutoDownloadPurge()
+ throws Exception {
+ var tmp = Files.createTempDirectory("test").toFile();
+ try {
+ var project = new CustomWebProjectAutoPurge(tmp);
+ project.execute(new String[]{"version"});
+
+ assertEquals("", FileUtils.generateDirectoryListing(tmp));
+
+ project = new CustomWebProjectAutoPurge(tmp);
+ project.enableAutoDownloadPurge();
+ project.execute(new String[]{"version"});
+
+ assertEquals("""
+ /lib
+ /lib/bld
+ /lib/bld/bld.cache
+ /lib/compile
+ /lib/compile/rife2-1.5.11.jar
+ /lib/standalone
+ /lib/standalone/jetty-http-11.0.14.jar
+ /lib/standalone/jetty-io-11.0.14.jar
+ /lib/standalone/jetty-jakarta-servlet-api-5.0.2.jar
+ /lib/standalone/jetty-security-11.0.14.jar
+ /lib/standalone/jetty-server-11.0.14.jar
+ /lib/standalone/jetty-servlet-11.0.14.jar
+ /lib/standalone/jetty-util-11.0.14.jar
+ /lib/standalone/slf4j-api-2.0.7.jar
+ /lib/standalone/slf4j-simple-2.0.7.jar
+ /lib/test
+ /lib/test/apiguardian-api-1.1.2.jar
+ /lib/test/jsoup-1.15.4.jar
+ /lib/test/junit-jupiter-5.9.2.jar
+ /lib/test/junit-jupiter-api-5.9.2.jar
+ /lib/test/junit-jupiter-engine-5.9.2.jar
+ /lib/test/junit-jupiter-params-5.9.2.jar
+ /lib/test/junit-platform-commons-1.9.2.jar
+ /lib/test/junit-platform-console-standalone-1.9.2.jar
+ /lib/test/junit-platform-engine-1.9.2.jar
+ /lib/test/opentest4j-1.2.0.jar""", FileUtils.generateDirectoryListing(tmp));
+
+ FileUtils.deleteDirectory(new File(tmp, "lib/compile"));
+ FileUtils.deleteDirectory(new File(tmp, "lib/standalone"));
+ FileUtils.deleteDirectory(new File(tmp, "lib/test"));
+ assertEquals("""
+ /lib
+ /lib/bld
+ /lib/bld/bld.cache""", FileUtils.generateDirectoryListing(tmp));
+
+ project = new CustomWebProjectAutoPurge(tmp);
+ project.enableAutoDownloadPurge();
+ project.execute(new String[]{"version"});
+ assertEquals("""
+ /lib
+ /lib/bld
+ /lib/bld/bld.cache""", FileUtils.generateDirectoryListing(tmp));
+
+ project = new CustomWebProjectAutoPurge(tmp);
+ project.enableAutoDownloadPurge();
+ project.increaseRife2Version();
+ project.execute(new String[]{"version"});
+ assertEquals("""
+ /lib
+ /lib/bld
+ /lib/bld/bld.cache
+ /lib/compile
+ /lib/compile/rife2-1.5.12.jar
+ /lib/standalone
+ /lib/standalone/jetty-http-11.0.14.jar
+ /lib/standalone/jetty-io-11.0.14.jar
+ /lib/standalone/jetty-jakarta-servlet-api-5.0.2.jar
+ /lib/standalone/jetty-security-11.0.14.jar
+ /lib/standalone/jetty-server-11.0.14.jar
+ /lib/standalone/jetty-servlet-11.0.14.jar
+ /lib/standalone/jetty-util-11.0.14.jar
+ /lib/standalone/slf4j-api-2.0.7.jar
+ /lib/standalone/slf4j-simple-2.0.7.jar
+ /lib/test
+ /lib/test/apiguardian-api-1.1.2.jar
+ /lib/test/jsoup-1.15.4.jar
+ /lib/test/junit-jupiter-5.9.2.jar
+ /lib/test/junit-jupiter-api-5.9.2.jar
+ /lib/test/junit-jupiter-engine-5.9.2.jar
+ /lib/test/junit-jupiter-params-5.9.2.jar
+ /lib/test/junit-platform-commons-1.9.2.jar
+ /lib/test/junit-platform-console-standalone-1.9.2.jar
+ /lib/test/junit-platform-engine-1.9.2.jar
+ /lib/test/opentest4j-1.2.0.jar""", FileUtils.generateDirectoryListing(tmp));
+
+ project = new CustomWebProjectAutoPurge(tmp);
+ project.enableAutoDownloadPurge();
+ project.increaseRife2VersionMore();
+ project.execute(new String[]{"version"});
+ assertEquals("""
+ /lib
+ /lib/bld
+ /lib/bld/bld.cache
+ /lib/compile
+ /lib/compile/rife2-1.5.15.jar
+ /lib/standalone
+ /lib/standalone/jetty-http-11.0.14.jar
+ /lib/standalone/jetty-io-11.0.14.jar
+ /lib/standalone/jetty-jakarta-servlet-api-5.0.2.jar
+ /lib/standalone/jetty-security-11.0.14.jar
+ /lib/standalone/jetty-server-11.0.14.jar
+ /lib/standalone/jetty-servlet-11.0.14.jar
+ /lib/standalone/jetty-util-11.0.14.jar
+ /lib/standalone/slf4j-api-2.0.7.jar
+ /lib/standalone/slf4j-simple-2.0.7.jar
+ /lib/test
+ /lib/test/apiguardian-api-1.1.2.jar
+ /lib/test/jsoup-1.15.4.jar
+ /lib/test/junit-jupiter-5.9.2.jar
+ /lib/test/junit-jupiter-api-5.9.2.jar
+ /lib/test/junit-jupiter-engine-5.9.2.jar
+ /lib/test/junit-jupiter-params-5.9.2.jar
+ /lib/test/junit-platform-commons-1.9.2.jar
+ /lib/test/junit-platform-console-standalone-1.9.2.jar
+ /lib/test/junit-platform-engine-1.9.2.jar
+ /lib/test/opentest4j-1.2.0.jar""", FileUtils.generateDirectoryListing(tmp));
+ } finally {
+ FileUtils.deleteDirectory(tmp);
+ }
+ }
}
diff --git a/src/test/java/rife/bld/dependencies/TestDependency.java b/src/test/java/rife/bld/dependencies/TestDependency.java
index f91cc15..1ecb079 100644
--- a/src/test/java/rife/bld/dependencies/TestDependency.java
+++ b/src/test/java/rife/bld/dependencies/TestDependency.java
@@ -18,6 +18,8 @@ public class TestDependency {
assertEquals(VersionNumber.UNKNOWN, dependency1.version());
assertEquals("", dependency1.classifier());
assertEquals("jar", dependency1.type());
+ assertFalse(dependency1.isModularJar());
+ assertFalse(dependency1.isClasspathJar());
var dependency2 = new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 0));
assertNotNull(dependency2);
@@ -26,6 +28,8 @@ public class TestDependency {
assertEquals(new VersionNumber(1, 4, 0), dependency2.version());
assertEquals("", dependency2.classifier());
assertEquals("jar", dependency2.type());
+ assertFalse(dependency2.isModularJar());
+ assertFalse(dependency2.isClasspathJar());
var dependency3 = new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 0), "agent");
assertNotNull(dependency3);
@@ -34,6 +38,8 @@ public class TestDependency {
assertEquals(new VersionNumber(1, 4, 0), dependency3.version());
assertEquals("agent", dependency3.classifier());
assertEquals("jar", dependency3.type());
+ assertFalse(dependency3.isModularJar());
+ assertFalse(dependency3.isClasspathJar());
var dependency4 = new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 0), "bld", "zip");
assertNotNull(dependency4);
@@ -42,6 +48,65 @@ public class TestDependency {
assertEquals(new VersionNumber(1, 4, 0), dependency4.version());
assertEquals("bld", dependency4.classifier());
assertEquals("zip", dependency4.type());
+ assertFalse(dependency4.isModularJar());
+ assertFalse(dependency4.isClasspathJar());
+
+ var dependency5 = new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 0), null, "modular-jar");
+ assertNotNull(dependency5);
+ assertEquals("com.uwyn.rife2", dependency5.groupId());
+ assertEquals("rife2", dependency5.artifactId());
+ assertEquals(new VersionNumber(1, 4, 0), dependency5.version());
+ assertEquals("", dependency5.classifier());
+ assertEquals("modular-jar", dependency5.type());
+ assertTrue(dependency5.isModularJar());
+ assertFalse(dependency5.isClasspathJar());
+
+ var dependency6 = new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 0), null, "classpath-jar");
+ assertNotNull(dependency6);
+ assertEquals("com.uwyn.rife2", dependency6.groupId());
+ assertEquals("rife2", dependency6.artifactId());
+ assertEquals(new VersionNumber(1, 4, 0), dependency6.version());
+ assertEquals("", dependency6.classifier());
+ assertEquals("classpath-jar", dependency6.type());
+ assertFalse(dependency6.isModularJar());
+ assertTrue(dependency6.isClasspathJar());
+ }
+
+ @Test
+ void testParent() {
+ var parent1 = new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 0));
+ var parent2 = new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 0), null, "modular-jar");
+ var parent3 = new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 0), null, "classpath-jar");
+
+ var child1a = new Dependency("com.uwyn.rife2", "bld", new VersionNumber(1, 5, 0), null, null, null, parent1);
+ assertFalse(child1a.isModularJar());
+ assertFalse(child1a.isClasspathJar());
+ var child1b = new Dependency("com.uwyn.rife2", "bld", new VersionNumber(1, 5, 0), null, null, null, parent2);
+ assertTrue(child1b.isModularJar());
+ assertFalse(child1b.isClasspathJar());
+ var child1c = new Dependency("com.uwyn.rife2", "bld", new VersionNumber(1, 5, 0), null, null, null, parent3);
+ assertFalse(child1c.isModularJar());
+ assertFalse(child1c.isClasspathJar());
+
+ var child2a = new Dependency("com.uwyn.rife2", "bld", new VersionNumber(1, 5, 0), null, "modular-jar", null, parent1);
+ assertTrue(child2a.isModularJar());
+ assertFalse(child2a.isClasspathJar());
+ var child2b = new Dependency("com.uwyn.rife2", "bld", new VersionNumber(1, 5, 0), null, "modular-jar", null, parent2);
+ assertTrue(child2b.isModularJar());
+ assertFalse(child2b.isClasspathJar());
+ var child2c = new Dependency("com.uwyn.rife2", "bld", new VersionNumber(1, 5, 0), null, "modular-jar", null, parent3);
+ assertTrue(child2c.isModularJar());
+ assertFalse(child2c.isClasspathJar());
+
+ var child3a = new Dependency("com.uwyn.rife2", "bld", new VersionNumber(1, 5, 0), null, "classpath-jar", null, parent1);
+ assertFalse(child3a.isModularJar());
+ assertTrue(child3a.isClasspathJar());
+ var child3b = new Dependency("com.uwyn.rife2", "bld", new VersionNumber(1, 5, 0), null, "classpath-jar", null, parent2);
+ assertFalse(child3b.isModularJar());
+ assertTrue(child3b.isClasspathJar());
+ var child3c = new Dependency("com.uwyn.rife2", "bld", new VersionNumber(1, 5, 0), null, "classpath-jar", null, parent3);
+ assertFalse(child3c.isModularJar());
+ assertTrue(child3c.isClasspathJar());
}
@Test
@@ -99,7 +164,7 @@ public class TestDependency {
}
@Test
- void testToParse() {
+ void testParse() {
assertEquals("com.uwyn.rife2:rife2", Dependency.parse("com.uwyn.rife2:rife2").toString());
assertEquals("com.uwyn.rife2:rife2:1.4.0", Dependency.parse("com.uwyn.rife2:rife2:1.4.0").toString());
assertEquals("com.uwyn.rife2:rife2:1.4.0:agent", Dependency.parse("com.uwyn.rife2:rife2:1.4.0:agent").toString());
@@ -114,4 +179,102 @@ public class TestDependency {
assertEquals(new Dependency("com.uwyn.rife2", "rife2", null, null, "zip").toString(), Dependency.parse("com.uwyn.rife2:rife2@zip").toString());
assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 0), null, "zip").toString(), Dependency.parse("com.uwyn.rife2:rife2:1.4.0@zip").toString());
}
+
+ @Test
+ void testEquals() {
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2"), new Dependency("com.uwyn.rife2", "rife2"));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2"), new Dependency("com.uwyn.rife2", "rife1"));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2"), new Dependency("com.uwyn.rife1", "rife2"));
+
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)));
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,1)));
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)), new Dependency("com.uwyn.rife2", "rife2", null));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)), new Dependency("com.uwyn.rife2", "rife1", new VersionNumber(1,4,0)));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)), new Dependency("com.uwyn.rife1", "rife2", new VersionNumber(1,4,0)));
+
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)));
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,1)));
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife2", null));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife1", new VersionNumber(1,4,0)));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife1", "rife2", new VersionNumber(1,4,0)));
+
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"));
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,1), null, "jar"));
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife2", null, null, "jar"));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife1", new VersionNumber(1,4,0), null, "jar"));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife1", "rife2", new VersionNumber(1,4,0), null, "jar"));
+
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "modular-jar"));
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,1), null, "modular-jar"));
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife2", null, null, "modular-jar"));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife1", new VersionNumber(1,4,0), null, "modular-jar"));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife1", "rife2", new VersionNumber(1,4,0), null, "modular-jar"));
+
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "classpath-jar"));
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,1), null, "classpath-jar"));
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife2", null, null, "classpath-jar"));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife1", new VersionNumber(1,4,0), null, "classpath-jar"));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife1", "rife2", new VersionNumber(1,4,0), null, "classpath-jar"));
+
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "zip"));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,1), null, "zip"));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife2", null, null, "zip"));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife1", new VersionNumber(1,4,0), null, "zip"));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife1", "rife2", new VersionNumber(1,4,0), null, "zip"));
+
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), "agent", "jar"));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,1), "agent", "jar"));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife2", null, "agent", "jar"));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife2", "rife1", new VersionNumber(1,4,0), "agent", "jar"));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Dependency("com.uwyn.rife1", "rife2", new VersionNumber(1,4,0), "agent", "jar"));
+ }
+
+ @Test
+ void testHashcode() {
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2").hashCode(), new Dependency("com.uwyn.rife2", "rife2").hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2").hashCode(), new Dependency("com.uwyn.rife2", "rife1").hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2").hashCode(), new Dependency("com.uwyn.rife1", "rife2").hashCode());
+
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)).hashCode(), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)).hashCode());
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)).hashCode(), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,1)).hashCode());
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)).hashCode(), new Dependency("com.uwyn.rife2", "rife2", null).hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)).hashCode(), new Dependency("com.uwyn.rife2", "rife1", new VersionNumber(1,4,0)).hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)).hashCode(), new Dependency("com.uwyn.rife1", "rife2", new VersionNumber(1,4,0)).hashCode());
+
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)).hashCode());
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,1)).hashCode());
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife2", null).hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife1", new VersionNumber(1,4,0)).hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife1", "rife2", new VersionNumber(1,4,0)).hashCode());
+
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode());
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,1), null, "jar").hashCode());
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife2", null, null, "jar").hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife1", new VersionNumber(1,4,0), null, "jar").hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife1", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode());
+
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "modular-jar").hashCode());
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,1), null, "modular-jar").hashCode());
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife2", null, null, "modular-jar").hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife1", new VersionNumber(1,4,0), null, "modular-jar").hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife1", "rife2", new VersionNumber(1,4,0), null, "modular-jar").hashCode());
+
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "classpath-jar").hashCode());
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,1), null, "classpath-jar").hashCode());
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife2", null, null, "classpath-jar").hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife1", new VersionNumber(1,4,0), null, "classpath-jar").hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife1", "rife2", new VersionNumber(1,4,0), null, "classpath-jar").hashCode());
+
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "zip").hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,1), null, "zip").hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife2", null, null, "zip").hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife1", new VersionNumber(1,4,0), null, "zip").hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife1", "rife2", new VersionNumber(1,4,0), null, "zip").hashCode());
+
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), "agent", "jar").hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,1), "agent", "jar").hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife2", null, "agent", "jar").hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife2", "rife1", new VersionNumber(1,4,0), "agent", "jar").hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Dependency("com.uwyn.rife1", "rife2", new VersionNumber(1,4,0), "agent", "jar").hashCode());
+ }
}
diff --git a/src/test/java/rife/bld/dependencies/TestDependencyResolver.java b/src/test/java/rife/bld/dependencies/TestDependencyResolver.java
index 9ee0492..ab22722 100644
--- a/src/test/java/rife/bld/dependencies/TestDependencyResolver.java
+++ b/src/test/java/rife/bld/dependencies/TestDependencyResolver.java
@@ -111,10 +111,10 @@ public class TestDependencyResolver {
@Test
void testSnapshotMetadata() {
- var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 0, "SNAPSHOT")));
+ var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 1, "SNAPSHOT")));
var metadata = resolver.getSnapshotMavenMetadata();
assertNotNull(metadata);
- assertEquals("20230303.130437", metadata.getSnapshotTimestamp());
+ assertEquals("20230307.195509", metadata.getSnapshotTimestamp());
assertEquals(4, metadata.getSnapshotBuildNumber());
}
@@ -128,7 +128,7 @@ public class TestDependencyResolver {
@Test
void testGetCompileDependenciesRIFE2Snapshot() {
- var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 0, "SNAPSHOT")));
+ var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 1, "SNAPSHOT")));
var dependencies = resolver.getDirectDependencies(compile);
assertNotNull(dependencies);
assertEquals(0, dependencies.size());
@@ -334,12 +334,12 @@ public class TestDependencyResolver {
@Test
void testGetCompileTransitiveDependenciesRIFE2Snapshot() {
- var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 0, "SNAPSHOT")));
+ var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 1, "SNAPSHOT")));
var dependencies = resolver.getAllDependencies(compile);
assertNotNull(dependencies);
assertEquals(1, dependencies.size());
assertEquals("""
- com.uwyn.rife2:rife2:1.4.0-SNAPSHOT""", StringUtils.join(dependencies, "\n"));
+ com.uwyn.rife2:rife2:1.4.1-SNAPSHOT""", StringUtils.join(dependencies, "\n"));
}
@Test
@@ -727,17 +727,21 @@ public class TestDependencyResolver {
void testTransferDependency()
throws Exception {
var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("com.uwyn.rife2", "rife2"));
- var tmp = Files.createTempDirectory("transfers").toFile();
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
try {
- var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp);
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
assertTrue(StringUtils.join(result, "\n").matches("""
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/uwyn/rife2/rife2/.*/rife2-.*.jar"""));
- var files = FileUtils.getFileList(tmp);
+ var files = FileUtils.getFileList(tmp1);
assertEquals(1, files.size());
assertTrue(files.get(0).matches("rife2-.+\\.jar"));
+
+ assertTrue(FileUtils.getFileList(tmp2).isEmpty());
} finally {
- FileUtils.deleteDirectory(tmp);
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
}
}
@@ -745,18 +749,22 @@ public class TestDependencyResolver {
void testTransferDependencySources()
throws Exception {
var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("com.uwyn.rife2", "rife2"));
- var tmp = Files.createTempDirectory("transfers").toFile();
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
try {
- var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp, CLASSIFIER_SOURCES);
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2, CLASSIFIER_SOURCES);
assertTrue(StringUtils.join(result, "\n").matches("""
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/uwyn/rife2/rife2/.*/rife2-.*.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/uwyn/rife2/rife2/.*/rife2-.*-sources.jar"""));
- var files = FileUtils.getFileList(tmp);
+ var files = FileUtils.getFileList(tmp1);
assertEquals(2, files.size());
assertTrue(files.get(0).matches("rife2-.+\\.jar"));
+
+ assertTrue(FileUtils.getFileList(tmp2).isEmpty());
} finally {
- FileUtils.deleteDirectory(tmp);
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
}
}
@@ -764,79 +772,214 @@ public class TestDependencyResolver {
void testTransferDependencySourcesJavadoc()
throws Exception {
var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("com.uwyn.rife2", "rife2"));
- var tmp = Files.createTempDirectory("transfers").toFile();
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
try {
- var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp, CLASSIFIER_SOURCES, CLASSIFIER_JAVADOC);
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2, CLASSIFIER_SOURCES, CLASSIFIER_JAVADOC);
assertTrue(StringUtils.join(result, "\n").matches("""
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/uwyn/rife2/rife2/.*/rife2-.*.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/uwyn/rife2/rife2/.*/rife2-.*-sources.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/uwyn/rife2/rife2/.*/rife2-.*-javadoc.jar"""));
- var files = FileUtils.getFileList(tmp);
+ var files = FileUtils.getFileList(tmp1);
assertEquals(3, files.size());
assertTrue(files.get(0).matches("rife2-.+\\.jar"));
+
+ assertTrue(FileUtils.getFileList(tmp2).isEmpty());
} finally {
- FileUtils.deleteDirectory(tmp);
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
}
}
@Test
void testTransferDependencySnapshot()
throws Exception {
- var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 0, "SNAPSHOT")));
- var tmp = Files.createTempDirectory("transfers").toFile();
+ var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 1, "SNAPSHOT")));
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
try {
- var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp);
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
assertEquals("""
- https://s01.oss.sonatype.org/content/repositories/snapshots/:https://s01.oss.sonatype.org/content/repositories/snapshots/com/uwyn/rife2/rife2/1.4.0-SNAPSHOT/rife2-1.4.0-20230303.130437-4.jar""", StringUtils.join(result, "\n"));
+ https://s01.oss.sonatype.org/content/repositories/snapshots/:https://s01.oss.sonatype.org/content/repositories/snapshots/com/uwyn/rife2/rife2/1.4.1-SNAPSHOT/rife2-1.4.1-20230307.195509-4.jar""", StringUtils.join(result, "\n"));
- var files = FileUtils.getFileList(tmp);
+ var files = FileUtils.getFileList(tmp1);
assertEquals(1, files.size());
- assertTrue(files.contains("rife2-1.4.0-20230303.130437-4.jar"));
+ assertTrue(files.contains("rife2-1.4.1-20230307.195509-4.jar"));
+
+ assertTrue(FileUtils.getFileList(tmp2).isEmpty());
} finally {
- FileUtils.deleteDirectory(tmp);
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
}
}
@Test
void testTransferDependencySnapshotSources()
throws Exception {
- var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 0, "SNAPSHOT")));
- var tmp = Files.createTempDirectory("transfers").toFile();
+ var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 1, "SNAPSHOT")));
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
try {
- var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp, CLASSIFIER_SOURCES);
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2, CLASSIFIER_SOURCES);
assertEquals("""
- https://s01.oss.sonatype.org/content/repositories/snapshots/:https://s01.oss.sonatype.org/content/repositories/snapshots/com/uwyn/rife2/rife2/1.4.0-SNAPSHOT/rife2-1.4.0-20230303.130437-4.jar
- https://s01.oss.sonatype.org/content/repositories/snapshots/:https://s01.oss.sonatype.org/content/repositories/snapshots/com/uwyn/rife2/rife2/1.4.0-SNAPSHOT/rife2-1.4.0-20230303.130437-4-sources.jar""", StringUtils.join(result, "\n"));
+ https://s01.oss.sonatype.org/content/repositories/snapshots/:https://s01.oss.sonatype.org/content/repositories/snapshots/com/uwyn/rife2/rife2/1.4.1-SNAPSHOT/rife2-1.4.1-20230307.195509-4.jar
+ https://s01.oss.sonatype.org/content/repositories/snapshots/:https://s01.oss.sonatype.org/content/repositories/snapshots/com/uwyn/rife2/rife2/1.4.1-SNAPSHOT/rife2-1.4.1-20230307.195509-4-sources.jar""", StringUtils.join(result, "\n"));
- var files = FileUtils.getFileList(tmp);
+ var files = FileUtils.getFileList(tmp1);
assertEquals(2, files.size());
- assertTrue(files.contains("rife2-1.4.0-20230303.130437-4.jar"));
- assertTrue(files.contains("rife2-1.4.0-20230303.130437-4-sources.jar"));
+ assertTrue(files.contains("rife2-1.4.1-20230307.195509-4.jar"));
+ assertTrue(files.contains("rife2-1.4.1-20230307.195509-4-sources.jar"));
+
+ assertTrue(FileUtils.getFileList(tmp2).isEmpty());
} finally {
- FileUtils.deleteDirectory(tmp);
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
}
}
@Test
void testTransferDependencySnapshotSourcesJavadoc()
throws Exception {
- var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 0, "SNAPSHOT")));
- var tmp = Files.createTempDirectory("transfers").toFile();
+ var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 1, "SNAPSHOT")));
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
try {
- var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp, CLASSIFIER_SOURCES, CLASSIFIER_JAVADOC);
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2, CLASSIFIER_SOURCES, CLASSIFIER_JAVADOC);
assertEquals("""
- https://s01.oss.sonatype.org/content/repositories/snapshots/:https://s01.oss.sonatype.org/content/repositories/snapshots/com/uwyn/rife2/rife2/1.4.0-SNAPSHOT/rife2-1.4.0-20230303.130437-4.jar
- https://s01.oss.sonatype.org/content/repositories/snapshots/:https://s01.oss.sonatype.org/content/repositories/snapshots/com/uwyn/rife2/rife2/1.4.0-SNAPSHOT/rife2-1.4.0-20230303.130437-4-sources.jar
- https://s01.oss.sonatype.org/content/repositories/snapshots/:https://s01.oss.sonatype.org/content/repositories/snapshots/com/uwyn/rife2/rife2/1.4.0-SNAPSHOT/rife2-1.4.0-20230303.130437-4-javadoc.jar""", StringUtils.join(result, "\n"));
+ https://s01.oss.sonatype.org/content/repositories/snapshots/:https://s01.oss.sonatype.org/content/repositories/snapshots/com/uwyn/rife2/rife2/1.4.1-SNAPSHOT/rife2-1.4.1-20230307.195509-4.jar
+ https://s01.oss.sonatype.org/content/repositories/snapshots/:https://s01.oss.sonatype.org/content/repositories/snapshots/com/uwyn/rife2/rife2/1.4.1-SNAPSHOT/rife2-1.4.1-20230307.195509-4-sources.jar
+ https://s01.oss.sonatype.org/content/repositories/snapshots/:https://s01.oss.sonatype.org/content/repositories/snapshots/com/uwyn/rife2/rife2/1.4.1-SNAPSHOT/rife2-1.4.1-20230307.195509-4-javadoc.jar""", StringUtils.join(result, "\n"));
- var files = FileUtils.getFileList(tmp);
+ var files = FileUtils.getFileList(tmp1);
assertEquals(3, files.size());
- assertTrue(files.contains("rife2-1.4.0-20230303.130437-4.jar"));
- assertTrue(files.contains("rife2-1.4.0-20230303.130437-4-javadoc.jar"));
- assertTrue(files.contains("rife2-1.4.0-20230303.130437-4-sources.jar"));
+ assertTrue(files.contains("rife2-1.4.1-20230307.195509-4.jar"));
+ assertTrue(files.contains("rife2-1.4.1-20230307.195509-4-javadoc.jar"));
+ assertTrue(files.contains("rife2-1.4.1-20230307.195509-4-sources.jar"));
+
+ assertTrue(FileUtils.getFileList(tmp2).isEmpty());
} finally {
- FileUtils.deleteDirectory(tmp);
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
+ }
+ }
+
+ @Test
+ void testTransferDependencySourcesModule()
+ throws Exception {
+ var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Module("com.uwyn.rife2", "rife2"));
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
+ try {
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2, CLASSIFIER_SOURCES);
+ assertTrue(StringUtils.join(result, "\n").matches("""
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/uwyn/rife2/rife2/.*/rife2-.*.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/uwyn/rife2/rife2/.*/rife2-.*-sources.jar"""));
+
+ assertTrue(FileUtils.getFileList(tmp1).isEmpty());
+
+ var files = FileUtils.getFileList(tmp2);
+ assertEquals(2, files.size());
+ assertTrue(files.get(0).matches("rife2-.+\\.jar"));
+ } finally {
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
+ }
+ }
+
+ @Test
+ void testTransferDependencySourcesJavadocModule()
+ throws Exception {
+ var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Module("com.uwyn.rife2", "rife2"));
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
+ try {
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2, CLASSIFIER_SOURCES, CLASSIFIER_JAVADOC);
+ assertTrue(StringUtils.join(result, "\n").matches("""
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/uwyn/rife2/rife2/.*/rife2-.*.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/uwyn/rife2/rife2/.*/rife2-.*-sources.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/uwyn/rife2/rife2/.*/rife2-.*-javadoc.jar"""));
+
+ assertTrue(FileUtils.getFileList(tmp1).isEmpty());
+
+ var files = FileUtils.getFileList(tmp2);
+ assertEquals(3, files.size());
+ assertTrue(files.get(0).matches("rife2-.+\\.jar"));
+ } finally {
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
+ }
+ }
+
+ @Test
+ void testTransferDependencySnapshotModule()
+ throws Exception {
+ var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Module("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 1, "SNAPSHOT")));
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
+ try {
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
+ assertEquals("""
+ https://s01.oss.sonatype.org/content/repositories/snapshots/:https://s01.oss.sonatype.org/content/repositories/snapshots/com/uwyn/rife2/rife2/1.4.1-SNAPSHOT/rife2-1.4.1-20230307.195509-4.jar""", StringUtils.join(result, "\n"));
+
+ assertTrue(FileUtils.getFileList(tmp1).isEmpty());
+
+ var files = FileUtils.getFileList(tmp2);
+ assertEquals(1, files.size());
+ assertTrue(files.contains("rife2-1.4.1-20230307.195509-4.jar"));
+ } finally {
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
+ }
+ }
+
+ @Test
+ void testTransferDependencySnapshotSourcesModule()
+ throws Exception {
+ var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Module("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 1, "SNAPSHOT")));
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
+ try {
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2, CLASSIFIER_SOURCES);
+ assertEquals("""
+ https://s01.oss.sonatype.org/content/repositories/snapshots/:https://s01.oss.sonatype.org/content/repositories/snapshots/com/uwyn/rife2/rife2/1.4.1-SNAPSHOT/rife2-1.4.1-20230307.195509-4.jar
+ https://s01.oss.sonatype.org/content/repositories/snapshots/:https://s01.oss.sonatype.org/content/repositories/snapshots/com/uwyn/rife2/rife2/1.4.1-SNAPSHOT/rife2-1.4.1-20230307.195509-4-sources.jar""", StringUtils.join(result, "\n"));
+
+ assertTrue(FileUtils.getFileList(tmp1).isEmpty());
+
+ var files = FileUtils.getFileList(tmp2);
+ assertEquals(2, files.size());
+ assertTrue(files.contains("rife2-1.4.1-20230307.195509-4.jar"));
+ assertTrue(files.contains("rife2-1.4.1-20230307.195509-4-sources.jar"));
+ } finally {
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
+ }
+ }
+
+ @Test
+ void testTransferDependencySnapshotSourcesJavadocModule()
+ throws Exception {
+ var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Module("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 1, "SNAPSHOT")));
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
+ try {
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2, CLASSIFIER_SOURCES, CLASSIFIER_JAVADOC);
+ assertEquals("""
+ https://s01.oss.sonatype.org/content/repositories/snapshots/:https://s01.oss.sonatype.org/content/repositories/snapshots/com/uwyn/rife2/rife2/1.4.1-SNAPSHOT/rife2-1.4.1-20230307.195509-4.jar
+ https://s01.oss.sonatype.org/content/repositories/snapshots/:https://s01.oss.sonatype.org/content/repositories/snapshots/com/uwyn/rife2/rife2/1.4.1-SNAPSHOT/rife2-1.4.1-20230307.195509-4-sources.jar
+ https://s01.oss.sonatype.org/content/repositories/snapshots/:https://s01.oss.sonatype.org/content/repositories/snapshots/com/uwyn/rife2/rife2/1.4.1-SNAPSHOT/rife2-1.4.1-20230307.195509-4-javadoc.jar""", StringUtils.join(result, "\n"));
+
+ assertTrue(FileUtils.getFileList(tmp1).isEmpty());
+
+ var files = FileUtils.getFileList(tmp2);
+ assertEquals(3, files.size());
+ assertTrue(files.contains("rife2-1.4.1-20230307.195509-4.jar"));
+ assertTrue(files.contains("rife2-1.4.1-20230307.195509-4-javadoc.jar"));
+ assertTrue(files.contains("rife2-1.4.1-20230307.195509-4-sources.jar"));
+ } finally {
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
}
}
@@ -844,9 +987,10 @@ public class TestDependencyResolver {
void testTransferDependencyJetty()
throws Exception {
var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("org.eclipse.jetty", "jetty-server", new VersionNumber(11, 0, 14)));
- var tmp = Files.createTempDirectory("transfers").toFile();
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
try {
- var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp);
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
assertEquals("""
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-server/11.0.14/jetty-server-11.0.14.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/toolchain/jetty-jakarta-servlet-api/5.0.2/jetty-jakarta-servlet-api-5.0.2.jar
@@ -855,7 +999,43 @@ public class TestDependencyResolver {
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/slf4j/slf4j-api/2.0.5/slf4j-api-2.0.5.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-util/11.0.14/jetty-util-11.0.14.jar""", StringUtils.join(result, "\n"));
- var files = FileUtils.getFileList(tmp);
+ var files = FileUtils.getFileList(tmp1);
+ assertEquals(6, files.size());
+ Collections.sort(files);
+ assertEquals("""
+ jetty-http-11.0.14.jar
+ jetty-io-11.0.14.jar
+ jetty-jakarta-servlet-api-5.0.2.jar
+ jetty-server-11.0.14.jar
+ jetty-util-11.0.14.jar
+ slf4j-api-2.0.5.jar""", StringUtils.join(files, "\n"));
+
+ assertTrue(FileUtils.getFileList(tmp2).isEmpty());
+ } finally {
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
+ }
+ }
+
+ @Test
+ void testTransferDependencyJettyModule()
+ throws Exception {
+ var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Module("org.eclipse.jetty", "jetty-server", new VersionNumber(11, 0, 14)));
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
+ try {
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
+ assertEquals("""
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-server/11.0.14/jetty-server-11.0.14.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/toolchain/jetty-jakarta-servlet-api/5.0.2/jetty-jakarta-servlet-api-5.0.2.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-http/11.0.14/jetty-http-11.0.14.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-io/11.0.14/jetty-io-11.0.14.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/slf4j/slf4j-api/2.0.5/slf4j-api-2.0.5.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-util/11.0.14/jetty-util-11.0.14.jar""", StringUtils.join(result, "\n"));
+
+ assertTrue(FileUtils.getFileList(tmp1).isEmpty())
+ ;
+ var files = FileUtils.getFileList(tmp2);
assertEquals(6, files.size());
Collections.sort(files);
assertEquals("""
@@ -866,7 +1046,8 @@ public class TestDependencyResolver {
jetty-util-11.0.14.jar
slf4j-api-2.0.5.jar""", StringUtils.join(files, "\n"));
} finally {
- FileUtils.deleteDirectory(tmp);
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
}
}
@@ -874,9 +1055,10 @@ public class TestDependencyResolver {
void testTransferDependencyGoogleApi()
throws Exception {
var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("com.google.apis", "google-api-services-youtube", new VersionGeneric("v3-rev20240514-2.0.0")));
- var tmp = Files.createTempDirectory("transfers").toFile();
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
try {
- var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp);
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
assertEquals("""
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/google/apis/google-api-services-youtube/v3-rev20240514-2.0.0/google-api-services-youtube-v3-rev20240514-2.0.0.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/google/api-client/google-api-client/2.5.0/google-api-client-2.5.0.jar
@@ -903,7 +1085,79 @@ public class TestDependencyResolver {
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/io/opencensus/opencensus-api/0.31.1/opencensus-api-0.31.1.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/io/opencensus/opencensus-contrib-http-util/0.31.1/opencensus-contrib-http-util-0.31.1.jar""", StringUtils.join(result, "\n"));
- var files = FileUtils.getFileList(tmp);
+ var files = FileUtils.getFileList(tmp1);
+ assertEquals(24, files.size());
+ Collections.sort(files);
+ assertEquals("""
+ auto-value-annotations-1.10.4.jar
+ checker-qual-3.42.0.jar
+ commons-codec-1.17.0.jar
+ commons-logging-1.2.jar
+ error_prone_annotations-2.18.0.jar
+ failureaccess-1.0.2.jar
+ google-api-client-2.5.0.jar
+ google-api-services-youtube-v3-rev20240514-2.0.0.jar
+ google-auth-library-credentials-1.23.0.jar
+ google-auth-library-oauth2-http-1.23.0.jar
+ google-http-client-1.44.1.jar
+ google-http-client-apache-v2-1.44.1.jar
+ google-http-client-gson-1.44.1.jar
+ google-oauth-client-1.35.0.jar
+ grpc-context-1.60.1.jar
+ gson-2.10.1.jar
+ guava-33.2.0-jre.jar
+ httpclient-4.5.14.jar
+ httpcore-4.4.16.jar
+ j2objc-annotations-3.0.0.jar
+ jsr305-3.0.2.jar
+ listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
+ opencensus-api-0.31.1.jar
+ opencensus-contrib-http-util-0.31.1.jar""", StringUtils.join(files, "\n"));
+
+ assertTrue(FileUtils.getFileList(tmp2).isEmpty());
+ } finally {
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
+ }
+ }
+
+ @Test
+ void testTransferDependencyGoogleApiModule()
+ throws Exception {
+ var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Module("com.google.apis", "google-api-services-youtube", new VersionGeneric("v3-rev20240514-2.0.0")));
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
+ try {
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
+ assertEquals("""
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/google/apis/google-api-services-youtube/v3-rev20240514-2.0.0/google-api-services-youtube-v3-rev20240514-2.0.0.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/google/api-client/google-api-client/2.5.0/google-api-client-2.5.0.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/commons-codec/commons-codec/1.17.0/commons-codec-1.17.0.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/google/oauth-client/google-oauth-client/1.35.0/google-oauth-client-1.35.0.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/google/auth/google-auth-library-credentials/1.23.0/google-auth-library-credentials-1.23.0.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/google/auth/google-auth-library-oauth2-http/1.23.0/google-auth-library-oauth2-http-1.23.0.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/google/http-client/google-http-client-gson/1.44.1/google-http-client-gson-1.44.1.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/google/guava/guava/33.2.0-jre/guava-33.2.0-jre.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/google/http-client/google-http-client-apache-v2/1.44.1/google-http-client-apache-v2-1.44.1.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/google/http-client/google-http-client/1.44.1/google-http-client-1.44.1.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/google/auto/value/auto-value-annotations/1.10.4/auto-value-annotations-1.10.4.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.18.0/error_prone_annotations-2.18.0.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/google/guava/failureaccess/1.0.2/failureaccess-1.0.2.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/checkerframework/checker-qual/3.42.0/checker-qual-3.42.0.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/google/j2objc/j2objc-annotations/3.0.0/j2objc-annotations-3.0.0.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/commons-logging/commons-logging/1.2/commons-logging-1.2.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/io/grpc/grpc-context/1.60.1/grpc-context-1.60.1.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/io/opencensus/opencensus-api/0.31.1/opencensus-api-0.31.1.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/io/opencensus/opencensus-contrib-http-util/0.31.1/opencensus-contrib-http-util-0.31.1.jar""", StringUtils.join(result, "\n"));
+
+ assertTrue(FileUtils.getFileList(tmp1).isEmpty());
+
+ var files = FileUtils.getFileList(tmp2);
assertEquals(24, files.size());
Collections.sort(files);
assertEquals("""
@@ -932,7 +1186,8 @@ public class TestDependencyResolver {
opencensus-api-0.31.1.jar
opencensus-contrib-http-util-0.31.1.jar""", StringUtils.join(files, "\n"));
} finally {
- FileUtils.deleteDirectory(tmp);
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
}
}
@@ -944,9 +1199,10 @@ public class TestDependencyResolver {
.put(PROPERTY_OVERRIDE_PREFIX + "1", "org.eclipse.jetty:jetty-io:11.0.13")
.put(PROPERTY_OVERRIDE_PREFIX + "2", "org.eclipse.jetty:jetty-server:11.0.15"));
var resolver = new DependencyResolver(resolution, ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("org.eclipse.jetty", "jetty-server", new VersionNumber(11, 0, 14)));
- var tmp = Files.createTempDirectory("transfers").toFile();
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
try {
- var result = resolver.getAllDependencies(compile).transferIntoDirectory(resolution, ArtifactRetriever.instance(), resolver.repositories(), tmp);
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(resolution, ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
assertEquals("""
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-server/11.0.15/jetty-server-11.0.15.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/toolchain/jetty-jakarta-servlet-api/5.0.2/jetty-jakarta-servlet-api-5.0.2.jar
@@ -955,7 +1211,47 @@ public class TestDependencyResolver {
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/slf4j/slf4j-api/2.0.11/slf4j-api-2.0.11.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-util/11.0.15/jetty-util-11.0.15.jar""", StringUtils.join(result, "\n"));
- var files = FileUtils.getFileList(tmp);
+ var files = FileUtils.getFileList(tmp1);
+ assertEquals(6, files.size());
+ Collections.sort(files);
+ assertEquals("""
+ jetty-http-11.0.15.jar
+ jetty-io-11.0.13.jar
+ jetty-jakarta-servlet-api-5.0.2.jar
+ jetty-server-11.0.15.jar
+ jetty-util-11.0.15.jar
+ slf4j-api-2.0.11.jar""", StringUtils.join(files, "\n"));
+
+ assertTrue(FileUtils.getFileList(tmp2).isEmpty());
+ } finally {
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
+ }
+ }
+
+ @Test
+ void testTransferDependencyJettyOverriddenVersionsModule()
+ throws Exception {
+ var resolution = new VersionResolution(new HierarchicalProperties()
+ .put(PROPERTY_OVERRIDE_PREFIX, "org.slf4j:slf4j-api:2.0.11")
+ .put(PROPERTY_OVERRIDE_PREFIX + "1", "org.eclipse.jetty:jetty-io:11.0.13")
+ .put(PROPERTY_OVERRIDE_PREFIX + "2", "org.eclipse.jetty:jetty-server:11.0.15"));
+ var resolver = new DependencyResolver(resolution, ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Module("org.eclipse.jetty", "jetty-server", new VersionNumber(11, 0, 14)));
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
+ try {
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(resolution, ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
+ assertEquals("""
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-server/11.0.15/jetty-server-11.0.15.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/toolchain/jetty-jakarta-servlet-api/5.0.2/jetty-jakarta-servlet-api-5.0.2.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-http/11.0.15/jetty-http-11.0.15.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-io/11.0.13/jetty-io-11.0.13.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/slf4j/slf4j-api/2.0.11/slf4j-api-2.0.11.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-util/11.0.15/jetty-util-11.0.15.jar""", StringUtils.join(result, "\n"));
+
+ assertTrue(FileUtils.getFileList(tmp1).isEmpty());
+
+ var files = FileUtils.getFileList(tmp2);
assertEquals(6, files.size());
Collections.sort(files);
assertEquals("""
@@ -966,7 +1262,8 @@ public class TestDependencyResolver {
jetty-util-11.0.15.jar
slf4j-api-2.0.11.jar""", StringUtils.join(files, "\n"));
} finally {
- FileUtils.deleteDirectory(tmp);
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
}
}
@@ -974,9 +1271,10 @@ public class TestDependencyResolver {
void testTransferDependencyJettySources()
throws Exception {
var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("org.eclipse.jetty", "jetty-server", new VersionNumber(11, 0, 14)));
- var tmp = Files.createTempDirectory("transfers").toFile();
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
try {
- var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp, CLASSIFIER_SOURCES);
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2, CLASSIFIER_SOURCES);
assertEquals("""
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-server/11.0.14/jetty-server-11.0.14.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-server/11.0.14/jetty-server-11.0.14-sources.jar
@@ -991,7 +1289,55 @@ public class TestDependencyResolver {
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-util/11.0.14/jetty-util-11.0.14.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-util/11.0.14/jetty-util-11.0.14-sources.jar""", StringUtils.join(result, "\n"));
- var files = FileUtils.getFileList(tmp);
+ var files = FileUtils.getFileList(tmp1);
+ assertEquals(12, files.size());
+ Collections.sort(files);
+ assertEquals("""
+ jetty-http-11.0.14-sources.jar
+ jetty-http-11.0.14.jar
+ jetty-io-11.0.14-sources.jar
+ jetty-io-11.0.14.jar
+ jetty-jakarta-servlet-api-5.0.2-sources.jar
+ jetty-jakarta-servlet-api-5.0.2.jar
+ jetty-server-11.0.14-sources.jar
+ jetty-server-11.0.14.jar
+ jetty-util-11.0.14-sources.jar
+ jetty-util-11.0.14.jar
+ slf4j-api-2.0.5-sources.jar
+ slf4j-api-2.0.5.jar""", StringUtils.join(files, "\n"));
+
+ assertTrue(FileUtils.getFileList(tmp2).isEmpty());
+ } finally {
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
+ }
+ }
+
+ @Test
+ void testTransferDependencyJettySourcesModule()
+ throws Exception {
+ var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Module("org.eclipse.jetty", "jetty-server", new VersionNumber(11, 0, 14)));
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
+ try {
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2, CLASSIFIER_SOURCES);
+ assertEquals("""
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-server/11.0.14/jetty-server-11.0.14.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-server/11.0.14/jetty-server-11.0.14-sources.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/toolchain/jetty-jakarta-servlet-api/5.0.2/jetty-jakarta-servlet-api-5.0.2.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/toolchain/jetty-jakarta-servlet-api/5.0.2/jetty-jakarta-servlet-api-5.0.2-sources.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-http/11.0.14/jetty-http-11.0.14.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-http/11.0.14/jetty-http-11.0.14-sources.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-io/11.0.14/jetty-io-11.0.14.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-io/11.0.14/jetty-io-11.0.14-sources.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/slf4j/slf4j-api/2.0.5/slf4j-api-2.0.5.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/slf4j/slf4j-api/2.0.5/slf4j-api-2.0.5-sources.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-util/11.0.14/jetty-util-11.0.14.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-util/11.0.14/jetty-util-11.0.14-sources.jar""", StringUtils.join(result, "\n"));
+
+ assertTrue(FileUtils.getFileList(tmp1).isEmpty());
+
+ var files = FileUtils.getFileList(tmp2);
assertEquals(12, files.size());
Collections.sort(files);
assertEquals("""
@@ -1008,7 +1354,8 @@ public class TestDependencyResolver {
slf4j-api-2.0.5-sources.jar
slf4j-api-2.0.5.jar""", StringUtils.join(files, "\n"));
} finally {
- FileUtils.deleteDirectory(tmp);
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
}
}
@@ -1016,9 +1363,10 @@ public class TestDependencyResolver {
void testTransferDependencyJettySourcesJavadoc()
throws Exception {
var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("org.eclipse.jetty", "jetty-server", new VersionNumber(11, 0, 14)));
- var tmp = Files.createTempDirectory("transfers").toFile();
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
try {
- var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp, CLASSIFIER_SOURCES, CLASSIFIER_JAVADOC);
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2, CLASSIFIER_SOURCES, CLASSIFIER_JAVADOC);
assertEquals("""
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-server/11.0.14/jetty-server-11.0.14.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-server/11.0.14/jetty-server-11.0.14-sources.jar
@@ -1039,7 +1387,67 @@ public class TestDependencyResolver {
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-util/11.0.14/jetty-util-11.0.14-sources.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-util/11.0.14/jetty-util-11.0.14-javadoc.jar""", StringUtils.join(result, "\n"));
- var files = FileUtils.getFileList(tmp);
+ var files = FileUtils.getFileList(tmp1);
+ assertEquals(18, files.size());
+ Collections.sort(files);
+ assertEquals("""
+ jetty-http-11.0.14-javadoc.jar
+ jetty-http-11.0.14-sources.jar
+ jetty-http-11.0.14.jar
+ jetty-io-11.0.14-javadoc.jar
+ jetty-io-11.0.14-sources.jar
+ jetty-io-11.0.14.jar
+ jetty-jakarta-servlet-api-5.0.2-javadoc.jar
+ jetty-jakarta-servlet-api-5.0.2-sources.jar
+ jetty-jakarta-servlet-api-5.0.2.jar
+ jetty-server-11.0.14-javadoc.jar
+ jetty-server-11.0.14-sources.jar
+ jetty-server-11.0.14.jar
+ jetty-util-11.0.14-javadoc.jar
+ jetty-util-11.0.14-sources.jar
+ jetty-util-11.0.14.jar
+ slf4j-api-2.0.5-javadoc.jar
+ slf4j-api-2.0.5-sources.jar
+ slf4j-api-2.0.5.jar""", StringUtils.join(files, "\n"));
+
+ assertTrue(FileUtils.getFileList(tmp2).isEmpty());
+ } finally {
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
+ }
+ }
+
+ @Test
+ void testTransferDependencyJettySourcesJavadocModule()
+ throws Exception {
+ var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Module("org.eclipse.jetty", "jetty-server", new VersionNumber(11, 0, 14)));
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
+ try {
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2, CLASSIFIER_SOURCES, CLASSIFIER_JAVADOC);
+ assertEquals("""
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-server/11.0.14/jetty-server-11.0.14.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-server/11.0.14/jetty-server-11.0.14-sources.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-server/11.0.14/jetty-server-11.0.14-javadoc.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/toolchain/jetty-jakarta-servlet-api/5.0.2/jetty-jakarta-servlet-api-5.0.2.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/toolchain/jetty-jakarta-servlet-api/5.0.2/jetty-jakarta-servlet-api-5.0.2-sources.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/toolchain/jetty-jakarta-servlet-api/5.0.2/jetty-jakarta-servlet-api-5.0.2-javadoc.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-http/11.0.14/jetty-http-11.0.14.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-http/11.0.14/jetty-http-11.0.14-sources.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-http/11.0.14/jetty-http-11.0.14-javadoc.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-io/11.0.14/jetty-io-11.0.14.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-io/11.0.14/jetty-io-11.0.14-sources.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-io/11.0.14/jetty-io-11.0.14-javadoc.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/slf4j/slf4j-api/2.0.5/slf4j-api-2.0.5.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/slf4j/slf4j-api/2.0.5/slf4j-api-2.0.5-sources.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/slf4j/slf4j-api/2.0.5/slf4j-api-2.0.5-javadoc.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-util/11.0.14/jetty-util-11.0.14.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-util/11.0.14/jetty-util-11.0.14-sources.jar
+ https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-util/11.0.14/jetty-util-11.0.14-javadoc.jar""", StringUtils.join(result, "\n"));
+
+ assertTrue(FileUtils.getFileList(tmp1).isEmpty());
+
+ var files = FileUtils.getFileList(tmp2);
assertEquals(18, files.size());
Collections.sort(files);
assertEquals("""
@@ -1062,7 +1470,8 @@ public class TestDependencyResolver {
slf4j-api-2.0.5-sources.jar
slf4j-api-2.0.5.jar""", StringUtils.join(files, "\n"));
} finally {
- FileUtils.deleteDirectory(tmp);
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
}
}
@@ -1070,9 +1479,10 @@ public class TestDependencyResolver {
void testTransferDependenciesJunit()
throws Exception {
var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("org.junit.jupiter", "junit-jupiter", new VersionNumber(5, 9, 2)));
- var tmp = Files.createTempDirectory("transfers").toFile();
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
try {
- var result = resolver.getAllDependencies(compile, runtime).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp);
+ var result = resolver.getAllDependencies(compile, runtime).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
assertEquals("""
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/junit/jupiter/junit-jupiter/5.9.2/junit-jupiter-5.9.2.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/junit/jupiter/junit-jupiter-api/5.9.2/junit-jupiter-api-5.9.2.jar
@@ -1083,7 +1493,7 @@ public class TestDependencyResolver {
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/junit/platform/junit-platform-engine/1.9.2/junit-platform-engine-1.9.2.jar""", StringUtils.join(result, "\n"));
- var files = FileUtils.getFileList(tmp);
+ var files = FileUtils.getFileList(tmp1);
assertEquals(8, files.size());
Collections.sort(files);
assertEquals("""
@@ -1095,8 +1505,11 @@ public class TestDependencyResolver {
junit-platform-commons-1.9.2.jar
junit-platform-engine-1.9.2.jar
opentest4j-1.2.0.jar""", StringUtils.join(files, "\n"));
+
+ assertTrue(FileUtils.getFileList(tmp2).isEmpty());
} finally {
- FileUtils.deleteDirectory(tmp);
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
}
}
@@ -1104,9 +1517,10 @@ public class TestDependencyResolver {
void testTransferDependencySpringBoot()
throws Exception {
var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("org.springframework.boot", "spring-boot-starter", new VersionNumber(3, 0, 4)));
- var tmp = Files.createTempDirectory("transfers").toFile();
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
try {
- var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp);
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
assertEquals("""
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-starter/3.0.4/spring-boot-starter-3.0.4.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/springframework/boot/spring-boot/3.0.4/spring-boot-3.0.4.jar
@@ -1127,7 +1541,7 @@ public class TestDependencyResolver {
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/slf4j/slf4j-api/2.0.4/slf4j-api-2.0.4.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-api/2.19.0/log4j-api-2.19.0.jar""", StringUtils.join(result, "\n"));
- var files = FileUtils.getFileList(tmp);
+ var files = FileUtils.getFileList(tmp1);
assertEquals(18, files.size());
Collections.sort(files);
assertEquals("""
@@ -1149,8 +1563,11 @@ public class TestDependencyResolver {
spring-core-6.0.6.jar
spring-expression-6.0.6.jar
spring-jcl-6.0.6.jar""", StringUtils.join(files, "\n"));
+
+ assertTrue(FileUtils.getFileList(tmp2).isEmpty());
} finally {
- FileUtils.deleteDirectory(tmp);
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
}
}
@@ -1158,9 +1575,10 @@ public class TestDependencyResolver {
void testTransferDependencyMaven()
throws Exception {
var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("org.apache.maven", "maven-core", new VersionNumber(3, 9, 0)));
- var tmp = Files.createTempDirectory("transfers").toFile();
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
try {
- var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp);
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
assertEquals("""
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/apache/maven/maven-core/3.9.0/maven-core-3.9.0.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/apache/maven/maven-model/3.9.0/maven-model-3.9.0.jar
@@ -1195,7 +1613,7 @@ public class TestDependencyResolver {
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-cipher/2.0/plexus-cipher-2.0.jar""", StringUtils.join(result, "\n"));
- var files = FileUtils.getFileList(tmp);
+ var files = FileUtils.getFileList(tmp1);
assertEquals(32, files.size());
Collections.sort(files);
assertEquals("""
@@ -1231,8 +1649,11 @@ public class TestDependencyResolver {
plexus-sec-dispatcher-2.0.jar
plexus-utils-3.4.2.jar
slf4j-api-1.7.36.jar""", StringUtils.join(files, "\n"));
+
+ assertTrue(FileUtils.getFileList(tmp2).isEmpty());
} finally {
- FileUtils.deleteDirectory(tmp);
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
}
}
@@ -1240,9 +1661,10 @@ public class TestDependencyResolver {
void testTransferDependencyPlay()
throws Exception {
var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("com.typesafe.play", "play_2.13", new VersionNumber(2, 8, 19)));
- var tmp = Files.createTempDirectory("transfers").toFile();
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
try {
- var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp);
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
assertEquals("""
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/typesafe/play/play_2.13/2.8.19/play_2.13-2.8.19.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.10/scala-library-2.13.10.jar
@@ -1293,7 +1715,7 @@ public class TestDependencyResolver {
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/fasterxml/jackson/module/jackson-module-paranamer/2.11.4/jackson-module-paranamer-2.11.4.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/thoughtworks/paranamer/paranamer/2.8/paranamer-2.8.jar""", StringUtils.join(result, "\n"));
- var files = FileUtils.getFileList(tmp);
+ var files = FileUtils.getFileList(tmp1);
assertEquals(48, files.size());
Collections.sort(files);
assertEquals("""
@@ -1345,8 +1767,11 @@ public class TestDependencyResolver {
slf4j-api-1.7.36.jar
ssl-config-core_2.13-0.4.3.jar
twirl-api_2.13-1.5.1.jar""", StringUtils.join(files, "\n"));
+
+ assertTrue(FileUtils.getFileList(tmp2).isEmpty());
} finally {
- FileUtils.deleteDirectory(tmp);
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
}
}
@@ -1356,9 +1781,10 @@ public class TestDependencyResolver {
var resolution = new VersionResolution(new HierarchicalProperties()
.put(PROPERTY_OVERRIDE_PREFIX, "org.scala-lang:scala-library:2.13.12,org.slf4j:slf4j-api:2.0.11,com.google.guava:guava:31.1-jre"));
var resolver = new DependencyResolver(resolution, ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("com.typesafe.play", "play_2.13", new VersionNumber(2, 8, 19)));
- var tmp = Files.createTempDirectory("transfers").toFile();
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
try {
- var result = resolver.getAllDependencies(compile).transferIntoDirectory(resolution, ArtifactRetriever.instance(), resolver.repositories(), tmp);
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(resolution, ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
assertEquals("""
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/typesafe/play/play_2.13/2.8.19/play_2.13-2.8.19.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.12/scala-library-2.13.12.jar
@@ -1409,7 +1835,7 @@ public class TestDependencyResolver {
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/fasterxml/jackson/module/jackson-module-paranamer/2.11.4/jackson-module-paranamer-2.11.4.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/thoughtworks/paranamer/paranamer/2.8/paranamer-2.8.jar""", StringUtils.join(result, "\n"));
- var files = FileUtils.getFileList(tmp);
+ var files = FileUtils.getFileList(tmp1);
assertEquals(48, files.size());
Collections.sort(files);
assertEquals("""
@@ -1461,8 +1887,11 @@ public class TestDependencyResolver {
slf4j-api-2.0.11.jar
ssl-config-core_2.13-0.4.3.jar
twirl-api_2.13-1.5.1.jar""", StringUtils.join(files, "\n"));
+
+ assertTrue(FileUtils.getFileList(tmp2).isEmpty());
} finally {
- FileUtils.deleteDirectory(tmp);
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
}
}
@@ -1470,9 +1899,10 @@ public class TestDependencyResolver {
void testTransferDependencyVaadin()
throws Exception {
var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("com.vaadin", "vaadin", new VersionNumber(23, 3, 7)));
- var tmp = Files.createTempDirectory("transfers").toFile();
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
try {
- var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp);
+ var result = resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
assertEquals("""
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/vaadin/vaadin/23.3.7/vaadin-23.3.7.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/vaadin/vaadin-core/23.3.7/vaadin-core-23.3.7.jar
@@ -1563,7 +1993,7 @@ public class TestDependencyResolver {
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/net/java/dev/jna/jna-platform/5.11.0/jna-platform-5.11.0.jar
https://repo1.maven.org/maven2/:https://repo1.maven.org/maven2/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar""", StringUtils.join(result, "\n"));
- var files = FileUtils.getFileList(tmp);
+ var files = FileUtils.getFileList(tmp1);
assertEquals(88, files.size());
Collections.sort(files);
assertEquals("""
@@ -1655,8 +2085,11 @@ public class TestDependencyResolver {
vaadin-virtual-list-flow-23.3.7.jar
vaadin__vaadin-mobile-drag-drop-1.0.1.jar
validation-api-2.0.1.Final.jar""", StringUtils.join(files, "\n"));
+
+ assertTrue(FileUtils.getFileList(tmp2).isEmpty());
} finally {
- FileUtils.deleteDirectory(tmp);
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
}
}
@@ -1664,49 +2097,115 @@ public class TestDependencyResolver {
void testTransferCheckExisting()
throws Exception {
var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Dependency("org.eclipse.jetty", "jetty-server", new VersionNumber(11, 0, 14)));
- var tmp = Files.createTempDirectory("transfers").toFile();
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
try {
- resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp);
+ resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
var modification_map = new HashMap();
- Files.walk(Path.of(tmp.getAbsolutePath()))
+ Files.walk(Path.of(tmp1.getAbsolutePath()))
.map(path -> path.toAbsolutePath().toString())
- .filter(s -> !s.equals(tmp.getAbsolutePath()))
+ .filter(s -> !s.equals(tmp1.getAbsolutePath()))
.forEach(it -> modification_map.put(it, new File(it).lastModified()));
+ assertTrue(FileUtils.getFileList(tmp2).isEmpty());
+
// re-transfer and check the modification time didn't change
- resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp);
- Files.walk(Path.of(tmp.getAbsolutePath()))
+ resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
+ Files.walk(Path.of(tmp1.getAbsolutePath()))
.map(path -> path.toAbsolutePath().toString())
- .filter(s -> !s.equals(tmp.getAbsolutePath()))
+ .filter(s -> !s.equals(tmp1.getAbsolutePath()))
.forEach(it -> assertEquals(modification_map.get(it), new File(it).lastModified()));
- // delete one file and check that this is transfered again
+ assertTrue(FileUtils.getFileList(tmp2).isEmpty());
+
+ // delete one file and check that this is transferred again
var first = modification_map.keySet().stream().findFirst().get();
var first_file = new File(first);
first_file.delete();
- resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp);
+ resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
assertNotEquals(first_file.lastModified(), modification_map.get(first));
modification_map.put(first, first_file.lastModified());
- Files.walk(Path.of(tmp.getAbsolutePath()))
+ Files.walk(Path.of(tmp1.getAbsolutePath()))
.map(path -> path.toAbsolutePath().toString())
- .filter(s -> !s.equals(tmp.getAbsolutePath()))
+ .filter(s -> !s.equals(tmp1.getAbsolutePath()))
.forEach(it -> assertEquals(modification_map.get(it), new File(it).lastModified()));
- // change one file and check that this is transfered again
+ assertTrue(FileUtils.getFileList(tmp2).isEmpty());
+
+ // change one file and check that this is transferred again
FileUtils.writeString("stuff", first_file);
var before_transfer_modified = first_file.lastModified();
- resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp);
+ resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
assertNotEquals(first_file.lastModified(), before_transfer_modified);
modification_map.put(first, first_file.lastModified());
- Files.walk(Path.of(tmp.getAbsolutePath()))
+ Files.walk(Path.of(tmp1.getAbsolutePath()))
.map(path -> path.toAbsolutePath().toString())
- .filter(s -> !s.equals(tmp.getAbsolutePath()))
+ .filter(s -> !s.equals(tmp1.getAbsolutePath()))
.forEach(it -> assertEquals(modification_map.get(it), new File(it).lastModified()));
+ assertTrue(FileUtils.getFileList(tmp2).isEmpty());
} finally {
- FileUtils.deleteDirectory(tmp);
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
}
}
+ @Test
+ void testTransferCheckExistingModule()
+ throws Exception {
+ var resolver = new DependencyResolver(VersionResolution.dummy(), ArtifactRetriever.instance(), List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS), new Module("org.eclipse.jetty", "jetty-server", new VersionNumber(11, 0, 14)));
+ var tmp1 = Files.createTempDirectory("transfers").toFile();
+ var tmp2 = Files.createTempDirectory("modules").toFile();
+ try {
+ resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
+
+ assertTrue(FileUtils.getFileList(tmp1).isEmpty());
+
+ var modification_map = new HashMap();
+ Files.walk(Path.of(tmp2.getAbsolutePath()))
+ .map(path -> path.toAbsolutePath().toString())
+ .filter(s -> !s.equals(tmp2.getAbsolutePath()))
+ .forEach(it -> modification_map.put(it, new File(it).lastModified()));
+
+ // re-transfer and check the modification time didn't change
+ assertTrue(FileUtils.getFileList(tmp1).isEmpty());
+
+ resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
+ Files.walk(Path.of(tmp2.getAbsolutePath()))
+ .map(path -> path.toAbsolutePath().toString())
+ .filter(s -> !s.equals(tmp2.getAbsolutePath()))
+ .forEach(it -> assertEquals(modification_map.get(it), new File(it).lastModified()));
+
+ // delete one file and check that this is transferred again
+ assertTrue(FileUtils.getFileList(tmp1).isEmpty());
+
+ var first = modification_map.keySet().stream().findFirst().get();
+ var first_file = new File(first);
+ first_file.delete();
+ resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
+ assertNotEquals(first_file.lastModified(), modification_map.get(first));
+ modification_map.put(first, first_file.lastModified());
+ Files.walk(Path.of(tmp2.getAbsolutePath()))
+ .map(path -> path.toAbsolutePath().toString())
+ .filter(s -> !s.equals(tmp2.getAbsolutePath()))
+ .forEach(it -> assertEquals(modification_map.get(it), new File(it).lastModified()));
+
+ // change one file and check that this is transferred again
+ assertTrue(FileUtils.getFileList(tmp1).isEmpty());
+
+ FileUtils.writeString("stuff", first_file);
+ var before_transfer_modified = first_file.lastModified();
+ resolver.getAllDependencies(compile).transferIntoDirectory(VersionResolution.dummy(), ArtifactRetriever.instance(), resolver.repositories(), tmp1, tmp2);
+ assertNotEquals(first_file.lastModified(), before_transfer_modified);
+ modification_map.put(first, first_file.lastModified());
+ Files.walk(Path.of(tmp2.getAbsolutePath()))
+ .map(path -> path.toAbsolutePath().toString())
+ .filter(s -> !s.equals(tmp2.getAbsolutePath()))
+ .forEach(it -> assertEquals(modification_map.get(it), new File(it).lastModified()));
+ } finally {
+ FileUtils.deleteDirectory(tmp1);
+ FileUtils.deleteDirectory(tmp2);
+ }
+ }
}
diff --git a/src/test/java/rife/bld/dependencies/TestModule.java b/src/test/java/rife/bld/dependencies/TestModule.java
new file mode 100644
index 0000000..e788e87
--- /dev/null
+++ b/src/test/java/rife/bld/dependencies/TestModule.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright 2001-2023 Geert Bevin (gbevin[remove] at uwyn dot com)
+ * Licensed under the Apache License, Version 2.0 (the "License")
+ */
+package rife.bld.dependencies;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class TestModule {
+ @Test
+ void testModule() {
+ var module1 = new Module("com.uwyn.rife2", "rife2");
+ assertNotNull(module1);
+ assertEquals("com.uwyn.rife2", module1.groupId());
+ assertEquals("rife2", module1.artifactId());
+ assertEquals(VersionNumber.UNKNOWN, module1.version());
+ assertEquals("", module1.classifier());
+ assertEquals("modular-jar", module1.type());
+ assertTrue(module1.isModularJar());
+ assertFalse(module1.isClasspathJar());
+
+ var module2 = new Module("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 0));
+ assertNotNull(module2);
+ assertEquals("com.uwyn.rife2", module2.groupId());
+ assertEquals("rife2", module2.artifactId());
+ assertEquals(new VersionNumber(1, 4, 0), module2.version());
+ assertEquals("", module2.classifier());
+ assertEquals("modular-jar", module2.type());
+ assertTrue(module2.isModularJar());
+ assertFalse(module2.isClasspathJar());
+
+ var module3 = new Module("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 0), "agent");
+ assertNotNull(module3);
+ assertEquals("com.uwyn.rife2", module3.groupId());
+ assertEquals("rife2", module3.artifactId());
+ assertEquals(new VersionNumber(1, 4, 0), module3.version());
+ assertEquals("agent", module3.classifier());
+ assertEquals("modular-jar", module3.type());
+ assertTrue(module3.isModularJar());
+ assertFalse(module3.isClasspathJar());
+ }
+
+ @Test
+ void testParse() {
+ assertEquals("com.uwyn.rife2:rife2@modular-jar", Module.parse("com.uwyn.rife2:rife2").toString());
+ assertEquals("com.uwyn.rife2:rife2:1.4.0@modular-jar", Module.parse("com.uwyn.rife2:rife2:1.4.0").toString());
+ assertEquals("com.uwyn.rife2:rife2:1.4.0:agent@modular-jar", Module.parse("com.uwyn.rife2:rife2:1.4.0:agent").toString());
+ assertEquals("com.uwyn.rife2:rife2@modular-jar", Module.parse("com.uwyn.rife2:rife2@modular-jar").toString());
+ assertEquals("com.uwyn.rife2:rife2:1.4.0@modular-jar", Module.parse("com.uwyn.rife2:rife2:1.4.0@modular-jar").toString());
+ assertEquals("com.uwyn.rife2:rife2:1.4.0:agent@modular-jar", Module.parse("com.uwyn.rife2:rife2:1.4.0:agent@modular-jar").toString());
+
+ assertEquals(new Module("com.uwyn.rife2", "rife2").toString(), Module.parse("com.uwyn.rife2:rife2").toString());
+ assertEquals(new Module("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 0)).toString(), Module.parse("com.uwyn.rife2:rife2:1.4.0").toString());
+ assertEquals(new Module("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 0), "agent").toString(), Module.parse("com.uwyn.rife2:rife2:1.4.0:agent").toString());
+ assertEquals(new Module("com.uwyn.rife2", "rife2").toString(), Module.parse("com.uwyn.rife2:rife2@modular-jar").toString());
+ assertEquals(new Module("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 0)).toString(), Module.parse("com.uwyn.rife2:rife2:1.4.0@modular-jar").toString());
+ assertEquals(new Module("com.uwyn.rife2", "rife2", new VersionNumber(1, 4, 0), "agent").toString(), Module.parse("com.uwyn.rife2:rife2:1.4.0:agent@modular-jar").toString());
+ }
+
+ @Test
+ void testEquals() {
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2"), new Module("com.uwyn.rife2", "rife2"));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2"), new Module("com.uwyn.rife2", "rife1"));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2"), new Module("com.uwyn.rife1", "rife2"));
+
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)), new Module("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)));
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)), new Module("com.uwyn.rife2", "rife2", new VersionNumber(1,4,1)));
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)), new Module("com.uwyn.rife2", "rife2", null));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)), new Module("com.uwyn.rife2", "rife1", new VersionNumber(1,4,0)));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)), new Module("com.uwyn.rife1", "rife2", new VersionNumber(1,4,0)));
+
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Module("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)));
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Module("com.uwyn.rife2", "rife2", new VersionNumber(1,4,1)));
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Module("com.uwyn.rife2", "rife2", null));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Module("com.uwyn.rife2", "rife1", new VersionNumber(1,4,0)));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Module("com.uwyn.rife1", "rife2", new VersionNumber(1,4,0)));
+
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Module("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), "agent"));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Module("com.uwyn.rife2", "rife2", new VersionNumber(1,4,1), "agent"));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Module("com.uwyn.rife2", "rife2", null, "agent"));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Module("com.uwyn.rife2", "rife1", new VersionNumber(1,4,0), "agent"));
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar"), new Module("com.uwyn.rife1", "rife2", new VersionNumber(1,4,0), "agent"));
+ }
+
+ @Test
+ void testHashcode() {
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2").hashCode(), new Module("com.uwyn.rife2", "rife2").hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2").hashCode(), new Module("com.uwyn.rife2", "rife1").hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2").hashCode(), new Module("com.uwyn.rife1", "rife2").hashCode());
+
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)).hashCode(), new Module("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)).hashCode());
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)).hashCode(), new Module("com.uwyn.rife2", "rife2", new VersionNumber(1,4,1)).hashCode());
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)).hashCode(), new Module("com.uwyn.rife2", "rife2", null).hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)).hashCode(), new Module("com.uwyn.rife2", "rife1", new VersionNumber(1,4,0)).hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)).hashCode(), new Module("com.uwyn.rife1", "rife2", new VersionNumber(1,4,0)).hashCode());
+
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Module("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0)).hashCode());
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Module("com.uwyn.rife2", "rife2", new VersionNumber(1,4,1)).hashCode());
+ assertEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Module("com.uwyn.rife2", "rife2", null).hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Module("com.uwyn.rife2", "rife1", new VersionNumber(1,4,0)).hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Module("com.uwyn.rife1", "rife2", new VersionNumber(1,4,0)).hashCode());
+
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Module("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), "agent").hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Module("com.uwyn.rife2", "rife2", new VersionNumber(1,4,1), "agent").hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Module("com.uwyn.rife2", "rife2", null, "agent").hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Module("com.uwyn.rife2", "rife1", new VersionNumber(1,4,0), "agent").hashCode());
+ assertNotEquals(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,4,0), null, "jar").hashCode(), new Module("com.uwyn.rife1", "rife2", new VersionNumber(1,4,0), "agent").hashCode());
+ }
+}
diff --git a/src/test/java/rife/bld/operations/TestCleanOperation.java b/src/test/java/rife/bld/operations/TestCleanOperation.java
index ed8a76c..77881ce 100644
--- a/src/test/java/rife/bld/operations/TestCleanOperation.java
+++ b/src/test/java/rife/bld/operations/TestCleanOperation.java
@@ -116,10 +116,15 @@ public class TestCleanOperation {
/lib
/lib/bld
/lib/compile
+ /lib/compile/modules
/lib/provided
+ /lib/provided/modules
/lib/runtime
+ /lib/runtime/modules
/lib/standalone
+ /lib/standalone/modules
/lib/test
+ /lib/test/modules
/src
/src/bld
/src/bld/java
@@ -140,10 +145,15 @@ public class TestCleanOperation {
/lib
/lib/bld
/lib/compile
+ /lib/compile/modules
/lib/provided
+ /lib/provided/modules
/lib/runtime
+ /lib/runtime/modules
/lib/standalone
+ /lib/standalone/modules
/lib/test
+ /lib/test/modules
/src
/src/bld
/src/bld/java
diff --git a/src/test/java/rife/bld/operations/TestCreateAppOperation.java b/src/test/java/rife/bld/operations/TestCreateAppOperation.java
index d4d5c32..0eed360 100644
--- a/src/test/java/rife/bld/operations/TestCreateAppOperation.java
+++ b/src/test/java/rife/bld/operations/TestCreateAppOperation.java
@@ -95,8 +95,11 @@ public class TestCreateAppOperation {
/myapp/lib/bld/bld-wrapper\\.jar
/myapp/lib/bld/bld-wrapper\\.properties
/myapp/lib/compile
+ /myapp/lib/compile/modules
/myapp/lib/provided
+ /myapp/lib/provided/modules
/myapp/lib/runtime
+ /myapp/lib/runtime/modules
/myapp/lib/test
/myapp/lib/test/apiguardian-api-1\\.1\\.2-sources\\.jar
/myapp/lib/test/apiguardian-api-1\\.1\\.2\\.jar
@@ -114,6 +117,7 @@ public class TestCreateAppOperation {
/myapp/lib/test/junit-platform-console-standalone-1\\.10\\.3\\.jar
/myapp/lib/test/junit-platform-engine-1\\.10\\.3-sources\\.jar
/myapp/lib/test/junit-platform-engine-1\\.10\\.3\\.jar
+ /myapp/lib/test/modules
/myapp/lib/test/opentest4j-1\\.3\\.0-sources\\.jar
/myapp/lib/test/opentest4j-1\\.3\\.0\\.jar
/myapp/src
@@ -175,8 +179,11 @@ public class TestCreateAppOperation {
/myapp/lib/bld/bld-wrapper\\.jar
/myapp/lib/bld/bld-wrapper\\.properties
/myapp/lib/compile
+ /myapp/lib/compile/modules
/myapp/lib/provided
+ /myapp/lib/provided/modules
/myapp/lib/runtime
+ /myapp/lib/runtime/modules
/myapp/lib/test
/myapp/lib/test/apiguardian-api-1\\.1\\.2-sources\\.jar
/myapp/lib/test/apiguardian-api-1\\.1\\.2\\.jar
@@ -194,6 +201,7 @@ public class TestCreateAppOperation {
/myapp/lib/test/junit-platform-console-standalone-1\\.10\\.3\\.jar
/myapp/lib/test/junit-platform-engine-1\\.10\\.3-sources\\.jar
/myapp/lib/test/junit-platform-engine-1\\.10\\.3\\.jar
+ /myapp/lib/test/modules
/myapp/lib/test/opentest4j-1\\.3\\.0-sources\\.jar
/myapp/lib/test/opentest4j-1\\.3\\.0\\.jar
/myapp/src
@@ -268,9 +276,13 @@ public class TestCreateAppOperation {
/yourthing/lib/bld/bld-wrapper.jar
/yourthing/lib/bld/bld-wrapper.properties
/yourthing/lib/compile
+ /yourthing/lib/compile/modules
/yourthing/lib/provided
+ /yourthing/lib/provided/modules
/yourthing/lib/runtime
+ /yourthing/lib/runtime/modules
/yourthing/lib/test
+ /yourthing/lib/test/modules
/yourthing/src
/yourthing/src/bld
/yourthing/src/bld/java
@@ -374,6 +386,7 @@ public class TestCreateAppOperation {
/myapp/lib/bld/bld-wrapper\\.jar
/myapp/lib/bld/bld-wrapper\\.properties
/myapp/lib/compile
+ /myapp/lib/compile/modules
/myapp/lib/local
/myapp/lib/local/apiguardian-api-1\\.1\\.2-sources\\.jar
/myapp/lib/local/apiguardian-api-1\\.1\\.2\\.jar
@@ -394,8 +407,11 @@ public class TestCreateAppOperation {
/myapp/lib/local/opentest4j-1\\.3\\.0-sources\\.jar
/myapp/lib/local/opentest4j-1\\.3\\.0\\.jar
/myapp/lib/provided
+ /myapp/lib/provided/modules
/myapp/lib/runtime
+ /myapp/lib/runtime/modules
/myapp/lib/test
+ /myapp/lib/test/modules
/myapp/src
/myapp/src/bld
/myapp/src/bld/java
@@ -495,6 +511,7 @@ public class TestCreateAppOperation {
/myapp/lib/bld/bld-wrapper\\.jar
/myapp/lib/bld/bld-wrapper\\.properties
/myapp/lib/compile
+ /myapp/lib/compile/modules
/myapp/lib/local_compile
/myapp/lib/local_test
/myapp/lib/local_test/apiguardian-api-1\\.1\\.2-sources\\.jar
@@ -516,8 +533,11 @@ public class TestCreateAppOperation {
/myapp/lib/local_test/opentest4j-1\\.3\\.0-sources\\.jar
/myapp/lib/local_test/opentest4j-1\\.3\\.0\\.jar
/myapp/lib/provided
+ /myapp/lib/provided/modules
/myapp/lib/runtime
+ /myapp/lib/runtime/modules
/myapp/lib/test
+ /myapp/lib/test/modules
/myapp/src
/myapp/src/bld
/myapp/src/bld/java
diff --git a/src/test/java/rife/bld/operations/TestCreateBaseOperation.java b/src/test/java/rife/bld/operations/TestCreateBaseOperation.java
index d410755..9731537 100644
--- a/src/test/java/rife/bld/operations/TestCreateBaseOperation.java
+++ b/src/test/java/rife/bld/operations/TestCreateBaseOperation.java
@@ -88,9 +88,13 @@ public class TestCreateBaseOperation {
/myapp/lib/bld/bld-wrapper\\.jar
/myapp/lib/bld/bld-wrapper\\.properties
/myapp/lib/compile
+ /myapp/lib/compile/modules
/myapp/lib/provided
+ /myapp/lib/provided/modules
/myapp/lib/runtime
+ /myapp/lib/runtime/modules
/myapp/lib/test
+ /myapp/lib/test/modules
/myapp/src
/myapp/src/bld
/myapp/src/bld/java
@@ -150,9 +154,13 @@ public class TestCreateBaseOperation {
/myapp/lib/bld/bld-wrapper\\.jar
/myapp/lib/bld/bld-wrapper\\.properties
/myapp/lib/compile
+ /myapp/lib/compile/modules
/myapp/lib/provided
+ /myapp/lib/provided/modules
/myapp/lib/runtime
+ /myapp/lib/runtime/modules
/myapp/lib/test
+ /myapp/lib/test/modules
/myapp/src
/myapp/src/bld
/myapp/src/bld/java
@@ -225,9 +233,13 @@ public class TestCreateBaseOperation {
/yourthing/lib/bld/bld-wrapper.jar
/yourthing/lib/bld/bld-wrapper.properties
/yourthing/lib/compile
+ /yourthing/lib/compile/modules
/yourthing/lib/provided
+ /yourthing/lib/provided/modules
/yourthing/lib/runtime
+ /yourthing/lib/runtime/modules
/yourthing/lib/test
+ /yourthing/lib/test/modules
/yourthing/src
/yourthing/src/bld
/yourthing/src/bld/java
@@ -288,9 +300,13 @@ public class TestCreateBaseOperation {
/yourthing/lib/bld/bld-wrapper.jar
/yourthing/lib/bld/bld-wrapper.properties
/yourthing/lib/compile
+ /yourthing/lib/compile/modules
/yourthing/lib/provided
+ /yourthing/lib/provided/modules
/yourthing/lib/runtime
+ /yourthing/lib/runtime/modules
/yourthing/lib/test
+ /yourthing/lib/test/modules
/yourthing/src
/yourthing/src/bld
/yourthing/src/bld/java
diff --git a/src/test/java/rife/bld/operations/TestCreateLibOperation.java b/src/test/java/rife/bld/operations/TestCreateLibOperation.java
index 9e7066e..0aa7b99 100644
--- a/src/test/java/rife/bld/operations/TestCreateLibOperation.java
+++ b/src/test/java/rife/bld/operations/TestCreateLibOperation.java
@@ -87,8 +87,11 @@ public class TestCreateLibOperation {
/myapp/lib/bld/bld-wrapper\\.jar
/myapp/lib/bld/bld-wrapper\\.properties
/myapp/lib/compile
+ /myapp/lib/compile/modules
/myapp/lib/provided
+ /myapp/lib/provided/modules
/myapp/lib/runtime
+ /myapp/lib/runtime/modules
/myapp/lib/test
/myapp/lib/test/apiguardian-api-1\\.1\\.2-sources\\.jar
/myapp/lib/test/apiguardian-api-1\\.1\\.2\\.jar
@@ -106,6 +109,7 @@ public class TestCreateLibOperation {
/myapp/lib/test/junit-platform-console-standalone-1\\.10\\.3\\.jar
/myapp/lib/test/junit-platform-engine-1\\.10\\.3-sources\\.jar
/myapp/lib/test/junit-platform-engine-1\\.10\\.3\\.jar
+ /myapp/lib/test/modules
/myapp/lib/test/opentest4j-1\\.3\\.0-sources\\.jar
/myapp/lib/test/opentest4j-1\\.3\\.0\\.jar
/myapp/src
@@ -166,8 +170,11 @@ public class TestCreateLibOperation {
/myapp/lib/bld/bld-wrapper\\.jar
/myapp/lib/bld/bld-wrapper\\.properties
/myapp/lib/compile
+ /myapp/lib/compile/modules
/myapp/lib/provided
+ /myapp/lib/provided/modules
/myapp/lib/runtime
+ /myapp/lib/runtime/modules
/myapp/lib/test
/myapp/lib/test/apiguardian-api-1\\.1\\.2-sources\\.jar
/myapp/lib/test/apiguardian-api-1\\.1\\.2\\.jar
@@ -185,6 +192,7 @@ public class TestCreateLibOperation {
/myapp/lib/test/junit-platform-console-standalone-1\\.10\\.3\\.jar
/myapp/lib/test/junit-platform-engine-1\\.10\\.3-sources\\.jar
/myapp/lib/test/junit-platform-engine-1\\.10\\.3\\.jar
+ /myapp/lib/test/modules
/myapp/lib/test/opentest4j-1\\.3\\.0-sources\\.jar
/myapp/lib/test/opentest4j-1\\.3\\.0\\.jar
/myapp/src
diff --git a/src/test/java/rife/bld/operations/TestCreateRife2Operation.java b/src/test/java/rife/bld/operations/TestCreateRife2Operation.java
index 97025be..9934cbd 100644
--- a/src/test/java/rife/bld/operations/TestCreateRife2Operation.java
+++ b/src/test/java/rife/bld/operations/TestCreateRife2Operation.java
@@ -100,10 +100,13 @@ public class TestCreateRife2Operation {
/myapp/lib/bld/bld-wrapper\\.jar
/myapp/lib/bld/bld-wrapper\\.properties
/myapp/lib/compile
+ /myapp/lib/compile/modules
/myapp/lib/compile/rife2-.+-sources\\.jar
/myapp/lib/compile/rife2-.+\\.jar
/myapp/lib/provided
+ /myapp/lib/provided/modules
/myapp/lib/runtime
+ /myapp/lib/runtime/modules
/myapp/lib/standalone
/myapp/lib/standalone/jakarta\\.servlet-api-6\\.0\\.0-sources\\.jar
/myapp/lib/standalone/jakarta\\.servlet-api-6\\.0\\.0\\.jar
@@ -121,6 +124,7 @@ public class TestCreateRife2Operation {
/myapp/lib/standalone/jetty-session-12\\.0\\.11\\.jar
/myapp/lib/standalone/jetty-util-12\\.0\\.11-sources\\.jar
/myapp/lib/standalone/jetty-util-12\\.0\\.11\\.jar
+ /myapp/lib/standalone/modules
/myapp/lib/standalone/slf4j-api-2\\.0\\.13-sources\\.jar
/myapp/lib/standalone/slf4j-api-2\\.0\\.13\\.jar
/myapp/lib/standalone/slf4j-simple-2\\.0\\.13-sources\\.jar
@@ -144,6 +148,7 @@ public class TestCreateRife2Operation {
/myapp/lib/test/junit-platform-console-standalone-1\\.10\\.3\\.jar
/myapp/lib/test/junit-platform-engine-1\\.10\\.3-sources\\.jar
/myapp/lib/test/junit-platform-engine-1\\.10\\.3\\.jar
+ /myapp/lib/test/modules
/myapp/lib/test/opentest4j-1\\.3\\.0-sources\\.jar
/myapp/lib/test/opentest4j-1\\.3\\.0\\.jar
/myapp/src
@@ -214,10 +219,13 @@ public class TestCreateRife2Operation {
/myapp/lib/bld/bld-wrapper\\.jar
/myapp/lib/bld/bld-wrapper\\.properties
/myapp/lib/compile
+ /myapp/lib/compile/modules
/myapp/lib/compile/rife2-.+-sources\\.jar
/myapp/lib/compile/rife2-.+\\.jar
/myapp/lib/provided
+ /myapp/lib/provided/modules
/myapp/lib/runtime
+ /myapp/lib/runtime/modules
/myapp/lib/standalone
/myapp/lib/standalone/jakarta\\.servlet-api-6\\.0\\.0-sources\\.jar
/myapp/lib/standalone/jakarta\\.servlet-api-6\\.0\\.0\\.jar
@@ -235,6 +243,7 @@ public class TestCreateRife2Operation {
/myapp/lib/standalone/jetty-session-12\\.0\\.11\\.jar
/myapp/lib/standalone/jetty-util-12\\.0\\.11-sources\\.jar
/myapp/lib/standalone/jetty-util-12\\.0\\.11\\.jar
+ /myapp/lib/standalone/modules
/myapp/lib/standalone/slf4j-api-2\\.0\\.13-sources\\.jar
/myapp/lib/standalone/slf4j-api-2\\.0\\.13\\.jar
/myapp/lib/standalone/slf4j-simple-2\\.0\\.13-sources\\.jar
@@ -258,6 +267,7 @@ public class TestCreateRife2Operation {
/myapp/lib/test/junit-platform-console-standalone-1\\.10\\.3\\.jar
/myapp/lib/test/junit-platform-engine-1\\.10\\.3-sources\\.jar
/myapp/lib/test/junit-platform-engine-1\\.10\\.3\\.jar
+ /myapp/lib/test/modules
/myapp/lib/test/opentest4j-1\\.3\\.0-sources\\.jar
/myapp/lib/test/opentest4j-1\\.3\\.0\\.jar
/myapp/src
@@ -347,10 +357,15 @@ public class TestCreateRife2Operation {
/yourthing/lib/bld/bld-wrapper.jar
/yourthing/lib/bld/bld-wrapper.properties
/yourthing/lib/compile
+ /yourthing/lib/compile/modules
/yourthing/lib/provided
+ /yourthing/lib/provided/modules
/yourthing/lib/runtime
+ /yourthing/lib/runtime/modules
/yourthing/lib/standalone
+ /yourthing/lib/standalone/modules
/yourthing/lib/test
+ /yourthing/lib/test/modules
/yourthing/src
/yourthing/src/bld
/yourthing/src/bld/java
@@ -388,7 +403,7 @@ public class TestCreateRife2Operation {
compile_operation.fromProject(create_operation.project());
assertThrows(ExitStatusException.class, compile_operation::execute);
var diagnostics = compile_operation.diagnostics();
- assertEquals(16, diagnostics.size());
+ assertFalse(diagnostics.isEmpty());
} finally {
FileUtils.deleteDirectory(tmp);
}
@@ -468,6 +483,7 @@ public class TestCreateRife2Operation {
/myapp/lib/bld/bld-wrapper\\.jar
/myapp/lib/bld/bld-wrapper\\.properties
/myapp/lib/compile
+ /myapp/lib/compile/modules
/myapp/lib/local
/myapp/lib/local/apiguardian-api-1\\.1\\.2-sources\\.jar
/myapp/lib/local/apiguardian-api-1\\.1\\.2\\.jar
@@ -512,9 +528,13 @@ public class TestCreateRife2Operation {
/myapp/lib/local/slf4j-simple-2\\.0\\.13-sources\\.jar
/myapp/lib/local/slf4j-simple-2\\.0\\.13\\.jar
/myapp/lib/provided
+ /myapp/lib/provided/modules
/myapp/lib/runtime
+ /myapp/lib/runtime/modules
/myapp/lib/standalone
+ /myapp/lib/standalone/modules
/myapp/lib/test
+ /myapp/lib/test/modules
/myapp/src
/myapp/src/bld
/myapp/src/bld/java
@@ -636,6 +656,7 @@ public class TestCreateRife2Operation {
/myapp/lib/bld/bld-wrapper\\.jar
/myapp/lib/bld/bld-wrapper\\.properties
/myapp/lib/compile
+ /myapp/lib/compile/modules
/myapp/lib/local_compile
/myapp/lib/local_compile/rife2-.*-sources\\.jar
/myapp/lib/local_compile/rife2-.*\\.jar
@@ -682,9 +703,13 @@ public class TestCreateRife2Operation {
/myapp/lib/local_test/opentest4j-1\\.3\\.0-sources\\.jar
/myapp/lib/local_test/opentest4j-1\\.3\\.0\\.jar
/myapp/lib/provided
+ /myapp/lib/provided/modules
/myapp/lib/runtime
+ /myapp/lib/runtime/modules
/myapp/lib/standalone
+ /myapp/lib/standalone/modules
/myapp/lib/test
+ /myapp/lib/test/modules
/myapp/src
/myapp/src/bld
/myapp/src/bld/java
diff --git a/src/test/java/rife/bld/operations/TestDependencyTreeOperation.java b/src/test/java/rife/bld/operations/TestDependencyTreeOperation.java
index 4b5fe73..9f35202 100644
--- a/src/test/java/rife/bld/operations/TestDependencyTreeOperation.java
+++ b/src/test/java/rife/bld/operations/TestDependencyTreeOperation.java
@@ -8,6 +8,7 @@ import org.junit.jupiter.api.Test;
import rife.bld.BldVersion;
import rife.bld.WebProject;
import rife.bld.dependencies.*;
+import rife.bld.dependencies.Module;
import rife.bld.wrapper.Wrapper;
import rife.tools.FileUtils;
import rife.tools.StringUtils;
@@ -72,7 +73,7 @@ public class TestDependencyTreeOperation {
.repositories(List.of(Repository.MAVEN_CENTRAL));
operation.dependencies().scope(Scope.compile)
.include(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,5,20)))
- .include(new Dependency("com.stripe", "stripe-java", new VersionNumber(20,136,0)))
+ .include(new Module("com.stripe", "stripe-java", new VersionNumber(20,136,0)))
.include(new Dependency("org.json", "json", new VersionNumber(20230227)))
.include(new Dependency("com.itextpdf", "itext7-core", new VersionNumber(7,2,5)))
.include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2,0,7)))
@@ -93,7 +94,7 @@ public class TestDependencyTreeOperation {
compile:
├─ com.uwyn.rife2:rife2:1.5.20
- ├─ com.stripe:stripe-java:20.136.0
+ ├─ com.stripe:stripe-java:20.136.0@modular-jar
├─ org.json:json:20230227
├─ com.itextpdf:itext7-core:7.2.5
│ ├─ com.itextpdf:barcodes:7.2.5
@@ -150,12 +151,12 @@ public class TestDependencyTreeOperation {
.include(new Dependency("org.eclipse.jetty", "jetty-servlet", new VersionNumber(11,0,15)).exclude("*", "jetty-jakarta-servlet-api"))
.include(new Dependency("org.apache.tomcat.embed", "tomcat-embed-core", new VersionNumber(10,1,12)))
.include(new Dependency("org.apache.tomcat.embed", "tomcat-embed-jasper", new VersionNumber(10,1,12)))
- .include(new Dependency("net.imagej", "ij", Version.parse("1.54d")));
+ .include(new Module("net.imagej", "ij", Version.parse("1.54d")));
operation.dependencies().scope(Scope.test)
.include(new Dependency("org.jsoup", "jsoup", new VersionNumber(1,16,1)))
.include(new Dependency("jakarta.servlet", "jakarta.servlet-api", new VersionNumber(5,0,0)))
.include(new Dependency("org.eclipse.jetty", "jetty-server", new VersionNumber(11,0,15)).exclude("*", "jetty-jakarta-servlet-api"))
- .include(new Dependency("org.eclipse.jetty", "jetty-servlet", new VersionNumber(11,0,15)).exclude("*", "jetty-jakarta-servlet-api"))
+ .include(new Module("org.eclipse.jetty", "jetty-servlet", new VersionNumber(11,0,15)).exclude("*", "jetty-jakarta-servlet-api"))
.include(new Dependency("net.imagej", "ij", Version.parse("1.54d")));
operation.execute();
@@ -184,7 +185,7 @@ public class TestDependencyTreeOperation {
├─ org.apache.tomcat.embed:tomcat-embed-jasper:10.1.12
│ ├─ org.apache.tomcat.embed:tomcat-embed-el:10.1.12
│ └─ org.eclipse.jdt:ecj:3.33.0
- └─ net.imagej:ij:1.54d
+ └─ net.imagej:ij:1.54d@modular-jar
runtime:
no dependencies
@@ -197,8 +198,8 @@ public class TestDependencyTreeOperation {
│ │ └─ org.eclipse.jetty:jetty-util:11.0.15
│ ├─ org.eclipse.jetty:jetty-io:11.0.15
│ └─ org.slf4j:slf4j-api:2.0.5
- ├─ org.eclipse.jetty:jetty-servlet:11.0.15
- │ └─ org.eclipse.jetty:jetty-security:11.0.15
+ ├─ org.eclipse.jetty:jetty-servlet:11.0.15@modular-jar
+ │ └─ org.eclipse.jetty:jetty-security:11.0.15@modular-jar
└─ net.imagej:ij:1.54d
"""), tree);
@@ -390,7 +391,7 @@ public class TestDependencyTreeOperation {
.include(new Dependency("com.uwyn.rife2", "rife2", new VersionNumber(1,5,20)))
.include(new Dependency("com.stripe", "stripe-java", new VersionNumber(20,136,0)))
.include(new Dependency("org.json", "json", new VersionNumber(20230227)))
- .include(new Dependency("com.itextpdf", "itext7-core", new VersionNumber(7,2,5)))
+ .include(new Module("com.itextpdf", "itext7-core", new VersionNumber(7,2,5)))
.include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2,0,7)))
.include(new Dependency("org.apache.thrift", "libthrift", new VersionNumber(0,17,0)))
.include(new Dependency("commons-codec", "commons-codec", new VersionNumber(1,15)))
@@ -411,7 +412,7 @@ public class TestDependencyTreeOperation {
.include(new Dependency("jakarta.servlet", "jakarta.servlet-api", new VersionNumber(5,0,0)))
.include(new Dependency("org.eclipse.jetty", "jetty-server", new VersionNumber(11,0,15)).exclude("*", "jetty-jakarta-servlet-api"))
.include(new Dependency("org.eclipse.jetty", "jetty-servlet", new VersionNumber(11,0,15)).exclude("*", "jetty-jakarta-servlet-api"))
- .include(new Dependency("net.imagej", "ij", Version.parse("1.54d")));
+ .include(new Module("net.imagej", "ij", Version.parse("1.54d")));
var operation = new DependencyTreeOperation()
.fromProject(project);
@@ -442,22 +443,22 @@ public class TestDependencyTreeOperation {
├─ com.uwyn.rife2:rife2:1.5.20
├─ com.stripe:stripe-java:20.136.0
├─ org.json:json:20230227
- ├─ com.itextpdf:itext7-core:7.2.5
- │ ├─ com.itextpdf:barcodes:7.2.5
- │ ├─ com.itextpdf:font-asian:7.2.5
- │ ├─ com.itextpdf:forms:7.2.5
- │ ├─ com.itextpdf:hyph:7.2.5
- │ ├─ com.itextpdf:io:7.2.5
- │ │ └─ com.itextpdf:commons:7.2.5
- │ ├─ com.itextpdf:kernel:7.2.5
- │ │ ├─ org.bouncycastle:bcpkix-jdk15on:1.70
- │ │ │ └─ org.bouncycastle:bcutil-jdk15on:1.70
- │ │ └─ org.bouncycastle:bcprov-jdk15on:1.70
- │ ├─ com.itextpdf:layout:7.2.5
- │ ├─ com.itextpdf:pdfa:7.2.5
- │ ├─ com.itextpdf:sign:7.2.5
- │ ├─ com.itextpdf:styled-xml-parser:7.2.5
- │ └─ com.itextpdf:svg:7.2.5
+ ├─ com.itextpdf:itext7-core:7.2.5@modular-jar
+ │ ├─ com.itextpdf:barcodes:7.2.5@modular-jar
+ │ ├─ com.itextpdf:font-asian:7.2.5@modular-jar
+ │ ├─ com.itextpdf:forms:7.2.5@modular-jar
+ │ ├─ com.itextpdf:hyph:7.2.5@modular-jar
+ │ ├─ com.itextpdf:io:7.2.5@modular-jar
+ │ │ └─ com.itextpdf:commons:7.2.5@modular-jar
+ │ ├─ com.itextpdf:kernel:7.2.5@modular-jar
+ │ │ ├─ org.bouncycastle:bcpkix-jdk15on:1.70@modular-jar
+ │ │ │ └─ org.bouncycastle:bcutil-jdk15on:1.70@modular-jar
+ │ │ └─ org.bouncycastle:bcprov-jdk15on:1.70@modular-jar
+ │ ├─ com.itextpdf:layout:7.2.5@modular-jar
+ │ ├─ com.itextpdf:pdfa:7.2.5@modular-jar
+ │ ├─ com.itextpdf:sign:7.2.5@modular-jar
+ │ ├─ com.itextpdf:styled-xml-parser:7.2.5@modular-jar
+ │ └─ com.itextpdf:svg:7.2.5@modular-jar
├─ org.slf4j:slf4j-simple:2.0.7
│ └─ org.slf4j:slf4j-api:2.0.7
├─ org.apache.thrift:libthrift:0.17.0
@@ -498,7 +499,7 @@ public class TestDependencyTreeOperation {
│ └─ org.slf4j:slf4j-api:2.0.5
├─ org.eclipse.jetty:jetty-servlet:11.0.15
│ └─ org.eclipse.jetty:jetty-security:11.0.15
- └─ net.imagej:ij:1.54d
+ └─ net.imagej:ij:1.54d@modular-jar
"""), tree);
} finally {
diff --git a/src/test/java/rife/bld/operations/TestDownloadOperation.java b/src/test/java/rife/bld/operations/TestDownloadOperation.java
index e44d947..57f4223 100644
--- a/src/test/java/rife/bld/operations/TestDownloadOperation.java
+++ b/src/test/java/rife/bld/operations/TestDownloadOperation.java
@@ -7,6 +7,7 @@ package rife.bld.operations;
import org.junit.jupiter.api.Test;
import rife.bld.WebProject;
import rife.bld.dependencies.*;
+import rife.bld.dependencies.Module;
import rife.tools.FileUtils;
import java.io.File;
@@ -23,10 +24,15 @@ public class TestDownloadOperation {
assertTrue(operation.dependencies().isEmpty());
assertTrue(operation.repositories().isEmpty());
assertNull(operation.libCompileDirectory());
+ assertNull(operation.libCompileModulesDirectory());
assertNull(operation.libProvidedDirectory());
+ assertNull(operation.libProvidedModulesDirectory());
assertNull(operation.libRuntimeDirectory());
+ assertNull(operation.libRuntimeModulesDirectory());
assertNull(operation.libStandaloneDirectory());
+ assertNull(operation.libStandaloneModulesDirectory());
assertNull(operation.libTestDirectory());
+ assertNull(operation.libTestModulesDirectory());
}
@Test
@@ -40,6 +46,11 @@ public class TestDownloadOperation {
var dir3 = new File("dir3");
var dir4 = new File("dir4");
var dir5 = new File("dir5");
+ var dir6 = new File("dir6");
+ var dir7 = new File("dir7");
+ var dir8 = new File("dir8");
+ var dir9 = new File("dir9");
+ var dir10 = new File("dir10");
var operation1 = new DownloadOperation()
.repositories(List.of(repository1, repository2))
@@ -47,7 +58,12 @@ public class TestDownloadOperation {
.libProvidedDirectory(dir2)
.libRuntimeDirectory(dir3)
.libStandaloneDirectory(dir4)
- .libTestDirectory(dir5);
+ .libTestDirectory(dir5)
+ .libCompileModulesDirectory(dir6)
+ .libProvidedModulesDirectory(dir7)
+ .libRuntimeModulesDirectory(dir8)
+ .libStandaloneModulesDirectory(dir9)
+ .libTestModulesDirectory(dir10);
var dependency_scopes = new DependencyScopes();
dependency_scopes.scope(Scope.compile).include(dependency1).include(dependency2);
operation1.dependencies(dependency_scopes);
@@ -60,13 +76,23 @@ public class TestDownloadOperation {
assertEquals(dir3, operation1.libRuntimeDirectory());
assertEquals(dir4, operation1.libStandaloneDirectory());
assertEquals(dir5, operation1.libTestDirectory());
+ assertEquals(dir6, operation1.libCompileModulesDirectory());
+ assertEquals(dir7, operation1.libProvidedModulesDirectory());
+ assertEquals(dir8, operation1.libRuntimeModulesDirectory());
+ assertEquals(dir9, operation1.libStandaloneModulesDirectory());
+ assertEquals(dir10, operation1.libTestModulesDirectory());
var operation2 = new DownloadOperation()
.libCompileDirectory(dir1)
.libProvidedDirectory(dir2)
.libRuntimeDirectory(dir3)
.libStandaloneDirectory(dir4)
- .libTestDirectory(dir5);
+ .libTestDirectory(dir5)
+ .libCompileModulesDirectory(dir6)
+ .libProvidedModulesDirectory(dir7)
+ .libRuntimeModulesDirectory(dir8)
+ .libStandaloneModulesDirectory(dir9)
+ .libTestModulesDirectory(dir10);
operation2.repositories().add(repository1);
operation2.repositories().add(repository2);
operation2.dependencies().scope(Scope.compile).include(dependency1).include(dependency2);
@@ -80,6 +106,11 @@ public class TestDownloadOperation {
assertEquals(dir3, operation2.libRuntimeDirectory());
assertEquals(dir4, operation2.libStandaloneDirectory());
assertEquals(dir5, operation2.libTestDirectory());
+ assertEquals(dir6, operation2.libCompileModulesDirectory());
+ assertEquals(dir7, operation2.libProvidedModulesDirectory());
+ assertEquals(dir8, operation2.libRuntimeModulesDirectory());
+ assertEquals(dir9, operation2.libStandaloneModulesDirectory());
+ assertEquals(dir10, operation2.libTestModulesDirectory());
var operation3 = new DownloadOperation()
.offline(true)
@@ -96,14 +127,14 @@ public class TestDownloadOperation {
try {
var dir1 = new File(tmp, "dir1");
var dir2 = new File(tmp, "dir2");
- var dir3 = new File(tmp, "dir3");
+ var dir8 = new File(tmp, "dir8");
+ var dir3 = new File(dir8, "dir3");
var dir4 = new File(tmp, "dir4");
var dir5 = new File(tmp, "dir5");
- dir1.mkdirs();
- dir2.mkdirs();
- dir3.mkdirs();
- dir4.mkdirs();
- dir5.mkdirs();
+ var dir6 = new File(tmp, "dir6");
+ var dir7 = new File(tmp, "dir7");
+ var dir9 = new File(dir4, "dir9");
+ var dir10 = new File(dir5, "dir10");
var operation = new DownloadOperation()
.repositories(List.of(Repository.MAVEN_CENTRAL))
@@ -111,17 +142,27 @@ public class TestDownloadOperation {
.libProvidedDirectory(dir2)
.libRuntimeDirectory(dir3)
.libStandaloneDirectory(dir4)
- .libTestDirectory(dir5);
+ .libTestDirectory(dir5)
+ .libCompileModulesDirectory(dir6)
+ .libProvidedModulesDirectory(dir7)
+ .libRuntimeModulesDirectory(dir8)
+ .libStandaloneModulesDirectory(dir9)
+ .libTestModulesDirectory(dir10);
operation.dependencies().scope(Scope.compile)
- .include(new Dependency("org.apache.commons", "commons-lang3", new VersionNumber(3, 12, 0)));
+ .include(new Dependency("org.apache.commons", "commons-lang3", new VersionNumber(3,12,0)))
+ .include(new Module("org.json", "json", new VersionNumber(20240303)));
operation.dependencies().scope(Scope.provided)
- .include(new Dependency("jakarta.servlet", "jakarta.servlet-api", new VersionNumber(6, 0, 0)));
+ .include(new Dependency("commons-codec", "commons-codec", new VersionNumber(1,17,0)))
+ .include(new Module("com.google.zxing", "javase", new VersionNumber(3,5,3)));
operation.dependencies().scope(Scope.runtime)
- .include(new Dependency("org.apache.commons", "commons-collections4", new VersionNumber(4, 4)));
+ .include(new Dependency("org.apache.commons", "commons-collections4", new VersionNumber(4,4)))
+ .include(new Module("org.postgresql", "postgresql", new VersionNumber(42,7,3)));
operation.dependencies().scope(Scope.standalone)
- .include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2, 0, 6)));
+ .include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2,0,6)))
+ .include(new Module("org.eclipse.jetty.ee10", "jetty-ee10-servlet", new VersionNumber(12,0,11)));
operation.dependencies().scope(Scope.test)
- .include(new Dependency("org.apache.httpcomponents.client5", "httpclient5", new VersionNumber(5, 2, 1)));
+ .include(new Dependency("org.apache.httpcomponents.client5", "httpclient5", new VersionNumber(5,2,1)))
+ .include(new Module("org.jsoup", "jsoup", new VersionNumber(1,18,1)));
operation.execute();
@@ -129,17 +170,38 @@ public class TestDownloadOperation {
/dir1
/dir1/commons-lang3-3.12.0.jar
/dir2
- /dir2/jakarta.servlet-api-6.0.0.jar
- /dir3
- /dir3/commons-collections4-4.4.jar
+ /dir2/commons-codec-1.17.0.jar
/dir4
- /dir4/slf4j-api-2.0.6.jar
+ /dir4/dir9
+ /dir4/dir9/jakarta.servlet-api-6.0.0.jar
+ /dir4/dir9/jetty-ee10-servlet-12.0.11.jar
+ /dir4/dir9/jetty-http-12.0.11.jar
+ /dir4/dir9/jetty-io-12.0.11.jar
+ /dir4/dir9/jetty-security-12.0.11.jar
+ /dir4/dir9/jetty-server-12.0.11.jar
+ /dir4/dir9/jetty-session-12.0.11.jar
+ /dir4/dir9/jetty-util-12.0.11.jar
+ /dir4/dir9/slf4j-api-2.0.12.jar
/dir4/slf4j-simple-2.0.6.jar
/dir5
+ /dir5/dir10
+ /dir5/dir10/jsoup-1.18.1.jar
/dir5/httpclient5-5.2.1.jar
/dir5/httpcore5-5.2.jar
/dir5/httpcore5-h2-5.2.jar
- /dir5/slf4j-api-1.7.36.jar""",
+ /dir5/slf4j-api-1.7.36.jar
+ /dir6
+ /dir6/json-20240303.jar
+ /dir7
+ /dir7/core-3.5.3.jar
+ /dir7/jai-imageio-core-1.4.0.jar
+ /dir7/javase-3.5.3.jar
+ /dir7/jcommander-1.82.jar
+ /dir8
+ /dir8/checker-qual-3.42.0.jar
+ /dir8/dir3
+ /dir8/dir3/commons-collections4-4.4.jar
+ /dir8/postgresql-42.7.3.jar""",
FileUtils.generateDirectoryListing(tmp));
} finally {
FileUtils.deleteDirectory(tmp);
@@ -153,14 +215,14 @@ public class TestDownloadOperation {
try {
var dir1 = new File(tmp, "dir1");
var dir2 = new File(tmp, "dir2");
- var dir3 = new File(tmp, "dir3");
+ var dir8 = new File(tmp, "dir8");
+ var dir3 = new File(dir8, "dir3");
var dir4 = new File(tmp, "dir4");
var dir5 = new File(tmp, "dir5");
- dir1.mkdirs();
- dir2.mkdirs();
- dir3.mkdirs();
- dir4.mkdirs();
- dir5.mkdirs();
+ var dir6 = new File(tmp, "dir6");
+ var dir7 = new File(tmp, "dir7");
+ var dir9 = new File(dir4, "dir9");
+ var dir10 = new File(dir5, "dir10");
var operation = new DownloadOperation()
.repositories(List.of(Repository.MAVEN_CENTRAL))
@@ -169,18 +231,28 @@ public class TestDownloadOperation {
.libRuntimeDirectory(dir3)
.libStandaloneDirectory(dir4)
.libTestDirectory(dir5)
+ .libCompileModulesDirectory(dir6)
+ .libProvidedModulesDirectory(dir7)
+ .libRuntimeModulesDirectory(dir8)
+ .libStandaloneModulesDirectory(dir9)
+ .libTestModulesDirectory(dir10)
.downloadJavadoc(true)
.downloadSources(true);
operation.dependencies().scope(Scope.compile)
- .include(new Dependency("org.apache.commons", "commons-lang3", new VersionNumber(3, 12, 0)));
+ .include(new Dependency("org.apache.commons", "commons-lang3", new VersionNumber(3,12,0)))
+ .include(new Module("org.json", "json", new VersionNumber(20240303)));
operation.dependencies().scope(Scope.provided)
- .include(new Dependency("jakarta.servlet", "jakarta.servlet-api", new VersionNumber(6, 0, 0)));
+ .include(new Dependency("commons-codec", "commons-codec", new VersionNumber(1,17,0)))
+ .include(new Module("com.google.zxing", "javase", new VersionNumber(3,5,3)));
operation.dependencies().scope(Scope.runtime)
- .include(new Dependency("org.apache.commons", "commons-collections4", new VersionNumber(4, 4)));
+ .include(new Dependency("org.apache.commons", "commons-collections4", new VersionNumber(4,4)))
+ .include(new Module("org.postgresql", "postgresql", new VersionNumber(42,7,3)));
operation.dependencies().scope(Scope.standalone)
- .include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2, 0, 6)));
+ .include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2,0,6)))
+ .include(new Module("org.eclipse.jetty.ee10", "jetty-ee10-servlet", new VersionNumber(12,0,11)));
operation.dependencies().scope(Scope.test)
- .include(new Dependency("org.apache.httpcomponents.client5", "httpclient5", new VersionNumber(5, 2, 1)));
+ .include(new Dependency("org.apache.httpcomponents.client5", "httpclient5", new VersionNumber(5,2,1)))
+ .include(new Module("org.jsoup", "jsoup", new VersionNumber(1,18,1)));
operation.execute();
@@ -190,21 +262,46 @@ public class TestDownloadOperation {
/dir1/commons-lang3-3.12.0-sources.jar
/dir1/commons-lang3-3.12.0.jar
/dir2
- /dir2/jakarta.servlet-api-6.0.0-javadoc.jar
- /dir2/jakarta.servlet-api-6.0.0-sources.jar
- /dir2/jakarta.servlet-api-6.0.0.jar
- /dir3
- /dir3/commons-collections4-4.4-javadoc.jar
- /dir3/commons-collections4-4.4-sources.jar
- /dir3/commons-collections4-4.4.jar
+ /dir2/commons-codec-1.17.0-javadoc.jar
+ /dir2/commons-codec-1.17.0-sources.jar
+ /dir2/commons-codec-1.17.0.jar
/dir4
- /dir4/slf4j-api-2.0.6-javadoc.jar
- /dir4/slf4j-api-2.0.6-sources.jar
- /dir4/slf4j-api-2.0.6.jar
+ /dir4/dir9
+ /dir4/dir9/jakarta.servlet-api-6.0.0-javadoc.jar
+ /dir4/dir9/jakarta.servlet-api-6.0.0-sources.jar
+ /dir4/dir9/jakarta.servlet-api-6.0.0.jar
+ /dir4/dir9/jetty-ee10-servlet-12.0.11-javadoc.jar
+ /dir4/dir9/jetty-ee10-servlet-12.0.11-sources.jar
+ /dir4/dir9/jetty-ee10-servlet-12.0.11.jar
+ /dir4/dir9/jetty-http-12.0.11-javadoc.jar
+ /dir4/dir9/jetty-http-12.0.11-sources.jar
+ /dir4/dir9/jetty-http-12.0.11.jar
+ /dir4/dir9/jetty-io-12.0.11-javadoc.jar
+ /dir4/dir9/jetty-io-12.0.11-sources.jar
+ /dir4/dir9/jetty-io-12.0.11.jar
+ /dir4/dir9/jetty-security-12.0.11-javadoc.jar
+ /dir4/dir9/jetty-security-12.0.11-sources.jar
+ /dir4/dir9/jetty-security-12.0.11.jar
+ /dir4/dir9/jetty-server-12.0.11-javadoc.jar
+ /dir4/dir9/jetty-server-12.0.11-sources.jar
+ /dir4/dir9/jetty-server-12.0.11.jar
+ /dir4/dir9/jetty-session-12.0.11-javadoc.jar
+ /dir4/dir9/jetty-session-12.0.11-sources.jar
+ /dir4/dir9/jetty-session-12.0.11.jar
+ /dir4/dir9/jetty-util-12.0.11-javadoc.jar
+ /dir4/dir9/jetty-util-12.0.11-sources.jar
+ /dir4/dir9/jetty-util-12.0.11.jar
+ /dir4/dir9/slf4j-api-2.0.12-javadoc.jar
+ /dir4/dir9/slf4j-api-2.0.12-sources.jar
+ /dir4/dir9/slf4j-api-2.0.12.jar
/dir4/slf4j-simple-2.0.6-javadoc.jar
/dir4/slf4j-simple-2.0.6-sources.jar
/dir4/slf4j-simple-2.0.6.jar
/dir5
+ /dir5/dir10
+ /dir5/dir10/jsoup-1.18.1-javadoc.jar
+ /dir5/dir10/jsoup-1.18.1-sources.jar
+ /dir5/dir10/jsoup-1.18.1.jar
/dir5/httpclient5-5.2.1-javadoc.jar
/dir5/httpclient5-5.2.1-sources.jar
/dir5/httpclient5-5.2.1.jar
@@ -216,7 +313,35 @@ public class TestDownloadOperation {
/dir5/httpcore5-h2-5.2.jar
/dir5/slf4j-api-1.7.36-javadoc.jar
/dir5/slf4j-api-1.7.36-sources.jar
- /dir5/slf4j-api-1.7.36.jar""",
+ /dir5/slf4j-api-1.7.36.jar
+ /dir6
+ /dir6/json-20240303-javadoc.jar
+ /dir6/json-20240303-sources.jar
+ /dir6/json-20240303.jar
+ /dir7
+ /dir7/core-3.5.3-javadoc.jar
+ /dir7/core-3.5.3-sources.jar
+ /dir7/core-3.5.3.jar
+ /dir7/jai-imageio-core-1.4.0-javadoc.jar
+ /dir7/jai-imageio-core-1.4.0-sources.jar
+ /dir7/jai-imageio-core-1.4.0.jar
+ /dir7/javase-3.5.3-javadoc.jar
+ /dir7/javase-3.5.3-sources.jar
+ /dir7/javase-3.5.3.jar
+ /dir7/jcommander-1.82-javadoc.jar
+ /dir7/jcommander-1.82-sources.jar
+ /dir7/jcommander-1.82.jar
+ /dir8
+ /dir8/checker-qual-3.42.0-javadoc.jar
+ /dir8/checker-qual-3.42.0-sources.jar
+ /dir8/checker-qual-3.42.0.jar
+ /dir8/dir3
+ /dir8/dir3/commons-collections4-4.4-javadoc.jar
+ /dir8/dir3/commons-collections4-4.4-sources.jar
+ /dir8/dir3/commons-collections4-4.4.jar
+ /dir8/postgresql-42.7.3-javadoc.jar
+ /dir8/postgresql-42.7.3-sources.jar
+ /dir8/postgresql-42.7.3.jar""",
FileUtils.generateDirectoryListing(tmp));
} finally {
FileUtils.deleteDirectory(tmp);
@@ -240,15 +365,20 @@ public class TestDownloadOperation {
project.createProjectStructure();
project.repositories().add(Repository.MAVEN_CENTRAL);
project.dependencies().scope(Scope.compile)
- .include(new Dependency("org.apache.commons", "commons-lang3", new VersionNumber(3, 12, 0)));
+ .include(new Dependency("org.apache.commons", "commons-lang3", new VersionNumber(3,12,0)))
+ .include(new Module("org.json", "json", new VersionNumber(20240303)));
project.dependencies().scope(Scope.provided)
- .include(new Dependency("jakarta.servlet", "jakarta.servlet-api", new VersionNumber(6, 0, 0)));
+ .include(new Dependency("commons-codec", "commons-codec", new VersionNumber(1,17,0)))
+ .include(new Module("com.google.zxing", "javase", new VersionNumber(3,5,3)));
project.dependencies().scope(Scope.runtime)
- .include(new Dependency("org.apache.commons", "commons-collections4", new VersionNumber(4, 4)));
+ .include(new Dependency("org.apache.commons", "commons-collections4", new VersionNumber(4,4)))
+ .include(new Module("org.postgresql", "postgresql", new VersionNumber(42,7,3)));
project.dependencies().scope(Scope.standalone)
- .include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2, 0, 6)));
+ .include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2,0,6)))
+ .include(new Module("org.eclipse.jetty.ee10", "jetty-ee10-servlet", new VersionNumber(12,0,11)));
project.dependencies().scope(Scope.test)
- .include(new Dependency("org.apache.httpcomponents.client5", "httpclient5", new VersionNumber(5, 2, 1)));
+ .include(new Dependency("org.apache.httpcomponents.client5", "httpclient5", new VersionNumber(5,2,1)))
+ .include(new Module("org.jsoup", "jsoup", new VersionNumber(1,18,1)));
var operation = new DownloadOperation()
.fromProject(project);
@@ -261,15 +391,49 @@ public class TestDownloadOperation {
/lib/compile
/lib/compile/commons-lang3-3.12.0-sources.jar
/lib/compile/commons-lang3-3.12.0.jar
+ /lib/compile/modules
+ /lib/compile/modules/json-20240303-sources.jar
+ /lib/compile/modules/json-20240303.jar
/lib/provided
- /lib/provided/jakarta.servlet-api-6.0.0-sources.jar
- /lib/provided/jakarta.servlet-api-6.0.0.jar
+ /lib/provided/commons-codec-1.17.0-sources.jar
+ /lib/provided/commons-codec-1.17.0.jar
+ /lib/provided/modules
+ /lib/provided/modules/core-3.5.3-sources.jar
+ /lib/provided/modules/core-3.5.3.jar
+ /lib/provided/modules/jai-imageio-core-1.4.0-sources.jar
+ /lib/provided/modules/jai-imageio-core-1.4.0.jar
+ /lib/provided/modules/javase-3.5.3-sources.jar
+ /lib/provided/modules/javase-3.5.3.jar
+ /lib/provided/modules/jcommander-1.82-sources.jar
+ /lib/provided/modules/jcommander-1.82.jar
/lib/runtime
/lib/runtime/commons-collections4-4.4-sources.jar
/lib/runtime/commons-collections4-4.4.jar
+ /lib/runtime/modules
+ /lib/runtime/modules/checker-qual-3.42.0-sources.jar
+ /lib/runtime/modules/checker-qual-3.42.0.jar
+ /lib/runtime/modules/postgresql-42.7.3-sources.jar
+ /lib/runtime/modules/postgresql-42.7.3.jar
/lib/standalone
- /lib/standalone/slf4j-api-2.0.6-sources.jar
- /lib/standalone/slf4j-api-2.0.6.jar
+ /lib/standalone/modules
+ /lib/standalone/modules/jakarta.servlet-api-6.0.0-sources.jar
+ /lib/standalone/modules/jakarta.servlet-api-6.0.0.jar
+ /lib/standalone/modules/jetty-ee10-servlet-12.0.11-sources.jar
+ /lib/standalone/modules/jetty-ee10-servlet-12.0.11.jar
+ /lib/standalone/modules/jetty-http-12.0.11-sources.jar
+ /lib/standalone/modules/jetty-http-12.0.11.jar
+ /lib/standalone/modules/jetty-io-12.0.11-sources.jar
+ /lib/standalone/modules/jetty-io-12.0.11.jar
+ /lib/standalone/modules/jetty-security-12.0.11-sources.jar
+ /lib/standalone/modules/jetty-security-12.0.11.jar
+ /lib/standalone/modules/jetty-server-12.0.11-sources.jar
+ /lib/standalone/modules/jetty-server-12.0.11.jar
+ /lib/standalone/modules/jetty-session-12.0.11-sources.jar
+ /lib/standalone/modules/jetty-session-12.0.11.jar
+ /lib/standalone/modules/jetty-util-12.0.11-sources.jar
+ /lib/standalone/modules/jetty-util-12.0.11.jar
+ /lib/standalone/modules/slf4j-api-2.0.12-sources.jar
+ /lib/standalone/modules/slf4j-api-2.0.12.jar
/lib/standalone/slf4j-simple-2.0.6-sources.jar
/lib/standalone/slf4j-simple-2.0.6.jar
/lib/test
@@ -279,6 +443,9 @@ public class TestDownloadOperation {
/lib/test/httpcore5-5.2.jar
/lib/test/httpcore5-h2-5.2-sources.jar
/lib/test/httpcore5-h2-5.2.jar
+ /lib/test/modules
+ /lib/test/modules/jsoup-1.18.1-sources.jar
+ /lib/test/modules/jsoup-1.18.1.jar
/lib/test/slf4j-api-1.7.36-sources.jar
/lib/test/slf4j-api-1.7.36.jar
/src
@@ -308,6 +475,8 @@ public class TestDownloadOperation {
project.repositories().add(Repository.MAVEN_CENTRAL);
project.dependencies().scope(Scope.compile)
.include(new Dependency("com.stripe", "stripe-java", new VersionNumber(20,136,0)));
+ project.dependencies().scope(Scope.runtime)
+ .include(new Module("org.json", "json", new VersionNumber(20240303)));
var operation = new DownloadOperation()
.fromProject(project);
@@ -318,14 +487,21 @@ public class TestDownloadOperation {
/lib
/lib/bld
/lib/compile
+ /lib/compile/modules
/lib/compile/stripe-java-20.136.0-sources.jar
/lib/compile/stripe-java-20.136.0.jar
/lib/provided
+ /lib/provided/modules
/lib/runtime
/lib/runtime/gson-2.9.0-sources.jar
/lib/runtime/gson-2.9.0.jar
+ /lib/runtime/modules
+ /lib/runtime/modules/json-20240303-sources.jar
+ /lib/runtime/modules/json-20240303.jar
/lib/standalone
+ /lib/standalone/modules
/lib/test
+ /lib/test/modules
/src
/src/bld
/src/bld/java
diff --git a/src/test/java/rife/bld/operations/TestPurgeOperation.java b/src/test/java/rife/bld/operations/TestPurgeOperation.java
index d9f7917..ec4b227 100644
--- a/src/test/java/rife/bld/operations/TestPurgeOperation.java
+++ b/src/test/java/rife/bld/operations/TestPurgeOperation.java
@@ -7,6 +7,7 @@ package rife.bld.operations;
import org.junit.jupiter.api.Test;
import rife.bld.WebProject;
import rife.bld.dependencies.*;
+import rife.bld.dependencies.Module;
import rife.tools.FileUtils;
import java.io.File;
@@ -40,6 +41,11 @@ public class TestPurgeOperation {
var dir3 = new File("dir3");
var dir4 = new File("dir4");
var dir5 = new File("dir5");
+ var dir6 = new File("dir6");
+ var dir7 = new File("dir7");
+ var dir8 = new File("dir8");
+ var dir9 = new File("dir9");
+ var dir10 = new File("dir10");
var operation1 = new PurgeOperation()
.repositories(List.of(repository1, repository2))
@@ -47,7 +53,12 @@ public class TestPurgeOperation {
.libProvidedDirectory(dir2)
.libRuntimeDirectory(dir3)
.libStandaloneDirectory(dir4)
- .libTestDirectory(dir5);
+ .libTestDirectory(dir5)
+ .libCompileModulesDirectory(dir6)
+ .libProvidedModulesDirectory(dir7)
+ .libRuntimeModulesDirectory(dir8)
+ .libStandaloneModulesDirectory(dir9)
+ .libTestModulesDirectory(dir10);
var dependency_scopes = new DependencyScopes();
dependency_scopes.scope(Scope.compile).include(dependency1).include(dependency2);
operation1.dependencies(dependency_scopes);
@@ -60,13 +71,23 @@ public class TestPurgeOperation {
assertEquals(dir3, operation1.libRuntimeDirectory());
assertEquals(dir4, operation1.libStandaloneDirectory());
assertEquals(dir5, operation1.libTestDirectory());
+ assertEquals(dir6, operation1.libCompileModulesDirectory());
+ assertEquals(dir7, operation1.libProvidedModulesDirectory());
+ assertEquals(dir8, operation1.libRuntimeModulesDirectory());
+ assertEquals(dir9, operation1.libStandaloneModulesDirectory());
+ assertEquals(dir10, operation1.libTestModulesDirectory());
var operation2 = new PurgeOperation()
.libCompileDirectory(dir1)
.libProvidedDirectory(dir2)
.libRuntimeDirectory(dir3)
.libStandaloneDirectory(dir4)
- .libTestDirectory(dir5);
+ .libTestDirectory(dir5)
+ .libCompileModulesDirectory(dir6)
+ .libProvidedModulesDirectory(dir7)
+ .libRuntimeModulesDirectory(dir8)
+ .libStandaloneModulesDirectory(dir9)
+ .libTestModulesDirectory(dir10);
operation2.repositories().add(repository1);
operation2.repositories().add(repository2);
operation2.dependencies().scope(Scope.compile).include(dependency1).include(dependency2);
@@ -80,6 +101,11 @@ public class TestPurgeOperation {
assertEquals(dir3, operation2.libRuntimeDirectory());
assertEquals(dir4, operation2.libStandaloneDirectory());
assertEquals(dir5, operation2.libTestDirectory());
+ assertEquals(dir6, operation2.libCompileModulesDirectory());
+ assertEquals(dir7, operation2.libProvidedModulesDirectory());
+ assertEquals(dir8, operation2.libRuntimeModulesDirectory());
+ assertEquals(dir9, operation2.libStandaloneModulesDirectory());
+ assertEquals(dir10, operation2.libTestModulesDirectory());
var operation3 = new PurgeOperation()
.offline(true)
@@ -96,14 +122,14 @@ public class TestPurgeOperation {
try {
var dir1 = new File(tmp, "dir1");
var dir2 = new File(tmp, "dir2");
- var dir3 = new File(tmp, "dir3");
+ var dir8 = new File(tmp, "dir8");
+ var dir3 = new File(dir8, "dir3");
var dir4 = new File(tmp, "dir4");
var dir5 = new File(tmp, "dir5");
- dir1.mkdirs();
- dir2.mkdirs();
- dir3.mkdirs();
- dir4.mkdirs();
- dir5.mkdirs();
+ var dir6 = new File(tmp, "dir6");
+ var dir7 = new File(tmp, "dir7");
+ var dir9 = new File(dir4, "dir9");
+ var dir10 = new File(dir5, "dir10");
var operation_download1 = new DownloadOperation()
.repositories(List.of(Repository.MAVEN_CENTRAL))
@@ -111,17 +137,27 @@ public class TestPurgeOperation {
.libProvidedDirectory(dir2)
.libRuntimeDirectory(dir3)
.libStandaloneDirectory(dir4)
- .libTestDirectory(dir5);
+ .libTestDirectory(dir5)
+ .libCompileModulesDirectory(dir6)
+ .libProvidedModulesDirectory(dir7)
+ .libRuntimeModulesDirectory(dir8)
+ .libStandaloneModulesDirectory(dir9)
+ .libTestModulesDirectory(dir10);
operation_download1.dependencies().scope(Scope.compile)
- .include(new Dependency("org.apache.commons", "commons-lang3", new VersionNumber(3, 1)));
+ .include(new Dependency("org.apache.commons", "commons-lang3", new VersionNumber(3,1)))
+ .include(new Module("org.json", "json", new VersionNumber(20240205)));
operation_download1.dependencies().scope(Scope.provided)
- .include(new Dependency("jakarta.servlet", "jakarta.servlet-api", new VersionNumber(5, 0, 0)));
+ .include(new Dependency("commons-codec", "commons-codec", new VersionNumber(1,14)))
+ .include(new Module("com.google.zxing", "javase", new VersionNumber(3,4,0)));
operation_download1.dependencies().scope(Scope.runtime)
- .include(new Dependency("org.apache.commons", "commons-collections4", new VersionNumber(4, 3)));
+ .include(new Dependency("org.apache.commons", "commons-collections4", new VersionNumber(4,3)))
+ .include(new Module("org.postgresql", "postgresql", new VersionNumber(42,4,5)));
operation_download1.dependencies().scope(Scope.standalone)
- .include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2, 0, 0)));
+ .include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2,0,0)))
+ .include(new Module("org.eclipse.jetty.ee10", "jetty-ee10-servlet", new VersionNumber(12,0,6)));
operation_download1.dependencies().scope(Scope.test)
- .include(new Dependency("org.apache.httpcomponents.client5", "httpclient5", new VersionNumber(5, 0)));
+ .include(new Dependency("org.apache.httpcomponents.client5", "httpclient5", new VersionNumber(5,0)))
+ .include(new Module("org.jsoup", "jsoup", new VersionNumber(1,15,3)));
operation_download1.execute();
@@ -131,17 +167,27 @@ public class TestPurgeOperation {
.libProvidedDirectory(dir2)
.libRuntimeDirectory(dir3)
.libStandaloneDirectory(dir4)
- .libTestDirectory(dir5);
+ .libTestDirectory(dir5)
+ .libCompileModulesDirectory(dir6)
+ .libProvidedModulesDirectory(dir7)
+ .libRuntimeModulesDirectory(dir8)
+ .libStandaloneModulesDirectory(dir9)
+ .libTestModulesDirectory(dir10);
operation_download2.dependencies().scope(Scope.compile)
- .include(new Dependency("org.apache.commons", "commons-lang3", new VersionNumber(3, 12, 0)));
+ .include(new Dependency("org.apache.commons", "commons-lang3", new VersionNumber(3,12,0)))
+ .include(new Module("org.json", "json", new VersionNumber(20240303)));
operation_download2.dependencies().scope(Scope.provided)
- .include(new Dependency("jakarta.servlet", "jakarta.servlet-api", new VersionNumber(6, 0, 0)));
+ .include(new Dependency("commons-codec", "commons-codec", new VersionNumber(1,17,0)))
+ .include(new Module("com.google.zxing", "javase", new VersionNumber(3,5,3)));
operation_download2.dependencies().scope(Scope.runtime)
- .include(new Dependency("org.apache.commons", "commons-collections4", new VersionNumber(4, 4)));
+ .include(new Dependency("org.apache.commons", "commons-collections4", new VersionNumber(4,4)))
+ .include(new Module("org.postgresql", "postgresql", new VersionNumber(42,7,3)));
operation_download2.dependencies().scope(Scope.standalone)
- .include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2, 0, 6)));
+ .include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2,0,6)))
+ .include(new Module("org.eclipse.jetty.ee10", "jetty-ee10-servlet", new VersionNumber(12,0,11)));
operation_download2.dependencies().scope(Scope.test)
- .include(new Dependency("org.apache.httpcomponents.client5", "httpclient5", new VersionNumber(5, 2, 1)));
+ .include(new Dependency("org.apache.httpcomponents.client5", "httpclient5", new VersionNumber(5,2,1)))
+ .include(new Module("org.jsoup", "jsoup", new VersionNumber(1,18,1)));
operation_download2.execute();
@@ -150,18 +196,34 @@ public class TestPurgeOperation {
/dir1/commons-lang3-3.1.jar
/dir1/commons-lang3-3.12.0.jar
/dir2
- /dir2/jakarta.servlet-api-5.0.0.jar
- /dir2/jakarta.servlet-api-6.0.0.jar
- /dir3
- /dir3/commons-collections4-4.3.jar
- /dir3/commons-collections4-4.4.jar
+ /dir2/commons-codec-1.14.jar
+ /dir2/commons-codec-1.17.0.jar
/dir4
- /dir4/slf4j-api-2.0.0.jar
- /dir4/slf4j-api-2.0.6.jar
+ /dir4/dir9
+ /dir4/dir9/jakarta.servlet-api-6.0.0.jar
+ /dir4/dir9/jetty-ee10-servlet-12.0.11.jar
+ /dir4/dir9/jetty-ee10-servlet-12.0.6.jar
+ /dir4/dir9/jetty-http-12.0.11.jar
+ /dir4/dir9/jetty-http-12.0.6.jar
+ /dir4/dir9/jetty-io-12.0.11.jar
+ /dir4/dir9/jetty-io-12.0.6.jar
+ /dir4/dir9/jetty-security-12.0.11.jar
+ /dir4/dir9/jetty-security-12.0.6.jar
+ /dir4/dir9/jetty-server-12.0.11.jar
+ /dir4/dir9/jetty-server-12.0.6.jar
+ /dir4/dir9/jetty-session-12.0.11.jar
+ /dir4/dir9/jetty-session-12.0.6.jar
+ /dir4/dir9/jetty-util-12.0.11.jar
+ /dir4/dir9/jetty-util-12.0.6.jar
+ /dir4/dir9/slf4j-api-2.0.12.jar
+ /dir4/dir9/slf4j-api-2.0.9.jar
/dir4/slf4j-simple-2.0.0.jar
/dir4/slf4j-simple-2.0.6.jar
/dir5
/dir5/commons-codec-1.13.jar
+ /dir5/dir10
+ /dir5/dir10/jsoup-1.15.3.jar
+ /dir5/dir10/jsoup-1.18.1.jar
/dir5/httpclient5-5.0.jar
/dir5/httpclient5-5.2.1.jar
/dir5/httpcore5-5.0.jar
@@ -169,7 +231,26 @@ public class TestPurgeOperation {
/dir5/httpcore5-h2-5.0.jar
/dir5/httpcore5-h2-5.2.jar
/dir5/slf4j-api-1.7.25.jar
- /dir5/slf4j-api-1.7.36.jar""",
+ /dir5/slf4j-api-1.7.36.jar
+ /dir6
+ /dir6/json-20240205.jar
+ /dir6/json-20240303.jar
+ /dir7
+ /dir7/core-3.4.0.jar
+ /dir7/core-3.5.3.jar
+ /dir7/jai-imageio-core-1.4.0.jar
+ /dir7/javase-3.4.0.jar
+ /dir7/javase-3.5.3.jar
+ /dir7/jcommander-1.72.jar
+ /dir7/jcommander-1.82.jar
+ /dir8
+ /dir8/checker-qual-3.42.0.jar
+ /dir8/checker-qual-3.5.0.jar
+ /dir8/dir3
+ /dir8/dir3/commons-collections4-4.3.jar
+ /dir8/dir3/commons-collections4-4.4.jar
+ /dir8/postgresql-42.4.5.jar
+ /dir8/postgresql-42.7.3.jar""",
FileUtils.generateDirectoryListing(tmp));
var operation_purge = new PurgeOperation()
@@ -178,17 +259,27 @@ public class TestPurgeOperation {
.libProvidedDirectory(dir2)
.libRuntimeDirectory(dir3)
.libStandaloneDirectory(dir4)
- .libTestDirectory(dir5);
+ .libTestDirectory(dir5)
+ .libCompileModulesDirectory(dir6)
+ .libProvidedModulesDirectory(dir7)
+ .libRuntimeModulesDirectory(dir8)
+ .libStandaloneModulesDirectory(dir9)
+ .libTestModulesDirectory(dir10);
operation_purge.dependencies().scope(Scope.compile)
- .include(new Dependency("org.apache.commons", "commons-lang3", new VersionNumber(3, 12, 0)));
+ .include(new Dependency("org.apache.commons", "commons-lang3", new VersionNumber(3,12,0)))
+ .include(new Module("org.json", "json", new VersionNumber(20240303)));
operation_purge.dependencies().scope(Scope.provided)
- .include(new Dependency("jakarta.servlet", "jakarta.servlet-api", new VersionNumber(6, 0, 0)));
+ .include(new Dependency("commons-codec", "commons-codec", new VersionNumber(1,17,0)))
+ .include(new Module("com.google.zxing", "javase", new VersionNumber(3,5,3)));
operation_purge.dependencies().scope(Scope.runtime)
- .include(new Dependency("org.apache.commons", "commons-collections4", new VersionNumber(4, 4)));
+ .include(new Dependency("org.apache.commons", "commons-collections4", new VersionNumber(4,4)))
+ .include(new Module("org.postgresql", "postgresql", new VersionNumber(42,7,3)));
operation_purge.dependencies().scope(Scope.standalone)
- .include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2, 0, 6)));
+ .include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2,0,6)))
+ .include(new Module("org.eclipse.jetty.ee10", "jetty-ee10-servlet", new VersionNumber(12,0,11)));
operation_purge.dependencies().scope(Scope.test)
- .include(new Dependency("org.apache.httpcomponents.client5", "httpclient5", new VersionNumber(5, 2, 1)));
+ .include(new Dependency("org.apache.httpcomponents.client5", "httpclient5", new VersionNumber(5,2,1)))
+ .include(new Module("org.jsoup", "jsoup", new VersionNumber(1,18,1)));
operation_purge.execute();
@@ -196,19 +287,39 @@ public class TestPurgeOperation {
/dir1
/dir1/commons-lang3-3.12.0.jar
/dir2
- /dir2/jakarta.servlet-api-6.0.0.jar
- /dir3
- /dir3/commons-collections4-4.4.jar
+ /dir2/commons-codec-1.17.0.jar
/dir4
- /dir4/slf4j-api-2.0.6.jar
+ /dir4/dir9
+ /dir4/dir9/jakarta.servlet-api-6.0.0.jar
+ /dir4/dir9/jetty-ee10-servlet-12.0.11.jar
+ /dir4/dir9/jetty-http-12.0.11.jar
+ /dir4/dir9/jetty-io-12.0.11.jar
+ /dir4/dir9/jetty-security-12.0.11.jar
+ /dir4/dir9/jetty-server-12.0.11.jar
+ /dir4/dir9/jetty-session-12.0.11.jar
+ /dir4/dir9/jetty-util-12.0.11.jar
+ /dir4/dir9/slf4j-api-2.0.12.jar
/dir4/slf4j-simple-2.0.6.jar
/dir5
+ /dir5/dir10
+ /dir5/dir10/jsoup-1.18.1.jar
/dir5/httpclient5-5.2.1.jar
/dir5/httpcore5-5.2.jar
/dir5/httpcore5-h2-5.2.jar
- /dir5/slf4j-api-1.7.36.jar""",
+ /dir5/slf4j-api-1.7.36.jar
+ /dir6
+ /dir6/json-20240303.jar
+ /dir7
+ /dir7/core-3.5.3.jar
+ /dir7/jai-imageio-core-1.4.0.jar
+ /dir7/javase-3.5.3.jar
+ /dir7/jcommander-1.82.jar
+ /dir8
+ /dir8/checker-qual-3.42.0.jar
+ /dir8/dir3
+ /dir8/dir3/commons-collections4-4.4.jar
+ /dir8/postgresql-42.7.3.jar""",
FileUtils.generateDirectoryListing(tmp));
-
} finally {
FileUtils.deleteDirectory(tmp);
}
@@ -221,13 +332,14 @@ public class TestPurgeOperation {
try {
var dir1 = new File(tmp, "dir1");
var dir2 = new File(tmp, "dir2");
- var dir3 = new File(tmp, "dir3");
+ var dir8 = new File(tmp, "dir8");
+ var dir3 = new File(dir8, "dir3");
var dir4 = new File(tmp, "dir4");
var dir5 = new File(tmp, "dir5");
- dir1.mkdirs();
- dir3.mkdirs();
- dir4.mkdirs();
- dir5.mkdirs();
+ var dir6 = new File(tmp, "dir6");
+ var dir7 = new File(tmp, "dir7");
+ var dir9 = new File(dir4, "dir9");
+ var dir10 = new File(dir5, "dir10");
var operation_download1 = new DownloadOperation()
.repositories(List.of(Repository.MAVEN_CENTRAL))
@@ -236,18 +348,28 @@ public class TestPurgeOperation {
.libRuntimeDirectory(dir3)
.libStandaloneDirectory(dir4)
.libTestDirectory(dir5)
+ .libCompileModulesDirectory(dir6)
+ .libProvidedModulesDirectory(dir7)
+ .libRuntimeModulesDirectory(dir8)
+ .libStandaloneModulesDirectory(dir9)
+ .libTestModulesDirectory(dir10)
.downloadJavadoc(true)
.downloadSources(true);
operation_download1.dependencies().scope(Scope.compile)
- .include(new Dependency("org.apache.commons", "commons-lang3", new VersionNumber(3, 1)));
+ .include(new Dependency("org.apache.commons", "commons-lang3", new VersionNumber(3,1)))
+ .include(new Module("org.json", "json", new VersionNumber(20240205)));
operation_download1.dependencies().scope(Scope.provided)
- .include(new Dependency("jakarta.servlet", "jakarta.servlet-api", new VersionNumber(5, 0, 0)));
+ .include(new Dependency("commons-codec", "commons-codec", new VersionNumber(1,14)))
+ .include(new Module("com.google.zxing", "javase", new VersionNumber(3,4,0)));
operation_download1.dependencies().scope(Scope.runtime)
- .include(new Dependency("org.apache.commons", "commons-collections4", new VersionNumber(4, 3)));
+ .include(new Dependency("org.apache.commons", "commons-collections4", new VersionNumber(4,3)))
+ .include(new Module("org.postgresql", "postgresql", new VersionNumber(42,4,5)));
operation_download1.dependencies().scope(Scope.standalone)
- .include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2, 0, 0)));
+ .include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2,0,0)))
+ .include(new Module("org.eclipse.jetty.ee10", "jetty-ee10-servlet", new VersionNumber(12,0,6)));
operation_download1.dependencies().scope(Scope.test)
- .include(new Dependency("org.apache.httpcomponents.client5", "httpclient5", new VersionNumber(5, 0)));
+ .include(new Dependency("org.apache.httpcomponents.client5", "httpclient5", new VersionNumber(5,0)))
+ .include(new Module("org.jsoup", "jsoup", new VersionNumber(1,15,3)));
operation_download1.execute();
@@ -258,18 +380,28 @@ public class TestPurgeOperation {
.libRuntimeDirectory(dir3)
.libStandaloneDirectory(dir4)
.libTestDirectory(dir5)
+ .libCompileModulesDirectory(dir6)
+ .libProvidedModulesDirectory(dir7)
+ .libRuntimeModulesDirectory(dir8)
+ .libStandaloneModulesDirectory(dir9)
+ .libTestModulesDirectory(dir10)
.downloadJavadoc(true)
.downloadSources(true);
operation_download2.dependencies().scope(Scope.compile)
- .include(new Dependency("org.apache.commons", "commons-lang3", new VersionNumber(3, 12, 0)));
+ .include(new Dependency("org.apache.commons", "commons-lang3", new VersionNumber(3,12,0)))
+ .include(new Module("org.json", "json", new VersionNumber(20240303)));
operation_download2.dependencies().scope(Scope.provided)
- .include(new Dependency("jakarta.servlet", "jakarta.servlet-api", new VersionNumber(6, 0, 0)));
+ .include(new Dependency("commons-codec", "commons-codec", new VersionNumber(1,17,0)))
+ .include(new Module("com.google.zxing", "javase", new VersionNumber(3,5,3)));
operation_download2.dependencies().scope(Scope.runtime)
- .include(new Dependency("org.apache.commons", "commons-collections4", new VersionNumber(4, 4)));
+ .include(new Dependency("org.apache.commons", "commons-collections4", new VersionNumber(4,4)))
+ .include(new Module("org.postgresql", "postgresql", new VersionNumber(42,7,3)));
operation_download2.dependencies().scope(Scope.standalone)
- .include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2, 0, 6)));
+ .include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2,0,6)))
+ .include(new Module("org.eclipse.jetty.ee10", "jetty-ee10-servlet", new VersionNumber(12,0,11)));
operation_download2.dependencies().scope(Scope.test)
- .include(new Dependency("org.apache.httpcomponents.client5", "httpclient5", new VersionNumber(5, 2, 1)));
+ .include(new Dependency("org.apache.httpcomponents.client5", "httpclient5", new VersionNumber(5,2,1)))
+ .include(new Module("org.jsoup", "jsoup", new VersionNumber(1,18,1)));
operation_download2.execute();
@@ -282,26 +414,65 @@ public class TestPurgeOperation {
/dir1/commons-lang3-3.12.0-sources.jar
/dir1/commons-lang3-3.12.0.jar
/dir2
- /dir2/jakarta.servlet-api-5.0.0-javadoc.jar
- /dir2/jakarta.servlet-api-5.0.0-sources.jar
- /dir2/jakarta.servlet-api-5.0.0.jar
- /dir2/jakarta.servlet-api-6.0.0-javadoc.jar
- /dir2/jakarta.servlet-api-6.0.0-sources.jar
- /dir2/jakarta.servlet-api-6.0.0.jar
- /dir3
- /dir3/commons-collections4-4.3-javadoc.jar
- /dir3/commons-collections4-4.3-sources.jar
- /dir3/commons-collections4-4.3.jar
- /dir3/commons-collections4-4.4-javadoc.jar
- /dir3/commons-collections4-4.4-sources.jar
- /dir3/commons-collections4-4.4.jar
+ /dir2/commons-codec-1.14-javadoc.jar
+ /dir2/commons-codec-1.14-sources.jar
+ /dir2/commons-codec-1.14.jar
+ /dir2/commons-codec-1.17.0-javadoc.jar
+ /dir2/commons-codec-1.17.0-sources.jar
+ /dir2/commons-codec-1.17.0.jar
/dir4
- /dir4/slf4j-api-2.0.0-javadoc.jar
- /dir4/slf4j-api-2.0.0-sources.jar
- /dir4/slf4j-api-2.0.0.jar
- /dir4/slf4j-api-2.0.6-javadoc.jar
- /dir4/slf4j-api-2.0.6-sources.jar
- /dir4/slf4j-api-2.0.6.jar
+ /dir4/dir9
+ /dir4/dir9/jakarta.servlet-api-6.0.0-javadoc.jar
+ /dir4/dir9/jakarta.servlet-api-6.0.0-sources.jar
+ /dir4/dir9/jakarta.servlet-api-6.0.0.jar
+ /dir4/dir9/jetty-ee10-servlet-12.0.11-javadoc.jar
+ /dir4/dir9/jetty-ee10-servlet-12.0.11-sources.jar
+ /dir4/dir9/jetty-ee10-servlet-12.0.11.jar
+ /dir4/dir9/jetty-ee10-servlet-12.0.6-javadoc.jar
+ /dir4/dir9/jetty-ee10-servlet-12.0.6-sources.jar
+ /dir4/dir9/jetty-ee10-servlet-12.0.6.jar
+ /dir4/dir9/jetty-http-12.0.11-javadoc.jar
+ /dir4/dir9/jetty-http-12.0.11-sources.jar
+ /dir4/dir9/jetty-http-12.0.11.jar
+ /dir4/dir9/jetty-http-12.0.6-javadoc.jar
+ /dir4/dir9/jetty-http-12.0.6-sources.jar
+ /dir4/dir9/jetty-http-12.0.6.jar
+ /dir4/dir9/jetty-io-12.0.11-javadoc.jar
+ /dir4/dir9/jetty-io-12.0.11-sources.jar
+ /dir4/dir9/jetty-io-12.0.11.jar
+ /dir4/dir9/jetty-io-12.0.6-javadoc.jar
+ /dir4/dir9/jetty-io-12.0.6-sources.jar
+ /dir4/dir9/jetty-io-12.0.6.jar
+ /dir4/dir9/jetty-security-12.0.11-javadoc.jar
+ /dir4/dir9/jetty-security-12.0.11-sources.jar
+ /dir4/dir9/jetty-security-12.0.11.jar
+ /dir4/dir9/jetty-security-12.0.6-javadoc.jar
+ /dir4/dir9/jetty-security-12.0.6-sources.jar
+ /dir4/dir9/jetty-security-12.0.6.jar
+ /dir4/dir9/jetty-server-12.0.11-javadoc.jar
+ /dir4/dir9/jetty-server-12.0.11-sources.jar
+ /dir4/dir9/jetty-server-12.0.11.jar
+ /dir4/dir9/jetty-server-12.0.6-javadoc.jar
+ /dir4/dir9/jetty-server-12.0.6-sources.jar
+ /dir4/dir9/jetty-server-12.0.6.jar
+ /dir4/dir9/jetty-session-12.0.11-javadoc.jar
+ /dir4/dir9/jetty-session-12.0.11-sources.jar
+ /dir4/dir9/jetty-session-12.0.11.jar
+ /dir4/dir9/jetty-session-12.0.6-javadoc.jar
+ /dir4/dir9/jetty-session-12.0.6-sources.jar
+ /dir4/dir9/jetty-session-12.0.6.jar
+ /dir4/dir9/jetty-util-12.0.11-javadoc.jar
+ /dir4/dir9/jetty-util-12.0.11-sources.jar
+ /dir4/dir9/jetty-util-12.0.11.jar
+ /dir4/dir9/jetty-util-12.0.6-javadoc.jar
+ /dir4/dir9/jetty-util-12.0.6-sources.jar
+ /dir4/dir9/jetty-util-12.0.6.jar
+ /dir4/dir9/slf4j-api-2.0.12-javadoc.jar
+ /dir4/dir9/slf4j-api-2.0.12-sources.jar
+ /dir4/dir9/slf4j-api-2.0.12.jar
+ /dir4/dir9/slf4j-api-2.0.9-javadoc.jar
+ /dir4/dir9/slf4j-api-2.0.9-sources.jar
+ /dir4/dir9/slf4j-api-2.0.9.jar
/dir4/slf4j-simple-2.0.0-javadoc.jar
/dir4/slf4j-simple-2.0.0-sources.jar
/dir4/slf4j-simple-2.0.0.jar
@@ -312,6 +483,13 @@ public class TestPurgeOperation {
/dir5/commons-codec-1.13-javadoc.jar
/dir5/commons-codec-1.13-sources.jar
/dir5/commons-codec-1.13.jar
+ /dir5/dir10
+ /dir5/dir10/jsoup-1.15.3-javadoc.jar
+ /dir5/dir10/jsoup-1.15.3-sources.jar
+ /dir5/dir10/jsoup-1.15.3.jar
+ /dir5/dir10/jsoup-1.18.1-javadoc.jar
+ /dir5/dir10/jsoup-1.18.1-sources.jar
+ /dir5/dir10/jsoup-1.18.1.jar
/dir5/httpclient5-5.0-javadoc.jar
/dir5/httpclient5-5.0-sources.jar
/dir5/httpclient5-5.0.jar
@@ -335,7 +513,56 @@ public class TestPurgeOperation {
/dir5/slf4j-api-1.7.25.jar
/dir5/slf4j-api-1.7.36-javadoc.jar
/dir5/slf4j-api-1.7.36-sources.jar
- /dir5/slf4j-api-1.7.36.jar""",
+ /dir5/slf4j-api-1.7.36.jar
+ /dir6
+ /dir6/json-20240205-javadoc.jar
+ /dir6/json-20240205-sources.jar
+ /dir6/json-20240205.jar
+ /dir6/json-20240303-javadoc.jar
+ /dir6/json-20240303-sources.jar
+ /dir6/json-20240303.jar
+ /dir7
+ /dir7/core-3.4.0-javadoc.jar
+ /dir7/core-3.4.0-sources.jar
+ /dir7/core-3.4.0.jar
+ /dir7/core-3.5.3-javadoc.jar
+ /dir7/core-3.5.3-sources.jar
+ /dir7/core-3.5.3.jar
+ /dir7/jai-imageio-core-1.4.0-javadoc.jar
+ /dir7/jai-imageio-core-1.4.0-sources.jar
+ /dir7/jai-imageio-core-1.4.0.jar
+ /dir7/javase-3.4.0-javadoc.jar
+ /dir7/javase-3.4.0-sources.jar
+ /dir7/javase-3.4.0.jar
+ /dir7/javase-3.5.3-javadoc.jar
+ /dir7/javase-3.5.3-sources.jar
+ /dir7/javase-3.5.3.jar
+ /dir7/jcommander-1.72-javadoc.jar
+ /dir7/jcommander-1.72-sources.jar
+ /dir7/jcommander-1.72.jar
+ /dir7/jcommander-1.82-javadoc.jar
+ /dir7/jcommander-1.82-sources.jar
+ /dir7/jcommander-1.82.jar
+ /dir8
+ /dir8/checker-qual-3.42.0-javadoc.jar
+ /dir8/checker-qual-3.42.0-sources.jar
+ /dir8/checker-qual-3.42.0.jar
+ /dir8/checker-qual-3.5.0-javadoc.jar
+ /dir8/checker-qual-3.5.0-sources.jar
+ /dir8/checker-qual-3.5.0.jar
+ /dir8/dir3
+ /dir8/dir3/commons-collections4-4.3-javadoc.jar
+ /dir8/dir3/commons-collections4-4.3-sources.jar
+ /dir8/dir3/commons-collections4-4.3.jar
+ /dir8/dir3/commons-collections4-4.4-javadoc.jar
+ /dir8/dir3/commons-collections4-4.4-sources.jar
+ /dir8/dir3/commons-collections4-4.4.jar
+ /dir8/postgresql-42.4.5-javadoc.jar
+ /dir8/postgresql-42.4.5-sources.jar
+ /dir8/postgresql-42.4.5.jar
+ /dir8/postgresql-42.7.3-javadoc.jar
+ /dir8/postgresql-42.7.3-sources.jar
+ /dir8/postgresql-42.7.3.jar""",
FileUtils.generateDirectoryListing(tmp));
var operation_purge = new PurgeOperation()
@@ -345,18 +572,28 @@ public class TestPurgeOperation {
.libRuntimeDirectory(dir3)
.libStandaloneDirectory(dir4)
.libTestDirectory(dir5)
+ .libCompileModulesDirectory(dir6)
+ .libProvidedModulesDirectory(dir7)
+ .libRuntimeModulesDirectory(dir8)
+ .libStandaloneModulesDirectory(dir9)
+ .libTestModulesDirectory(dir10)
.preserveSources(true)
.preserveJavadoc(true);
operation_purge.dependencies().scope(Scope.compile)
- .include(new Dependency("org.apache.commons", "commons-lang3", new VersionNumber(3, 12, 0)));
+ .include(new Dependency("org.apache.commons", "commons-lang3", new VersionNumber(3,12,0)))
+ .include(new Module("org.json", "json", new VersionNumber(20240303)));
operation_purge.dependencies().scope(Scope.provided)
- .include(new Dependency("jakarta.servlet", "jakarta.servlet-api", new VersionNumber(6, 0, 0)));
+ .include(new Dependency("commons-codec", "commons-codec", new VersionNumber(1,17,0)))
+ .include(new Module("com.google.zxing", "javase", new VersionNumber(3,5,3)));
operation_purge.dependencies().scope(Scope.runtime)
- .include(new Dependency("org.apache.commons", "commons-collections4", new VersionNumber(4, 4)));
+ .include(new Dependency("org.apache.commons", "commons-collections4", new VersionNumber(4,4)))
+ .include(new Module("org.postgresql", "postgresql", new VersionNumber(42,7,3)));
operation_purge.dependencies().scope(Scope.standalone)
- .include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2, 0, 6)));
+ .include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2,0,6)))
+ .include(new Module("org.eclipse.jetty.ee10", "jetty-ee10-servlet", new VersionNumber(12,0,11)));
operation_purge.dependencies().scope(Scope.test)
- .include(new Dependency("org.apache.httpcomponents.client5", "httpclient5", new VersionNumber(5, 2, 1)));
+ .include(new Dependency("org.apache.httpcomponents.client5", "httpclient5", new VersionNumber(5,2,1)))
+ .include(new Module("org.jsoup", "jsoup", new VersionNumber(1,18,1)));
operation_purge.execute();
@@ -366,21 +603,46 @@ public class TestPurgeOperation {
/dir1/commons-lang3-3.12.0-sources.jar
/dir1/commons-lang3-3.12.0.jar
/dir2
- /dir2/jakarta.servlet-api-6.0.0-javadoc.jar
- /dir2/jakarta.servlet-api-6.0.0-sources.jar
- /dir2/jakarta.servlet-api-6.0.0.jar
- /dir3
- /dir3/commons-collections4-4.4-javadoc.jar
- /dir3/commons-collections4-4.4-sources.jar
- /dir3/commons-collections4-4.4.jar
+ /dir2/commons-codec-1.17.0-javadoc.jar
+ /dir2/commons-codec-1.17.0-sources.jar
+ /dir2/commons-codec-1.17.0.jar
/dir4
- /dir4/slf4j-api-2.0.6-javadoc.jar
- /dir4/slf4j-api-2.0.6-sources.jar
- /dir4/slf4j-api-2.0.6.jar
+ /dir4/dir9
+ /dir4/dir9/jakarta.servlet-api-6.0.0-javadoc.jar
+ /dir4/dir9/jakarta.servlet-api-6.0.0-sources.jar
+ /dir4/dir9/jakarta.servlet-api-6.0.0.jar
+ /dir4/dir9/jetty-ee10-servlet-12.0.11-javadoc.jar
+ /dir4/dir9/jetty-ee10-servlet-12.0.11-sources.jar
+ /dir4/dir9/jetty-ee10-servlet-12.0.11.jar
+ /dir4/dir9/jetty-http-12.0.11-javadoc.jar
+ /dir4/dir9/jetty-http-12.0.11-sources.jar
+ /dir4/dir9/jetty-http-12.0.11.jar
+ /dir4/dir9/jetty-io-12.0.11-javadoc.jar
+ /dir4/dir9/jetty-io-12.0.11-sources.jar
+ /dir4/dir9/jetty-io-12.0.11.jar
+ /dir4/dir9/jetty-security-12.0.11-javadoc.jar
+ /dir4/dir9/jetty-security-12.0.11-sources.jar
+ /dir4/dir9/jetty-security-12.0.11.jar
+ /dir4/dir9/jetty-server-12.0.11-javadoc.jar
+ /dir4/dir9/jetty-server-12.0.11-sources.jar
+ /dir4/dir9/jetty-server-12.0.11.jar
+ /dir4/dir9/jetty-session-12.0.11-javadoc.jar
+ /dir4/dir9/jetty-session-12.0.11-sources.jar
+ /dir4/dir9/jetty-session-12.0.11.jar
+ /dir4/dir9/jetty-util-12.0.11-javadoc.jar
+ /dir4/dir9/jetty-util-12.0.11-sources.jar
+ /dir4/dir9/jetty-util-12.0.11.jar
+ /dir4/dir9/slf4j-api-2.0.12-javadoc.jar
+ /dir4/dir9/slf4j-api-2.0.12-sources.jar
+ /dir4/dir9/slf4j-api-2.0.12.jar
/dir4/slf4j-simple-2.0.6-javadoc.jar
/dir4/slf4j-simple-2.0.6-sources.jar
/dir4/slf4j-simple-2.0.6.jar
/dir5
+ /dir5/dir10
+ /dir5/dir10/jsoup-1.18.1-javadoc.jar
+ /dir5/dir10/jsoup-1.18.1-sources.jar
+ /dir5/dir10/jsoup-1.18.1.jar
/dir5/httpclient5-5.2.1-javadoc.jar
/dir5/httpclient5-5.2.1-sources.jar
/dir5/httpclient5-5.2.1.jar
@@ -392,7 +654,35 @@ public class TestPurgeOperation {
/dir5/httpcore5-h2-5.2.jar
/dir5/slf4j-api-1.7.36-javadoc.jar
/dir5/slf4j-api-1.7.36-sources.jar
- /dir5/slf4j-api-1.7.36.jar""",
+ /dir5/slf4j-api-1.7.36.jar
+ /dir6
+ /dir6/json-20240303-javadoc.jar
+ /dir6/json-20240303-sources.jar
+ /dir6/json-20240303.jar
+ /dir7
+ /dir7/core-3.5.3-javadoc.jar
+ /dir7/core-3.5.3-sources.jar
+ /dir7/core-3.5.3.jar
+ /dir7/jai-imageio-core-1.4.0-javadoc.jar
+ /dir7/jai-imageio-core-1.4.0-sources.jar
+ /dir7/jai-imageio-core-1.4.0.jar
+ /dir7/javase-3.5.3-javadoc.jar
+ /dir7/javase-3.5.3-sources.jar
+ /dir7/javase-3.5.3.jar
+ /dir7/jcommander-1.82-javadoc.jar
+ /dir7/jcommander-1.82-sources.jar
+ /dir7/jcommander-1.82.jar
+ /dir8
+ /dir8/checker-qual-3.42.0-javadoc.jar
+ /dir8/checker-qual-3.42.0-sources.jar
+ /dir8/checker-qual-3.42.0.jar
+ /dir8/dir3
+ /dir8/dir3/commons-collections4-4.4-javadoc.jar
+ /dir8/dir3/commons-collections4-4.4-sources.jar
+ /dir8/dir3/commons-collections4-4.4.jar
+ /dir8/postgresql-42.7.3-javadoc.jar
+ /dir8/postgresql-42.7.3-sources.jar
+ /dir8/postgresql-42.7.3.jar""",
FileUtils.generateDirectoryListing(tmp));
operation_purge
@@ -403,17 +693,34 @@ public class TestPurgeOperation {
/dir1/commons-lang3-3.12.0-sources.jar
/dir1/commons-lang3-3.12.0.jar
/dir2
- /dir2/jakarta.servlet-api-6.0.0-sources.jar
- /dir2/jakarta.servlet-api-6.0.0.jar
- /dir3
- /dir3/commons-collections4-4.4-sources.jar
- /dir3/commons-collections4-4.4.jar
+ /dir2/commons-codec-1.17.0-sources.jar
+ /dir2/commons-codec-1.17.0.jar
/dir4
- /dir4/slf4j-api-2.0.6-sources.jar
- /dir4/slf4j-api-2.0.6.jar
+ /dir4/dir9
+ /dir4/dir9/jakarta.servlet-api-6.0.0-sources.jar
+ /dir4/dir9/jakarta.servlet-api-6.0.0.jar
+ /dir4/dir9/jetty-ee10-servlet-12.0.11-sources.jar
+ /dir4/dir9/jetty-ee10-servlet-12.0.11.jar
+ /dir4/dir9/jetty-http-12.0.11-sources.jar
+ /dir4/dir9/jetty-http-12.0.11.jar
+ /dir4/dir9/jetty-io-12.0.11-sources.jar
+ /dir4/dir9/jetty-io-12.0.11.jar
+ /dir4/dir9/jetty-security-12.0.11-sources.jar
+ /dir4/dir9/jetty-security-12.0.11.jar
+ /dir4/dir9/jetty-server-12.0.11-sources.jar
+ /dir4/dir9/jetty-server-12.0.11.jar
+ /dir4/dir9/jetty-session-12.0.11-sources.jar
+ /dir4/dir9/jetty-session-12.0.11.jar
+ /dir4/dir9/jetty-util-12.0.11-sources.jar
+ /dir4/dir9/jetty-util-12.0.11.jar
+ /dir4/dir9/slf4j-api-2.0.12-sources.jar
+ /dir4/dir9/slf4j-api-2.0.12.jar
/dir4/slf4j-simple-2.0.6-sources.jar
/dir4/slf4j-simple-2.0.6.jar
/dir5
+ /dir5/dir10
+ /dir5/dir10/jsoup-1.18.1-sources.jar
+ /dir5/dir10/jsoup-1.18.1.jar
/dir5/httpclient5-5.2.1-sources.jar
/dir5/httpclient5-5.2.1.jar
/dir5/httpcore5-5.2-sources.jar
@@ -421,7 +728,27 @@ public class TestPurgeOperation {
/dir5/httpcore5-h2-5.2-sources.jar
/dir5/httpcore5-h2-5.2.jar
/dir5/slf4j-api-1.7.36-sources.jar
- /dir5/slf4j-api-1.7.36.jar""",
+ /dir5/slf4j-api-1.7.36.jar
+ /dir6
+ /dir6/json-20240303-sources.jar
+ /dir6/json-20240303.jar
+ /dir7
+ /dir7/core-3.5.3-sources.jar
+ /dir7/core-3.5.3.jar
+ /dir7/jai-imageio-core-1.4.0-sources.jar
+ /dir7/jai-imageio-core-1.4.0.jar
+ /dir7/javase-3.5.3-sources.jar
+ /dir7/javase-3.5.3.jar
+ /dir7/jcommander-1.82-sources.jar
+ /dir7/jcommander-1.82.jar
+ /dir8
+ /dir8/checker-qual-3.42.0-sources.jar
+ /dir8/checker-qual-3.42.0.jar
+ /dir8/dir3
+ /dir8/dir3/commons-collections4-4.4-sources.jar
+ /dir8/dir3/commons-collections4-4.4.jar
+ /dir8/postgresql-42.7.3-sources.jar
+ /dir8/postgresql-42.7.3.jar""",
FileUtils.generateDirectoryListing(tmp));
operation_purge
@@ -431,17 +758,38 @@ public class TestPurgeOperation {
/dir1
/dir1/commons-lang3-3.12.0.jar
/dir2
- /dir2/jakarta.servlet-api-6.0.0.jar
- /dir3
- /dir3/commons-collections4-4.4.jar
+ /dir2/commons-codec-1.17.0.jar
/dir4
- /dir4/slf4j-api-2.0.6.jar
+ /dir4/dir9
+ /dir4/dir9/jakarta.servlet-api-6.0.0.jar
+ /dir4/dir9/jetty-ee10-servlet-12.0.11.jar
+ /dir4/dir9/jetty-http-12.0.11.jar
+ /dir4/dir9/jetty-io-12.0.11.jar
+ /dir4/dir9/jetty-security-12.0.11.jar
+ /dir4/dir9/jetty-server-12.0.11.jar
+ /dir4/dir9/jetty-session-12.0.11.jar
+ /dir4/dir9/jetty-util-12.0.11.jar
+ /dir4/dir9/slf4j-api-2.0.12.jar
/dir4/slf4j-simple-2.0.6.jar
/dir5
+ /dir5/dir10
+ /dir5/dir10/jsoup-1.18.1.jar
/dir5/httpclient5-5.2.1.jar
/dir5/httpcore5-5.2.jar
/dir5/httpcore5-h2-5.2.jar
- /dir5/slf4j-api-1.7.36.jar""",
+ /dir5/slf4j-api-1.7.36.jar
+ /dir6
+ /dir6/json-20240303.jar
+ /dir7
+ /dir7/core-3.5.3.jar
+ /dir7/jai-imageio-core-1.4.0.jar
+ /dir7/javase-3.5.3.jar
+ /dir7/jcommander-1.82.jar
+ /dir8
+ /dir8/checker-qual-3.42.0.jar
+ /dir8/dir3
+ /dir8/dir3/commons-collections4-4.4.jar
+ /dir8/postgresql-42.7.3.jar""",
FileUtils.generateDirectoryListing(tmp));
} finally {
FileUtils.deleteDirectory(tmp);
@@ -465,29 +813,39 @@ public class TestPurgeOperation {
project1.createProjectStructure();
project1.repositories().add(Repository.MAVEN_CENTRAL);
project1.dependencies().scope(Scope.compile)
- .include(new Dependency("org.apache.commons", "commons-lang3", new VersionNumber(3, 1)));
+ .include(new Dependency("org.apache.commons", "commons-lang3", new VersionNumber(3,1)))
+ .include(new Module("org.json", "json", new VersionNumber(20240205)));
project1.dependencies().scope(Scope.provided)
- .include(new Dependency("jakarta.servlet", "jakarta.servlet-api", new VersionNumber(5, 0, 0)));
+ .include(new Dependency("commons-codec", "commons-codec", new VersionNumber(1,14)))
+ .include(new Module("com.google.zxing", "javase", new VersionNumber(3,4,0)));
project1.dependencies().scope(Scope.runtime)
- .include(new Dependency("org.apache.commons", "commons-collections4", new VersionNumber(4, 3)));
+ .include(new Dependency("org.apache.commons", "commons-collections4", new VersionNumber(4,3)))
+ .include(new Module("org.postgresql", "postgresql", new VersionNumber(42,4,5)));
project1.dependencies().scope(Scope.standalone)
- .include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2, 0, 0)));
+ .include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2,0,0)))
+ .include(new Module("org.eclipse.jetty.ee10", "jetty-ee10-servlet", new VersionNumber(12,0,6)));
project1.dependencies().scope(Scope.test)
- .include(new Dependency("org.apache.httpcomponents.client5", "httpclient5", new VersionNumber(5, 0)));
+ .include(new Dependency("org.apache.httpcomponents.client5", "httpclient5", new VersionNumber(5,0)))
+ .include(new Module("org.jsoup", "jsoup", new VersionNumber(1,15,3)));
var project2 = new TestProject(tmp);
project2.createProjectStructure();
project2.repositories().add(Repository.MAVEN_CENTRAL);
project2.dependencies().scope(Scope.compile)
- .include(new Dependency("org.apache.commons", "commons-lang3", new VersionNumber(3, 12, 0)));
+ .include(new Dependency("org.apache.commons", "commons-lang3", new VersionNumber(3,12,0)))
+ .include(new Module("org.json", "json", new VersionNumber(20240303)));
project2.dependencies().scope(Scope.provided)
- .include(new Dependency("jakarta.servlet", "jakarta.servlet-api", new VersionNumber(6, 0, 0)));
+ .include(new Dependency("commons-codec", "commons-codec", new VersionNumber(1,17,0)))
+ .include(new Module("com.google.zxing", "javase", new VersionNumber(3,5,3)));
project2.dependencies().scope(Scope.runtime)
- .include(new Dependency("org.apache.commons", "commons-collections4", new VersionNumber(4, 4)));
+ .include(new Dependency("org.apache.commons", "commons-collections4", new VersionNumber(4,4)))
+ .include(new Module("org.postgresql", "postgresql", new VersionNumber(42,7,3)));
project2.dependencies().scope(Scope.standalone)
- .include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2, 0, 6)));
+ .include(new Dependency("org.slf4j", "slf4j-simple", new VersionNumber(2,0,6)))
+ .include(new Module("org.eclipse.jetty.ee10", "jetty-ee10-servlet", new VersionNumber(12,0,11)));
project2.dependencies().scope(Scope.test)
- .include(new Dependency("org.apache.httpcomponents.client5", "httpclient5", new VersionNumber(5, 2, 1)));
+ .include(new Dependency("org.apache.httpcomponents.client5", "httpclient5", new VersionNumber(5,2,1)))
+ .include(new Module("org.jsoup", "jsoup", new VersionNumber(1,18,1)));
new DownloadOperation()
.fromProject(project1)
@@ -504,21 +862,81 @@ public class TestPurgeOperation {
/lib/compile/commons-lang3-3.1.jar
/lib/compile/commons-lang3-3.12.0-sources.jar
/lib/compile/commons-lang3-3.12.0.jar
+ /lib/compile/modules
+ /lib/compile/modules/json-20240205-sources.jar
+ /lib/compile/modules/json-20240205.jar
+ /lib/compile/modules/json-20240303-sources.jar
+ /lib/compile/modules/json-20240303.jar
/lib/provided
- /lib/provided/jakarta.servlet-api-5.0.0-sources.jar
- /lib/provided/jakarta.servlet-api-5.0.0.jar
- /lib/provided/jakarta.servlet-api-6.0.0-sources.jar
- /lib/provided/jakarta.servlet-api-6.0.0.jar
+ /lib/provided/commons-codec-1.14-sources.jar
+ /lib/provided/commons-codec-1.14.jar
+ /lib/provided/commons-codec-1.17.0-sources.jar
+ /lib/provided/commons-codec-1.17.0.jar
+ /lib/provided/modules
+ /lib/provided/modules/core-3.4.0-sources.jar
+ /lib/provided/modules/core-3.4.0.jar
+ /lib/provided/modules/core-3.5.3-sources.jar
+ /lib/provided/modules/core-3.5.3.jar
+ /lib/provided/modules/jai-imageio-core-1.4.0-sources.jar
+ /lib/provided/modules/jai-imageio-core-1.4.0.jar
+ /lib/provided/modules/javase-3.4.0-sources.jar
+ /lib/provided/modules/javase-3.4.0.jar
+ /lib/provided/modules/javase-3.5.3-sources.jar
+ /lib/provided/modules/javase-3.5.3.jar
+ /lib/provided/modules/jcommander-1.72-sources.jar
+ /lib/provided/modules/jcommander-1.72.jar
+ /lib/provided/modules/jcommander-1.82-sources.jar
+ /lib/provided/modules/jcommander-1.82.jar
/lib/runtime
/lib/runtime/commons-collections4-4.3-sources.jar
/lib/runtime/commons-collections4-4.3.jar
/lib/runtime/commons-collections4-4.4-sources.jar
/lib/runtime/commons-collections4-4.4.jar
+ /lib/runtime/modules
+ /lib/runtime/modules/checker-qual-3.42.0-sources.jar
+ /lib/runtime/modules/checker-qual-3.42.0.jar
+ /lib/runtime/modules/checker-qual-3.5.0-sources.jar
+ /lib/runtime/modules/checker-qual-3.5.0.jar
+ /lib/runtime/modules/postgresql-42.4.5-sources.jar
+ /lib/runtime/modules/postgresql-42.4.5.jar
+ /lib/runtime/modules/postgresql-42.7.3-sources.jar
+ /lib/runtime/modules/postgresql-42.7.3.jar
/lib/standalone
- /lib/standalone/slf4j-api-2.0.0-sources.jar
- /lib/standalone/slf4j-api-2.0.0.jar
- /lib/standalone/slf4j-api-2.0.6-sources.jar
- /lib/standalone/slf4j-api-2.0.6.jar
+ /lib/standalone/modules
+ /lib/standalone/modules/jakarta.servlet-api-6.0.0-sources.jar
+ /lib/standalone/modules/jakarta.servlet-api-6.0.0.jar
+ /lib/standalone/modules/jetty-ee10-servlet-12.0.11-sources.jar
+ /lib/standalone/modules/jetty-ee10-servlet-12.0.11.jar
+ /lib/standalone/modules/jetty-ee10-servlet-12.0.6-sources.jar
+ /lib/standalone/modules/jetty-ee10-servlet-12.0.6.jar
+ /lib/standalone/modules/jetty-http-12.0.11-sources.jar
+ /lib/standalone/modules/jetty-http-12.0.11.jar
+ /lib/standalone/modules/jetty-http-12.0.6-sources.jar
+ /lib/standalone/modules/jetty-http-12.0.6.jar
+ /lib/standalone/modules/jetty-io-12.0.11-sources.jar
+ /lib/standalone/modules/jetty-io-12.0.11.jar
+ /lib/standalone/modules/jetty-io-12.0.6-sources.jar
+ /lib/standalone/modules/jetty-io-12.0.6.jar
+ /lib/standalone/modules/jetty-security-12.0.11-sources.jar
+ /lib/standalone/modules/jetty-security-12.0.11.jar
+ /lib/standalone/modules/jetty-security-12.0.6-sources.jar
+ /lib/standalone/modules/jetty-security-12.0.6.jar
+ /lib/standalone/modules/jetty-server-12.0.11-sources.jar
+ /lib/standalone/modules/jetty-server-12.0.11.jar
+ /lib/standalone/modules/jetty-server-12.0.6-sources.jar
+ /lib/standalone/modules/jetty-server-12.0.6.jar
+ /lib/standalone/modules/jetty-session-12.0.11-sources.jar
+ /lib/standalone/modules/jetty-session-12.0.11.jar
+ /lib/standalone/modules/jetty-session-12.0.6-sources.jar
+ /lib/standalone/modules/jetty-session-12.0.6.jar
+ /lib/standalone/modules/jetty-util-12.0.11-sources.jar
+ /lib/standalone/modules/jetty-util-12.0.11.jar
+ /lib/standalone/modules/jetty-util-12.0.6-sources.jar
+ /lib/standalone/modules/jetty-util-12.0.6.jar
+ /lib/standalone/modules/slf4j-api-2.0.12-sources.jar
+ /lib/standalone/modules/slf4j-api-2.0.12.jar
+ /lib/standalone/modules/slf4j-api-2.0.9-sources.jar
+ /lib/standalone/modules/slf4j-api-2.0.9.jar
/lib/standalone/slf4j-simple-2.0.0-sources.jar
/lib/standalone/slf4j-simple-2.0.0.jar
/lib/standalone/slf4j-simple-2.0.6-sources.jar
@@ -538,6 +956,11 @@ public class TestPurgeOperation {
/lib/test/httpcore5-h2-5.0.jar
/lib/test/httpcore5-h2-5.2-sources.jar
/lib/test/httpcore5-h2-5.2.jar
+ /lib/test/modules
+ /lib/test/modules/jsoup-1.15.3-sources.jar
+ /lib/test/modules/jsoup-1.15.3.jar
+ /lib/test/modules/jsoup-1.18.1-sources.jar
+ /lib/test/modules/jsoup-1.18.1.jar
/lib/test/slf4j-api-1.7.25-sources.jar
/lib/test/slf4j-api-1.7.25.jar
/lib/test/slf4j-api-1.7.36-sources.jar
@@ -565,15 +988,49 @@ public class TestPurgeOperation {
/lib/compile
/lib/compile/commons-lang3-3.12.0-sources.jar
/lib/compile/commons-lang3-3.12.0.jar
+ /lib/compile/modules
+ /lib/compile/modules/json-20240303-sources.jar
+ /lib/compile/modules/json-20240303.jar
/lib/provided
- /lib/provided/jakarta.servlet-api-6.0.0-sources.jar
- /lib/provided/jakarta.servlet-api-6.0.0.jar
+ /lib/provided/commons-codec-1.17.0-sources.jar
+ /lib/provided/commons-codec-1.17.0.jar
+ /lib/provided/modules
+ /lib/provided/modules/core-3.5.3-sources.jar
+ /lib/provided/modules/core-3.5.3.jar
+ /lib/provided/modules/jai-imageio-core-1.4.0-sources.jar
+ /lib/provided/modules/jai-imageio-core-1.4.0.jar
+ /lib/provided/modules/javase-3.5.3-sources.jar
+ /lib/provided/modules/javase-3.5.3.jar
+ /lib/provided/modules/jcommander-1.82-sources.jar
+ /lib/provided/modules/jcommander-1.82.jar
/lib/runtime
/lib/runtime/commons-collections4-4.4-sources.jar
/lib/runtime/commons-collections4-4.4.jar
+ /lib/runtime/modules
+ /lib/runtime/modules/checker-qual-3.42.0-sources.jar
+ /lib/runtime/modules/checker-qual-3.42.0.jar
+ /lib/runtime/modules/postgresql-42.7.3-sources.jar
+ /lib/runtime/modules/postgresql-42.7.3.jar
/lib/standalone
- /lib/standalone/slf4j-api-2.0.6-sources.jar
- /lib/standalone/slf4j-api-2.0.6.jar
+ /lib/standalone/modules
+ /lib/standalone/modules/jakarta.servlet-api-6.0.0-sources.jar
+ /lib/standalone/modules/jakarta.servlet-api-6.0.0.jar
+ /lib/standalone/modules/jetty-ee10-servlet-12.0.11-sources.jar
+ /lib/standalone/modules/jetty-ee10-servlet-12.0.11.jar
+ /lib/standalone/modules/jetty-http-12.0.11-sources.jar
+ /lib/standalone/modules/jetty-http-12.0.11.jar
+ /lib/standalone/modules/jetty-io-12.0.11-sources.jar
+ /lib/standalone/modules/jetty-io-12.0.11.jar
+ /lib/standalone/modules/jetty-security-12.0.11-sources.jar
+ /lib/standalone/modules/jetty-security-12.0.11.jar
+ /lib/standalone/modules/jetty-server-12.0.11-sources.jar
+ /lib/standalone/modules/jetty-server-12.0.11.jar
+ /lib/standalone/modules/jetty-session-12.0.11-sources.jar
+ /lib/standalone/modules/jetty-session-12.0.11.jar
+ /lib/standalone/modules/jetty-util-12.0.11-sources.jar
+ /lib/standalone/modules/jetty-util-12.0.11.jar
+ /lib/standalone/modules/slf4j-api-2.0.12-sources.jar
+ /lib/standalone/modules/slf4j-api-2.0.12.jar
/lib/standalone/slf4j-simple-2.0.6-sources.jar
/lib/standalone/slf4j-simple-2.0.6.jar
/lib/test
@@ -583,6 +1040,9 @@ public class TestPurgeOperation {
/lib/test/httpcore5-5.2.jar
/lib/test/httpcore5-h2-5.2-sources.jar
/lib/test/httpcore5-h2-5.2.jar
+ /lib/test/modules
+ /lib/test/modules/jsoup-1.18.1-sources.jar
+ /lib/test/modules/jsoup-1.18.1.jar
/lib/test/slf4j-api-1.7.36-sources.jar
/lib/test/slf4j-api-1.7.36.jar
/src