aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cloud-tenant-base-dependencies-enforcer/pom.xml170
-rw-r--r--container-dependencies-enforcer/pom.xml52
-rw-r--r--vespa-enforcer-extensions/src/main/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependencies.java33
-rw-r--r--vespa-enforcer-extensions/src/test/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesTest.java56
4 files changed, 179 insertions, 132 deletions
diff --git a/cloud-tenant-base-dependencies-enforcer/pom.xml b/cloud-tenant-base-dependencies-enforcer/pom.xml
index f571b0528ad..907b249f726 100644
--- a/cloud-tenant-base-dependencies-enforcer/pom.xml
+++ b/cloud-tenant-base-dependencies-enforcer/pom.xml
@@ -75,98 +75,98 @@
<enforceDependencies implementation="com.yahoo.vespa.maven.plugin.enforcer.EnforceDependencies">
<allowed>
<!-- MUST BE KEPT IN SYNC WITH container-dependencies-enforcer pom -->
- <include>aopalliance:aopalliance:${aopalliance.version}:jar:provided</include>
- <include>com.fasterxml.jackson.core:jackson-annotations:${jackson2.version}:jar:provided</include>
- <include>com.fasterxml.jackson.core:jackson-core:${jackson2.version}:jar:provided</include>
- <include>com.fasterxml.jackson.core:jackson-databind:${jackson-databind.version}:jar:provided</include>
- <include>com.fasterxml.jackson.datatype:jackson-datatype-jdk8:${jackson2.version}:jar:provided</include>
- <include>com.fasterxml.jackson.datatype:jackson-datatype-jsr310:${jackson2.version}:jar:provided</include>
+ <include>aopalliance:aopalliance:${aopalliance.version}:provided</include>
+ <include>com.fasterxml.jackson.core:jackson-annotations:${jackson2.version}:provided</include>
+ <include>com.fasterxml.jackson.core:jackson-core:${jackson2.version}:provided</include>
+ <include>com.fasterxml.jackson.core:jackson-databind:${jackson-databind.version}:provided</include>
+ <include>com.fasterxml.jackson.datatype:jackson-datatype-jdk8:${jackson2.version}:provided</include>
+ <include>com.fasterxml.jackson.datatype:jackson-datatype-jsr310:${jackson2.version}:provided</include>
<!-- Guava with its internal dependencies -->
- <include>com.google.guava:guava:${guava.version}:jar:provided</include>
- <include>com.google.errorprone:error_prone_annotations:2.2.0:jar:provided</include>
- <include>com.google.guava:failureaccess:1.0.1:jar:provided</include>
- <include>com.google.j2objc:j2objc-annotations:1.1:jar:provided</include>
+ <include>com.google.guava:guava:${guava.version}:provided</include>
+ <include>com.google.errorprone:error_prone_annotations:2.2.0:provided</include>
+ <include>com.google.guava:failureaccess:1.0.1:provided</include>
+ <include>com.google.j2objc:j2objc-annotations:1.1:provided</include>
- <include>com.google.inject:guice:${guice.version}:jar:provided:no_aop</include>
- <include>com.sun.activation:javax.activation:1.2.0:jar:provided</include>
- <include>com.sun.xml.bind:jaxb-core:${jaxb.version}:jar:provided</include>
- <include>com.sun.xml.bind:jaxb-impl:${jaxb.version}:jar:provided</include>
- <include>commons-logging:commons-logging:1.2:jar:provided</include>
- <include>javax.inject:javax.inject:${javax.inject.version}:jar:provided</include>
- <include>javax.servlet:javax.servlet-api:${javax.servlet-api.version}:jar:provided</include>
- <include>javax.ws.rs:javax.ws.rs-api:${javax.ws.rs-api.version}:jar:provided</include>
- <include>javax.xml.bind:jaxb-api:${jaxb.version}:jar:provided</include>
- <include>org.slf4j:jcl-over-slf4j:${slf4j.version}:jar:provided</include>
- <include>org.slf4j:log4j-over-slf4j:${slf4j.version}:jar:provided</include>
- <include>org.slf4j:slf4j-api:${slf4j.version}:jar:provided</include>
- <include>org.slf4j:slf4j-jdk14:${slf4j.version}:jar:provided</include>
- <include>xml-apis:xml-apis:${xml-apis.version}:jar:provided</include>
+ <include>com.google.inject:guice:jar:no_aop:${guice.version}:provided</include>
+ <include>com.sun.activation:javax.activation:1.2.0:provided</include>
+ <include>com.sun.xml.bind:jaxb-core:${jaxb.version}:provided</include>
+ <include>com.sun.xml.bind:jaxb-impl:${jaxb.version}:provided</include>
+ <include>commons-logging:commons-logging:1.2:provided</include>
+ <include>javax.inject:javax.inject:${javax.inject.version}:provided</include>
+ <include>javax.servlet:javax.servlet-api:${javax.servlet-api.version}:provided</include>
+ <include>javax.ws.rs:javax.ws.rs-api:${javax.ws.rs-api.version}:provided</include>
+ <include>javax.xml.bind:jaxb-api:${jaxb.version}:provided</include>
+ <include>org.slf4j:jcl-over-slf4j:${slf4j.version}:provided</include>
+ <include>org.slf4j:log4j-over-slf4j:${slf4j.version}:provided</include>
+ <include>org.slf4j:slf4j-api:${slf4j.version}:provided</include>
+ <include>org.slf4j:slf4j-jdk14:${slf4j.version}:provided</include>
+ <include>xml-apis:xml-apis:${xml-apis.version}:provided</include>
<!-- Vespa provided dependencies -->
- <include>com.yahoo.vespa:annotations:*:jar:provided</include>
- <include>com.yahoo.vespa:component:*:jar:provided</include>
- <include>com.yahoo.vespa:config-bundle:*:jar:provided</include>
- <include>com.yahoo.vespa:config-lib:*:jar:provided</include>
- <include>com.yahoo.vespa:config:*:jar:provided</include>
- <include>com.yahoo.vespa:configdefinitions:*:jar:provided</include>
- <include>com.yahoo.vespa:configgen:*:jar:provided</include>
- <include>com.yahoo.vespa:container-core:*:jar:provided</include>
- <include>com.yahoo.vespa:container-dev:*:jar:provided</include>
- <include>com.yahoo.vespa:container-disc:*:jar:provided</include>
- <include>com.yahoo.vespa:container-documentapi:*:jar:provided</include>
- <include>com.yahoo.vespa:container-messagebus:*:jar:provided</include>
- <include>com.yahoo.vespa:container-search-and-docproc:*:jar:provided</include>
- <include>com.yahoo.vespa:container-search:*:jar:provided</include>
- <include>com.yahoo.vespa:container:*:jar:provided</include>
- <include>com.yahoo.vespa:defaults:*:jar:provided</include>
- <include>com.yahoo.vespa:docproc:*:jar:provided</include>
- <include>com.yahoo.vespa:document:*:jar:provided</include>
- <include>com.yahoo.vespa:documentapi:*:jar:provided</include>
- <include>com.yahoo.vespa:fileacquirer:*:jar:provided</include>
- <include>com.yahoo.vespa:fsa:*:jar:provided</include>
- <include>com.yahoo.vespa:hosted-zone-api:*:jar:provided</include>
- <include>com.yahoo.vespa:http-utils:*:jar:provided</include>
- <include>com.yahoo.vespa:jdisc_core:*:jar:provided</include>
- <include>com.yahoo.vespa:jrt:*:jar:provided</include>
- <include>com.yahoo.vespa:linguistics:*:jar:provided</include>
- <include>com.yahoo.vespa:messagebus:*:jar:provided</include>
- <include>com.yahoo.vespa:model-evaluation:*:jar:provided</include>
- <include>com.yahoo.vespa:predicate-search-core:*:jar:provided</include>
- <include>com.yahoo.vespa:provided-dependencies:*:jar:provided</include>
- <include>com.yahoo.vespa:searchcore:*:jar:provided</include>
- <include>com.yahoo.vespa:searchlib:*:jar:provided</include>
- <include>com.yahoo.vespa:security-utils:*:jar:provided</include>
- <include>com.yahoo.vespa:vdslib:*:jar:provided</include>
- <include>com.yahoo.vespa:vespa-3party-bundles:*:pom:provided</include>
- <include>com.yahoo.vespa:vespaclient-container-plugin:*:jar:provided</include>
- <include>com.yahoo.vespa:vespajlib:*:jar:provided</include>
- <include>com.yahoo.vespa:vespalog:*:jar:provided</include>
+ <include>com.yahoo.vespa:annotations:*:provided</include>
+ <include>com.yahoo.vespa:component:*:provided</include>
+ <include>com.yahoo.vespa:config-bundle:*:provided</include>
+ <include>com.yahoo.vespa:config-lib:*:provided</include>
+ <include>com.yahoo.vespa:config:*:provided</include>
+ <include>com.yahoo.vespa:configdefinitions:*:provided</include>
+ <include>com.yahoo.vespa:configgen:*:provided</include>
+ <include>com.yahoo.vespa:container-core:*:provided</include>
+ <include>com.yahoo.vespa:container-dev:*:provided</include>
+ <include>com.yahoo.vespa:container-disc:*:provided</include>
+ <include>com.yahoo.vespa:container-documentapi:*:provided</include>
+ <include>com.yahoo.vespa:container-messagebus:*:provided</include>
+ <include>com.yahoo.vespa:container-search-and-docproc:*:provided</include>
+ <include>com.yahoo.vespa:container-search:*:provided</include>
+ <include>com.yahoo.vespa:container:*:provided</include>
+ <include>com.yahoo.vespa:defaults:*:provided</include>
+ <include>com.yahoo.vespa:docproc:*:provided</include>
+ <include>com.yahoo.vespa:document:*:provided</include>
+ <include>com.yahoo.vespa:documentapi:*:provided</include>
+ <include>com.yahoo.vespa:fileacquirer:*:provided</include>
+ <include>com.yahoo.vespa:fsa:*:provided</include>
+ <include>com.yahoo.vespa:hosted-zone-api:*:provided</include>
+ <include>com.yahoo.vespa:http-utils:*:provided</include>
+ <include>com.yahoo.vespa:jdisc_core:*:provided</include>
+ <include>com.yahoo.vespa:jrt:*:provided</include>
+ <include>com.yahoo.vespa:linguistics:*:provided</include>
+ <include>com.yahoo.vespa:messagebus:*:provided</include>
+ <include>com.yahoo.vespa:model-evaluation:*:provided</include>
+ <include>com.yahoo.vespa:predicate-search-core:*:provided</include>
+ <include>com.yahoo.vespa:provided-dependencies:*:provided</include>
+ <include>com.yahoo.vespa:searchcore:*:provided</include>
+ <include>com.yahoo.vespa:searchlib:*:provided</include>
+ <include>com.yahoo.vespa:security-utils:*:provided</include>
+ <include>com.yahoo.vespa:vdslib:*:provided</include>
+ <include>com.yahoo.vespa:vespa-3party-bundles:pom:*:provided</include>
+ <include>com.yahoo.vespa:vespaclient-container-plugin:*:provided</include>
+ <include>com.yahoo.vespa:vespajlib:*:provided</include>
+ <include>com.yahoo.vespa:vespalog:*:provided</include>
<!-- Vespa test dependencies -->
- <include>com.yahoo.vespa:application:*:jar:test</include>
- <include>com.yahoo.vespa:cloud-tenant-cd:*:jar:test</include>
- <include>com.yahoo.vespa:config-application-package:*:jar:test</include>
- <include>com.yahoo.vespa:config-model-api:*:jar:test</include>
- <include>com.yahoo.vespa:config-model:*:jar:test</include>
- <include>com.yahoo.vespa:config-provisioning:*:jar:test</include>
- <include>com.yahoo.vespa:container-apache-http-client-bundle:*:jar:test</include>
- <include>com.yahoo.vespa:container-test:*:jar:test</include>
- <include>com.yahoo.vespa:hosted-api:*:jar:test</include>
- <include>com.yahoo.vespa:indexinglanguage:*:jar:test</include>
- <include>com.yahoo.vespa:logd:*:jar:test</include>
- <include>com.yahoo.vespa:metrics-proxy:*:jar:test</include>
- <include>com.yahoo.vespa:metrics:*:jar:test</include>
- <include>com.yahoo.vespa:model-integration:*:jar:test</include>
- <include>com.yahoo.vespa:searchsummary:*:jar:test</include>
- <include>com.yahoo.vespa:standalone-container:*:jar:test</include>
- <include>com.yahoo.vespa:storage:*:jar:test</include>
- <include>com.yahoo.vespa:tenant-cd-api:*:jar:test</include>
- <include>com.yahoo.vespa:tenant-cd-commons:*:jar:test</include>
- <include>com.yahoo.vespa:vespa-feed-client:*:jar:test</include>
- <include>com.yahoo.vespa:vespa-feed-client-api:*:jar:test</include>
- <include>com.yahoo.vespa:vespaclient-core:*:jar:test</include>
- <include>com.yahoo.vespa:vsm:*:jar:test</include>
+ <include>com.yahoo.vespa:application:*:test</include>
+ <include>com.yahoo.vespa:cloud-tenant-cd:*:test</include>
+ <include>com.yahoo.vespa:config-application-package:*:test</include>
+ <include>com.yahoo.vespa:config-model-api:*:test</include>
+ <include>com.yahoo.vespa:config-model:*:test</include>
+ <include>com.yahoo.vespa:config-provisioning:*:test</include>
+ <include>com.yahoo.vespa:container-apache-http-client-bundle:*:test</include>
+ <include>com.yahoo.vespa:container-test:*:test</include>
+ <include>com.yahoo.vespa:hosted-api:*:test</include>
+ <include>com.yahoo.vespa:indexinglanguage:*:test</include>
+ <include>com.yahoo.vespa:logd:*:test</include>
+ <include>com.yahoo.vespa:metrics-proxy:*:test</include>
+ <include>com.yahoo.vespa:metrics:*:test</include>
+ <include>com.yahoo.vespa:model-integration:*:test</include>
+ <include>com.yahoo.vespa:searchsummary:*:test</include>
+ <include>com.yahoo.vespa:standalone-container:*:test</include>
+ <include>com.yahoo.vespa:storage:*:test</include>
+ <include>com.yahoo.vespa:tenant-cd-api:*:test</include>
+ <include>com.yahoo.vespa:tenant-cd-commons:*:test</include>
+ <include>com.yahoo.vespa:vespa-feed-client:*:test</include>
+ <include>com.yahoo.vespa:vespa-feed-client-api:*:test</include>
+ <include>com.yahoo.vespa:vespaclient-core:*:test</include>
+ <include>com.yahoo.vespa:vsm:*:test</include>
<!-- 3rd party test dependencies -->
<include>com.google.code.findbugs:jsr305:3.0.2:test</include>
diff --git a/container-dependencies-enforcer/pom.xml b/container-dependencies-enforcer/pom.xml
index 5c3ca684c52..8c420328fe2 100644
--- a/container-dependencies-enforcer/pom.xml
+++ b/container-dependencies-enforcer/pom.xml
@@ -60,35 +60,35 @@
<rules>
<enforceDependencies implementation="com.yahoo.vespa.maven.plugin.enforcer.EnforceDependencies">
<allowed>
- <include>*:*:*:jar:test</include>
- <include>com.yahoo.vespa</include>
- <include>aopalliance:aopalliance:${aopalliance.version}:jar:provided</include>
- <include>com.fasterxml.jackson.core:jackson-annotations:${jackson2.version}:jar:provided</include>
- <include>com.fasterxml.jackson.core:jackson-core:${jackson2.version}:jar:provided</include>
- <include>com.fasterxml.jackson.core:jackson-databind:${jackson-databind.version}:jar:provided</include>
- <include>com.fasterxml.jackson.datatype:jackson-datatype-jdk8:${jackson2.version}:jar:provided</include>
- <include>com.fasterxml.jackson.datatype:jackson-datatype-jsr310:${jackson2.version}:jar:provided</include>
+ <include>*:*:*:test</include>
+ <include>com.yahoo.vespa:*:*:*</include>
+ <include>aopalliance:aopalliance:${aopalliance.version}:provided</include>
+ <include>com.fasterxml.jackson.core:jackson-annotations:${jackson2.version}:provided</include>
+ <include>com.fasterxml.jackson.core:jackson-core:${jackson2.version}:provided</include>
+ <include>com.fasterxml.jackson.core:jackson-databind:${jackson-databind.version}:provided</include>
+ <include>com.fasterxml.jackson.datatype:jackson-datatype-jdk8:${jackson2.version}:provided</include>
+ <include>com.fasterxml.jackson.datatype:jackson-datatype-jsr310:${jackson2.version}:provided</include>
<!-- Guava with its internal dependencies -->
- <include>com.google.guava:guava:${guava.version}:jar:provided</include>
- <include>com.google.errorprone:error_prone_annotations:2.2.0:jar:provided</include>
- <include>com.google.guava:failureaccess:1.0.1:jar:provided</include>
- <include>com.google.j2objc:j2objc-annotations:1.1:jar:provided</include>
+ <include>com.google.guava:guava:${guava.version}:provided</include>
+ <include>com.google.errorprone:error_prone_annotations:2.2.0:provided</include>
+ <include>com.google.guava:failureaccess:1.0.1:provided</include>
+ <include>com.google.j2objc:j2objc-annotations:1.1:provided</include>
- <include>com.google.inject:guice:${guice.version}:jar:provided:no_aop</include>
- <include>com.sun.activation:javax.activation:1.2.0:jar:provided</include>
- <include>com.sun.xml.bind:jaxb-core:${jaxb.version}:jar:provided</include>
- <include>com.sun.xml.bind:jaxb-impl:${jaxb.version}:jar:provided</include>
- <include>commons-logging:commons-logging:1.2:jar:provided</include>
- <include>javax.inject:javax.inject:${javax.inject.version}:jar:provided</include>
- <include>javax.servlet:javax.servlet-api:${javax.servlet-api.version}:jar:provided</include>
- <include>javax.ws.rs:javax.ws.rs-api:${javax.ws.rs-api.version}:jar:provided</include>
- <include>javax.xml.bind:jaxb-api:${jaxb.version}:jar:provided</include>
- <include>org.slf4j:jcl-over-slf4j:${slf4j.version}:jar:provided</include>
- <include>org.slf4j:log4j-over-slf4j:${slf4j.version}:jar:provided</include>
- <include>org.slf4j:slf4j-api:${slf4j.version}:jar:provided</include>
- <include>org.slf4j:slf4j-jdk14:${slf4j.version}:jar:provided</include>
- <include>xml-apis:xml-apis:${xml-apis.version}:jar:provided</include>
+ <include>com.google.inject:guice:jar:no_aop:${guice.version}:provided</include>
+ <include>com.sun.activation:javax.activation:1.2.0:provided</include>
+ <include>com.sun.xml.bind:jaxb-core:${jaxb.version}:provided</include>
+ <include>com.sun.xml.bind:jaxb-impl:${jaxb.version}:provided</include>
+ <include>commons-logging:commons-logging:1.2:provided</include>
+ <include>javax.inject:javax.inject:${javax.inject.version}:provided</include>
+ <include>javax.servlet:javax.servlet-api:${javax.servlet-api.version}:provided</include>
+ <include>javax.ws.rs:javax.ws.rs-api:${javax.ws.rs-api.version}:provided</include>
+ <include>javax.xml.bind:jaxb-api:${jaxb.version}:provided</include>
+ <include>org.slf4j:jcl-over-slf4j:${slf4j.version}:provided</include>
+ <include>org.slf4j:log4j-over-slf4j:${slf4j.version}:provided</include>
+ <include>org.slf4j:slf4j-api:${slf4j.version}:provided</include>
+ <include>org.slf4j:slf4j-jdk14:${slf4j.version}:provided</include>
+ <include>xml-apis:xml-apis:${xml-apis.version}:provided</include>
</allowed>
</enforceDependencies>
</rules>
diff --git a/vespa-enforcer-extensions/src/main/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependencies.java b/vespa-enforcer-extensions/src/main/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependencies.java
index 54ccac9d22a..4ff363a3e4e 100644
--- a/vespa-enforcer-extensions/src/main/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependencies.java
+++ b/vespa-enforcer-extensions/src/main/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependencies.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.maven.plugin.enforcer;
import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
import org.apache.maven.enforcer.rule.api.EnforcerRule;
import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
@@ -100,20 +101,32 @@ public class EnforceDependencies implements EnforcerRule {
return children;
}
- // Similar rule matching to bannedDependencies but without support for version ranges
+ /**
+ * Rules follows same structure as {@link DefaultArtifact#toString} output.
+ * Allowed variants:
+ * - {@code <groupId>:<artifactId>:<version>:<scope>}
+ * - {@code <groupId>:<artifactId>:<type>:<version>:<scope>}
+ * - {@code <groupId>:<artifactId>:<type>:<classifier>:<version>:<scope>}
+ */
private static boolean matches(Artifact dependency, String rule) throws EnforcerRuleException {
String[] segments = rule.split(":");
- if (segments.length < 1 || segments.length > 6) throw new EnforcerRuleException("Invalid rule: " + rule);
- if (!segmentMatches(dependency.getGroupId(), segments[0])) return false;
- if (segments.length > 1 && !segmentMatches(dependency.getArtifactId(), segments[1])) return false;
- if (segments.length > 2 && !versionMatches(dependency.getVersion(), segments[2])) return false;
- if (segments.length > 3 && !segmentMatches(dependency.getType(), segments[3])) return false;
- if (segments.length > 4 && !segmentMatches(dependency.getScope(), segments[4])) return false;
- if (segments.length > 5 && dependency.hasClassifier() && !segmentMatches(dependency.getClassifier(), segments[5]))
- return false;
- return true;
+ if (segments.length < 4 || segments.length > 6) throw new EnforcerRuleException("Invalid rule: " + rule);
+ int index = 0;
+ if (!segmentMatches(dependency.getGroupId(), segments[index++])) return false;
+ if (!segmentMatches(dependency.getArtifactId(), segments[index++])) return false;
+ if (segments.length >= 5) {
+ if (!segmentMatches(dependency.getType(), segments[index++])) return false;
+ }
+ if (segments.length == 6) {
+ if (!dependency.hasClassifier() || !segmentMatches(dependency.getClassifier(), segments[index++])) return false;
+ } else {
+ if (dependency.hasClassifier()) return false;
+ }
+ if (!versionMatches(dependency.getVersion(), segments[index++])) return false;
+ return segmentMatches(dependency.getScope(), segments[index]);
}
+ /** Matches simple glob like patterns using '?' and '*' */
private static boolean segmentMatches(String value, String segmentPattern) {
String regex = segmentPattern
.replace(".", "\\.").replace("*", ".*").replace(":", "\\:").replace('?', '.').replace("(", "\\(")
diff --git a/vespa-enforcer-extensions/src/test/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesTest.java b/vespa-enforcer-extensions/src/test/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesTest.java
index bd7989bd65b..e8eec1dbf89 100644
--- a/vespa-enforcer-extensions/src/test/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesTest.java
+++ b/vespa-enforcer-extensions/src/test/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesTest.java
@@ -23,8 +23,8 @@ class EnforceDependenciesTest {
artifact("com.yahoo.vespa", "container-core", "8.0.0", "provided"),
artifact("com.yahoo.vespa", "testutils", "8.0.0", "test"));
Set<String> rules = Set.of(
- "com.yahoo.vespa:container-core:*:jar:provided",
- "com.yahoo.vespa:*:*:jar:test");
+ "com.yahoo.vespa:container-core:jar:*:provided",
+ "com.yahoo.vespa:*:jar:*:test");
assertDoesNotThrow(() -> EnforceDependencies.validateDependencies(dependencies, rules, true));
}
@@ -33,7 +33,7 @@ class EnforceDependenciesTest {
Set<Artifact> dependencies = Set.of(
artifact("com.yahoo.vespa", "container-core", "8.0.0", "provided"),
artifact("com.yahoo.vespa", "testutils", "8.0.0", "test"));
- Set<String> rules = Set.of("com.yahoo.vespa:*:*:jar:test");
+ Set<String> rules = Set.of("com.yahoo.vespa:*:jar:*:test");
EnforcerRuleException exception = assertThrows(
EnforcerRuleException.class,
() -> EnforceDependencies.validateDependencies(dependencies, rules, true));
@@ -51,8 +51,8 @@ class EnforceDependenciesTest {
Set<Artifact> dependencies = Set.of(
artifact("com.yahoo.vespa", "testutils", "8.0.0", "test"));
Set<String> rules = Set.of(
- "com.yahoo.vespa:container-core:*:jar:provided",
- "com.yahoo.vespa:*:*:jar:test");
+ "com.yahoo.vespa:container-core:jar:*:provided",
+ "com.yahoo.vespa:*:jar:*:test");
EnforcerRuleException exception = assertThrows(
EnforcerRuleException.class,
() -> EnforceDependencies.validateDependencies(dependencies, rules, true));
@@ -60,7 +60,7 @@ class EnforceDependenciesTest {
"""
Vespa dependency enforcer failed:
Rules not matching any dependency:
- - com.yahoo.vespa:container-core:*:jar:provided
+ - com.yahoo.vespa:container-core:jar:*:provided
""";
assertEquals(expectedErrorMessage, exception.getMessage());
}
@@ -70,7 +70,7 @@ class EnforceDependenciesTest {
Set<Artifact> dependencies = Set.of(
artifact("com.yahoo.vespa", "testutils", "8.0.0", "test"));
Set<String> rules = Set.of(
- "com.yahoo.vespa:testutils:7.0.0:jar:test");
+ "com.yahoo.vespa:testutils:jar:7.0.0:test");
EnforcerRuleException exception = assertThrows(
EnforcerRuleException.class,
() -> EnforceDependencies.validateDependencies(dependencies, rules, true));
@@ -80,7 +80,7 @@ class EnforceDependenciesTest {
Dependencies not matching any rule:
- com.yahoo.vespa:testutils:jar:8.0.0:test
Rules not matching any dependency:
- - com.yahoo.vespa:testutils:7.0.0:jar:test
+ - com.yahoo.vespa:testutils:jar:7.0.0:test
""";
assertEquals(expectedErrorMessage, exception.getMessage());
}
@@ -90,7 +90,7 @@ class EnforceDependenciesTest {
Set<Artifact> dependencies = Set.of(
artifact("com.yahoo.vespa", "testutils", "8.0.0", "test"));
Set<String> rules = Set.of(
- "com.yahoo.vespa:testutils:8.0.0:jar:provided");
+ "com.yahoo.vespa:testutils:jar:8.0.0:provided");
EnforcerRuleException exception = assertThrows(
EnforcerRuleException.class,
() -> EnforceDependencies.validateDependencies(dependencies, rules, true));
@@ -100,14 +100,48 @@ class EnforceDependenciesTest {
Dependencies not matching any rule:
- com.yahoo.vespa:testutils:jar:8.0.0:test
Rules not matching any dependency:
- - com.yahoo.vespa:testutils:8.0.0:jar:provided
+ - com.yahoo.vespa:testutils:jar:8.0.0:provided
+ """;
+ assertEquals(expectedErrorMessage, exception.getMessage());
+ }
+
+ @Test
+ void matches_shorter_rule_variant_without_type() {
+ Set<Artifact> dependencies = Set.of(
+ artifact("com.yahoo.vespa", "testutils", "8.0.0", "test"));
+ assertDoesNotThrow(() -> EnforceDependencies.validateDependencies(
+ dependencies, Set.of("com.yahoo.vespa:testutils:jar:8.0.0:test"), true));
+ assertDoesNotThrow(() -> EnforceDependencies.validateDependencies(
+ dependencies, Set.of("com.yahoo.vespa:testutils:8.0.0:test"), true));
+ }
+
+ @Test
+ void matches_artifact_with_classifier() {
+ Set<Artifact> dependencies = Set.of(
+ artifact("com.google.inject", "guice", "4.2.3", "provided", "no_aop"));
+ assertDoesNotThrow(() -> EnforceDependencies.validateDependencies(
+ dependencies, Set.of("com.google.inject:guice:jar:no_aop:4.2.3:provided"), true));
+ EnforcerRuleException exception = assertThrows(
+ EnforcerRuleException.class,
+ () -> EnforceDependencies.validateDependencies(
+ dependencies, Set.of("com.google.inject:guice:4.2.3:provided"), true));
+ String expectedErrorMessage =
+ """
+ Vespa dependency enforcer failed:
+ Dependencies not matching any rule:
+ - com.google.inject:guice:jar:no_aop:4.2.3:provided
+ Rules not matching any dependency:
+ - com.google.inject:guice:4.2.3:provided
""";
assertEquals(expectedErrorMessage, exception.getMessage());
}
private static Artifact artifact(String groupId, String artifactId, String version, String scope) {
+ return artifact(groupId, artifactId, version, scope, null);
+ }
+ private static Artifact artifact(String groupId, String artifactId, String version, String scope, String classifier) {
return new DefaultArtifact(
- groupId, artifactId, version, scope, "jar", /*classifier*/null, new DefaultArtifactHandler("jar"));
+ groupId, artifactId, version, scope, "jar", classifier, new DefaultArtifactHandler("jar"));
}
} \ No newline at end of file