mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-07-15 01:07:30 +08:00
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
@ -48,7 +48,7 @@ import org.eclipse.aether.util.filter.DependencyFilterUtils;
|
||||
* A {@link GrapeEngine} implementation that uses <a
|
||||
* href="http://eclipse.org/aether">Aether</a>, the dependency resolution system used by
|
||||
* Maven.
|
||||
*
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
* @author Phillip Webb
|
||||
*/
|
||||
@ -168,7 +168,27 @@ public class AetherGrapeEngine implements GrapeEngine {
|
||||
String group = (String) dependencyMap.get("group");
|
||||
String module = (String) dependencyMap.get("module");
|
||||
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) {
|
||||
|
@ -19,17 +19,20 @@ package org.springframework.boot.cli.compiler.grape;
|
||||
import groovy.lang.GroovyClassLoader;
|
||||
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
/**
|
||||
* Tests for {@link AetherGrapeEngine}.
|
||||
*
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
public class AetherGrapeEngineTests {
|
||||
@ -99,6 +102,53 @@ public class AetherGrapeEngineTests {
|
||||
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,
|
||||
String version) {
|
||||
Map<String, Object> dependency = new HashMap<String, Object>();
|
||||
|
Loading…
Reference in New Issue
Block a user