2
0
Fork 0
mirror of https://github.com/ethauvin/bld.git synced 2025-04-25 08:17:11 -07:00

Include provided and test scopes in Dependency Tree operation.

This commit is contained in:
Geert Bevin 2023-08-27 19:41:22 -04:00
parent 80a89b7343
commit 88aa78f3b5
2 changed files with 187 additions and 2 deletions

View file

@ -10,8 +10,7 @@ import rife.bld.dependencies.*;
import java.util.ArrayList;
import java.util.List;
import static rife.bld.dependencies.Scope.compile;
import static rife.bld.dependencies.Scope.runtime;
import static rife.bld.dependencies.Scope.*;
/**
* Transitively generates a hierarchical tree of dependencies.
@ -32,15 +31,23 @@ public class DependencyTreeOperation extends AbstractOperation<DependencyTreeOpe
*/
public void execute() {
var compile_tree = executeGenerateCompileDependencies();
var provided_tree = executeGenerateProvidedDependencies();
var runtime_tree = executeGenerateRuntimeDependencies();
var test_tree = executeGenerateTestDependencies();
dependencyTree_.setLength(0);
dependencyTree_.append(compile_tree);
dependencyTree_.append(System.lineSeparator());
dependencyTree_.append(provided_tree);
dependencyTree_.append(System.lineSeparator());
dependencyTree_.append(runtime_tree);
dependencyTree_.append(System.lineSeparator());
dependencyTree_.append(test_tree);
dependencyTree_.append(System.lineSeparator());
System.out.println(compile_tree);
System.out.println(provided_tree);
System.out.println(runtime_tree);
System.out.println(test_tree);
}
/**
@ -56,6 +63,19 @@ public class DependencyTreeOperation extends AbstractOperation<DependencyTreeOpe
return "compile:" + System.lineSeparator() + compile_tree;
}
/**
* Part of the {@link #execute} operation, generates the tree for the provided scope.
*
* @since 1.7.3
*/
protected String executeGenerateProvidedDependencies() {
var provided_tree = dependencies().scope(provided).generateTransitiveDependencyTree(artifactRetriever(), repositories(), compile, runtime);
if (provided_tree.isEmpty()) {
provided_tree = "no dependencies" + System.lineSeparator();
}
return "provided:" + System.lineSeparator() + provided_tree;
}
/**
* Part of the {@link #execute} operation, generates the tree for the runtime scope.
*
@ -69,6 +89,19 @@ public class DependencyTreeOperation extends AbstractOperation<DependencyTreeOpe
return "runtime:" + System.lineSeparator() + runtime_tree;
}
/**
* Part of the {@link #execute} operation, generates the tree for the test scope.
*
* @since 1.7.3
*/
protected String executeGenerateTestDependencies() {
var test_tree = dependencies().scope(test).generateTransitiveDependencyTree(artifactRetriever(), repositories(), compile, runtime);
if (test_tree.isEmpty()) {
test_tree = "no dependencies" + System.lineSeparator();
}
return "test:" + System.lineSeparator() + test_tree;
}
/**
* Configures a dependency tree operation from a {@link BaseProject}.

View file

@ -109,10 +109,16 @@ public class TestDependencyTreeOperation {
com.google.zxing:javase:3.5.1
com.google.zxing:core:3.5.1
com.beust:jcommander:1.82
provided:
no dependencies
runtime:
org.postgresql:postgresql:42.6.0
org.checkerframework:checker-qual:3.31.0
test:
no dependencies
""", tree);
} finally {
@ -120,6 +126,74 @@ public class TestDependencyTreeOperation {
}
}
@Test
void testExecutionProvidedTest()
throws Exception {
var tmp = Files.createTempDirectory("test").toFile();
try {
var operation = new DependencyTreeOperation()
.repositories(List.of(Repository.MAVEN_CENTRAL));
operation.dependencies().scope(Scope.provided)
.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 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", VersionNumber.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 Dependency("net.imagej", "ij", VersionNumber.parse("1.54d")));
operation.execute();
var tree = operation.dependencyTree();
assertEquals("""
compile:
no dependencies
provided:
org.jsoup:jsoup:1.16.1
jakarta.servlet:jakarta.servlet-api:5.0.0
org.eclipse.jetty:jetty-server:11.0.15
org.eclipse.jetty:jetty-http:11.0.15
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.apache.tomcat.embed:tomcat-embed-core:10.1.12
org.apache.tomcat:tomcat-annotations-api:10.1.12
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
runtime:
no dependencies
test:
org.jsoup:jsoup:1.16.1
jakarta.servlet:jakarta.servlet-api:5.0.0
org.eclipse.jetty:jetty-server:11.0.15
org.eclipse.jetty:jetty-http:11.0.15
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
net.imagej:ij:1.54d
""", tree);
} finally {
FileUtils.deleteDirectory(tmp);
}
}
static class TestProject extends WebProject {
public TestProject(File tmp) {
workDirectory = tmp;
@ -184,14 +258,92 @@ public class TestDependencyTreeOperation {
com.google.zxing:javase:3.5.1
com.google.zxing:core:3.5.1
com.beust:jcommander:1.82
provided:
no dependencies
runtime:
org.postgresql:postgresql:42.6.0
org.checkerframework:checker-qual:3.31.0
test:
no dependencies
""", tree);
} finally {
FileUtils.deleteDirectory(tmp);
}
}
@Test
void testFromProjectProvidedTest()
throws Exception {
var tmp = Files.createTempDirectory("test").toFile();
try {
var project = new TestProject(tmp);
project.createProjectStructure();
project.repositories().add(Repository.MAVEN_CENTRAL);
project.dependencies().scope(Scope.provided)
.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 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", VersionNumber.parse("1.54d")));
project.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 Dependency("net.imagej", "ij", VersionNumber.parse("1.54d")));
var operation = new DependencyTreeOperation()
.fromProject(project);
operation.execute();
var tree = operation.dependencyTree();
assertEquals("""
compile:
no dependencies
provided:
org.jsoup:jsoup:1.16.1
jakarta.servlet:jakarta.servlet-api:5.0.0
org.eclipse.jetty:jetty-server:11.0.15
org.eclipse.jetty:jetty-http:11.0.15
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.apache.tomcat.embed:tomcat-embed-core:10.1.12
org.apache.tomcat:tomcat-annotations-api:10.1.12
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
runtime:
no dependencies
test:
org.jsoup:jsoup:1.16.1
jakarta.servlet:jakarta.servlet-api:5.0.0
org.eclipse.jetty:jetty-server:11.0.15
org.eclipse.jetty:jetty-http:11.0.15
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
net.imagej:ij:1.54d
""", tree);
} finally {
FileUtils.deleteDirectory(tmp);
}
}
}