Update CLI to use spring-boot-dependency-tools

Update `GroovyCompiler` and `AetherGrapeEngineFactory` to use the
recently added `spring-boot-dependency-tools` in favor of loading
dependency information from a generated properties file.
This commit is contained in:
Phillip Webb
2014-01-24 22:48:27 -08:00
parent ab4baa3c43
commit 49ef1cd236
15 changed files with 263 additions and 269 deletions

View File

@@ -91,7 +91,7 @@ public class GroovyCompiler {
this.configuration = configuration;
this.loader = createLoader(configuration);
this.coordinatesResolver = new PropertiesArtifactCoordinatesResolver(this.loader);
this.coordinatesResolver = new ManagedDependenciesArtifactCoordinatesResolver();
AetherGrapeEngine grapeEngine = AetherGrapeEngineFactory.create(this.loader,
configuration.getRepositoryConfiguration());

View File

@@ -0,0 +1,62 @@
/*
* Copyright 2012-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.boot.cli.compiler;
import org.springframework.boot.dependency.tools.Dependency;
import org.springframework.boot.dependency.tools.ManagedDependencies;
/**
* {@link ArtifactCoordinatesResolver} backed by {@link ManagedDependencies}.
*
* @author Phillip Webb
*/
public class ManagedDependenciesArtifactCoordinatesResolver implements
ArtifactCoordinatesResolver {
private final ManagedDependencies dependencies;
public ManagedDependenciesArtifactCoordinatesResolver() {
this(ManagedDependencies.get());
}
ManagedDependenciesArtifactCoordinatesResolver(ManagedDependencies dependencies) {
this.dependencies = dependencies;
}
@Override
public String getGroupId(String artifactId) {
Dependency dependency = find(artifactId);
return (dependency == null ? null : dependency.getGroupId());
}
@Override
public String getVersion(String artifactId) {
Dependency dependency = find(artifactId);
return (dependency == null ? null : dependency.getVersion());
}
private Dependency find(String artifactId) {
if (artifactId != null) {
if (artifactId.startsWith("spring-boot")) {
return new Dependency("org.springframework.boot", artifactId,
this.dependencies.getVersion());
}
return this.dependencies.find(artifactId);
}
return null;
}
}

View File

@@ -1,73 +0,0 @@
/*
* Copyright 2012-2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.boot.cli.compiler;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.springframework.util.Assert;
/**
* {@link ArtifactCoordinatesResolver} backed by a properties file.
*
* @author Andy Wilkinson
*/
public final class PropertiesArtifactCoordinatesResolver implements
ArtifactCoordinatesResolver {
private final ClassLoader loader;
private Properties properties = null;
public PropertiesArtifactCoordinatesResolver(ClassLoader loader) {
this.loader = loader;
}
@Override
public String getGroupId(String artifactId) {
return getProperty(artifactId + ".groupId");
}
@Override
public String getVersion(String artifactId) {
return getProperty(artifactId + ".version");
}
private String getProperty(String name) {
if (this.properties == null) {
this.properties = loadProperties();
}
String property = this.properties.getProperty(name);
return property;
}
private Properties loadProperties() {
Properties properties = new Properties();
InputStream inputStream = this.loader
.getResourceAsStream("META-INF/springcli.properties");
Assert.state(inputStream != null, "Unable to load springcli properties");
try {
properties.load(inputStream);
return properties;
}
catch (IOException ex) {
throw new IllegalStateException("Unable to load springcli properties", ex);
}
}
}

View File

@@ -63,7 +63,7 @@ public abstract class AetherGrapeEngineFactory {
new DefaultRepositorySystemSessionAutoConfiguration().apply(
repositorySystemSession, repositorySystem);
List<Dependency> managedDependencies = new PropertiesManagedDependenciesFactory()
List<Dependency> managedDependencies = new ManagedDependenciesFactory()
.getManagedDependencies();
return new AetherGrapeEngine(classLoader, repositorySystem,

View File

@@ -16,21 +16,48 @@
package org.springframework.boot.cli.compiler.grape;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.graph.Dependency;
import org.eclipse.aether.util.artifact.JavaScopes;
import org.springframework.boot.dependency.tools.ManagedDependencies;
/**
* An abstraction for accessing the managed dependencies that should be used to influence
* the outcome of dependency resolution performed by Aether.
* Factory to create Maven {@link Dependency} objects from Boot
* {@link ManagedDependencies}.
*
* @author Andy Wilkinson
* @author Phillip Webb
*/
public interface ManagedDependenciesFactory {
public class ManagedDependenciesFactory {
private final ManagedDependencies dependencies;
ManagedDependenciesFactory() {
this(ManagedDependencies.get());
}
ManagedDependenciesFactory(ManagedDependencies dependencies) {
this.dependencies = dependencies;
}
/**
* Returns the managed dependencies.
* Return a list of the managed dependencies.
*/
List<Dependency> getManagedDependencies();
public List<Dependency> getManagedDependencies() {
List<Dependency> result = new ArrayList<Dependency>();
for (org.springframework.boot.dependency.tools.Dependency dependency : this.dependencies) {
Artifact artifact = asArtifact(dependency);
result.add(new Dependency(artifact, JavaScopes.COMPILE));
}
return result;
}
private Artifact asArtifact(
org.springframework.boot.dependency.tools.Dependency dependency) {
return new DefaultArtifact(dependency.getGroupId(), dependency.getArtifactId(),
"jar", dependency.getVersion());
}
}

View File

@@ -1,93 +0,0 @@
/*
* Copyright 2012-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.boot.cli.compiler.grape;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;
import java.util.Properties;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.graph.Dependency;
import org.eclipse.aether.util.artifact.JavaScopes;
import org.springframework.util.Assert;
/**
* A {@link ManagedDependenciesFactory} that uses a properties file to configure the list
* of managed dependencies that it returns.
*
* @author Andy Wilkinson
*/
class PropertiesManagedDependenciesFactory implements ManagedDependenciesFactory {
private static final String PROPERTY_SUFFIX_GROUP_ID = ".groupId";
private static final String PROPERTY_SUFFIX_VERSION = ".version";
private final List<Dependency> managedDependencies;
public PropertiesManagedDependenciesFactory() {
Properties properties = loadProperties();
this.managedDependencies = getManagedDependencies(properties);
}
private static Properties loadProperties() {
Properties properties = new Properties();
InputStream inputStream = PropertiesManagedDependenciesFactory.class
.getClassLoader().getResourceAsStream("META-INF/springcli.properties");
Assert.state(inputStream != null, "Unable to load springcli properties");
try {
properties.load(inputStream);
return properties;
}
catch (IOException ex) {
throw new IllegalStateException("Unable to load springcli properties", ex);
}
}
private static List<Dependency> getManagedDependencies(Properties properties) {
List<Dependency> dependencies = new ArrayList<Dependency>();
for (Entry<Object, Object> entry : properties.entrySet()) {
String propertyName = (String) entry.getKey();
if (propertyName.endsWith(PROPERTY_SUFFIX_GROUP_ID)) {
String artifactId = propertyName.substring(0, propertyName.length()
- PROPERTY_SUFFIX_GROUP_ID.length());
String groupId = (String) entry.getValue();
String version = properties.getProperty(artifactId
+ PROPERTY_SUFFIX_VERSION);
if (version != null) {
Artifact artifact = new DefaultArtifact(groupId, artifactId, "jar",
version);
dependencies.add(new Dependency(artifact, JavaScopes.COMPILE));
}
}
}
return dependencies;
}
@Override
public List<Dependency> getManagedDependencies() {
return new ArrayList<Dependency>(this.managedDependencies);
}
}