Honour ext and classifier on @Grabbed dependencies
We currently honour type, but ignore ext. Aether doesn't make a distinction between the two so a Grab that specifies both type and ext but with different values is considered to be an error. Fixes #995
This commit is contained in:
parent
2025dbad61
commit
8f7c96e8f0
|
|
@ -168,7 +168,27 @@ public class AetherGrapeEngine implements GrapeEngine {
|
||||||
String group = (String) dependencyMap.get("group");
|
String group = (String) dependencyMap.get("group");
|
||||||
String module = (String) dependencyMap.get("module");
|
String module = (String) dependencyMap.get("module");
|
||||||
String version = (String) dependencyMap.get("version");
|
String version = (String) dependencyMap.get("version");
|
||||||
return new DefaultArtifact(group, module, "jar", version);
|
String classifier = (String) dependencyMap.get("classifier");
|
||||||
|
String type = determineType(dependencyMap);
|
||||||
|
|
||||||
|
return new DefaultArtifact(group, module, classifier, type, version);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String determineType(Map<?, ?> dependencyMap) {
|
||||||
|
String type = (String) dependencyMap.get("type");
|
||||||
|
String ext = (String) dependencyMap.get("ext");
|
||||||
|
|
||||||
|
if (type == null) {
|
||||||
|
type = ext;
|
||||||
|
if (type == null) {
|
||||||
|
type = "jar";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (ext != null && !type.equals(ext)) {
|
||||||
|
throw new IllegalArgumentException(
|
||||||
|
"If both type and ext are specified they must have the same value");
|
||||||
|
}
|
||||||
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isTransitive(Map<?, ?> dependencyMap) {
|
private boolean isTransitive(Map<?, ?> dependencyMap) {
|
||||||
|
|
|
||||||
|
|
@ -19,13 +19,16 @@ package org.springframework.boot.cli.compiler.grape;
|
||||||
import groovy.lang.GroovyClassLoader;
|
import groovy.lang.GroovyClassLoader;
|
||||||
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
|
import java.net.URL;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests for {@link AetherGrapeEngine}.
|
* Tests for {@link AetherGrapeEngine}.
|
||||||
|
|
@ -99,6 +102,53 @@ public class AetherGrapeEngineTests {
|
||||||
assertEquals(1, this.groovyClassLoader.getURLs().length);
|
assertEquals(1, this.groovyClassLoader.getURLs().length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(expected = IllegalArgumentException.class)
|
||||||
|
public void differingTypeAndExt() {
|
||||||
|
Map<String, Object> dependency = createDependency("org.grails",
|
||||||
|
"grails-dependencies", "2.4.0");
|
||||||
|
dependency.put("type", "foo");
|
||||||
|
dependency.put("ext", "bar");
|
||||||
|
this.grapeEngine.grab(Collections.emptyMap(), dependency);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void pomDependencyResolutionViaType() {
|
||||||
|
Map<String, Object> args = new HashMap<String, Object>();
|
||||||
|
Map<String, Object> dependency = createDependency("org.springframework",
|
||||||
|
"spring-framework-bom", "4.0.5.RELEASE");
|
||||||
|
dependency.put("type", "pom");
|
||||||
|
this.grapeEngine.grab(args, dependency);
|
||||||
|
URL[] urls = this.groovyClassLoader.getURLs();
|
||||||
|
assertEquals(1, urls.length);
|
||||||
|
assertTrue(urls[0].toExternalForm().endsWith(".pom"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void pomDependencyResolutionViaExt() {
|
||||||
|
Map<String, Object> args = new HashMap<String, Object>();
|
||||||
|
Map<String, Object> dependency = createDependency("org.springframework",
|
||||||
|
"spring-framework-bom", "4.0.5.RELEASE");
|
||||||
|
dependency.put("ext", "pom");
|
||||||
|
this.grapeEngine.grab(args, dependency);
|
||||||
|
URL[] urls = this.groovyClassLoader.getURLs();
|
||||||
|
assertEquals(1, urls.length);
|
||||||
|
assertTrue(urls[0].toExternalForm().endsWith(".pom"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void resolutionWithClassifier() {
|
||||||
|
Map<String, Object> args = new HashMap<String, Object>();
|
||||||
|
|
||||||
|
Map<String, Object> dependency = createDependency("org.springframework",
|
||||||
|
"spring-jdbc", "3.2.4.RELEASE", false);
|
||||||
|
dependency.put("classifier", "sources");
|
||||||
|
this.grapeEngine.grab(args, dependency);
|
||||||
|
|
||||||
|
URL[] urls = this.groovyClassLoader.getURLs();
|
||||||
|
assertEquals(1, urls.length);
|
||||||
|
assertTrue(urls[0].toExternalForm().endsWith("-sources.jar"));
|
||||||
|
}
|
||||||
|
|
||||||
private Map<String, Object> createDependency(String group, String module,
|
private Map<String, Object> createDependency(String group, String module,
|
||||||
String version) {
|
String version) {
|
||||||
Map<String, Object> dependency = new HashMap<String, Object>();
|
Map<String, Object> dependency = new HashMap<String, Object>();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue