Browse Source
Update `GroovyCompiler` and `AetherGrapeEngineFactory` to use the recently added `spring-boot-dependency-tools` in favor of loading dependency information from a generated properties file.pull/272/head
15 changed files with 263 additions and 269 deletions
@ -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; |
||||||
|
} |
||||||
|
} |
||||||
@ -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); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
@ -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); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
@ -1,12 +0,0 @@ |
|||||||
#set( $artifacts = $project.getReference('maven.project').dependencyManagement.dependencies ) |
|
||||||
#foreach( $artifact in $artifacts ) |
|
||||||
#if ( $artifact.type == 'jar' ) |
|
||||||
${artifact.artifactId}.version: $artifact.version |
|
||||||
${artifact.artifactId}.groupId: $artifact.groupId |
|
||||||
#end |
|
||||||
#end |
|
||||||
#foreach( $entry in $project.getReference('maven.project').properties.entrySet() ) |
|
||||||
#if ( $entry.key.endsWith('.version') ) |
|
||||||
$entry.key: $entry.value |
|
||||||
#end |
|
||||||
#end |
|
||||||
@ -0,0 +1,86 @@ |
|||||||
|
/* |
||||||
|
* 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.junit.Before; |
||||||
|
import org.junit.Test; |
||||||
|
import org.springframework.boot.dependency.tools.Dependency; |
||||||
|
import org.springframework.boot.dependency.tools.ManagedDependencies; |
||||||
|
|
||||||
|
import static org.hamcrest.Matchers.equalTo; |
||||||
|
import static org.hamcrest.Matchers.nullValue; |
||||||
|
import static org.junit.Assert.assertThat; |
||||||
|
import static org.mockito.BDDMockito.given; |
||||||
|
import static org.mockito.Matchers.anyString; |
||||||
|
import static org.mockito.Mockito.mock; |
||||||
|
import static org.mockito.Mockito.never; |
||||||
|
import static org.mockito.Mockito.verify; |
||||||
|
|
||||||
|
/** |
||||||
|
* Tests for {@link ManagedDependenciesArtifactCoordinatesResolver}. |
||||||
|
* |
||||||
|
* @author Phillip Webb |
||||||
|
*/ |
||||||
|
public class ManagedDependenciesArtifactCoordinatesResolverTests { |
||||||
|
|
||||||
|
private ManagedDependencies dependencies; |
||||||
|
|
||||||
|
private ManagedDependenciesArtifactCoordinatesResolver resolver; |
||||||
|
|
||||||
|
@Before |
||||||
|
public void setup() { |
||||||
|
this.dependencies = mock(ManagedDependencies.class); |
||||||
|
given(this.dependencies.find("a1")).willReturn(new Dependency("g1", "a1", "0")); |
||||||
|
given(this.dependencies.getVersion()).willReturn("1"); |
||||||
|
this.resolver = new ManagedDependenciesArtifactCoordinatesResolver( |
||||||
|
this.dependencies); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getGroupIdForBootArtifact() throws Exception { |
||||||
|
assertThat(this.resolver.getGroupId("spring-boot-something"), |
||||||
|
equalTo("org.springframework.boot")); |
||||||
|
verify(this.dependencies, never()).find(anyString()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getGroupIdFound() throws Exception { |
||||||
|
assertThat(this.resolver.getGroupId("a1"), equalTo("g1")); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getGroupIdNotFound() throws Exception { |
||||||
|
assertThat(this.resolver.getGroupId("a2"), nullValue()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getVersionForBootArtifact() throws Exception { |
||||||
|
assertThat(this.resolver.getVersion("spring-boot-something"), equalTo("1")); |
||||||
|
verify(this.dependencies, never()).find(anyString()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getVersionFound() throws Exception { |
||||||
|
assertThat(this.resolver.getVersion("a1"), equalTo("0")); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getVersionNotFound() throws Exception { |
||||||
|
assertThat(this.resolver.getVersion("a2"), nullValue()); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,53 @@ |
|||||||
|
/* |
||||||
|
* 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.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import org.junit.Test; |
||||||
|
import org.springframework.boot.dependency.tools.Dependency; |
||||||
|
import org.springframework.boot.dependency.tools.ManagedDependencies; |
||||||
|
|
||||||
|
import static org.hamcrest.Matchers.equalTo; |
||||||
|
import static org.junit.Assert.assertThat; |
||||||
|
import static org.mockito.BDDMockito.given; |
||||||
|
import static org.mockito.Mockito.mock; |
||||||
|
|
||||||
|
/** |
||||||
|
* Tests for {@link ManagedDependenciesFactory}. |
||||||
|
* |
||||||
|
* @author Phillip Webb |
||||||
|
*/ |
||||||
|
public class ManagedDependenciesFactoryTests { |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getManagedDependencies() { |
||||||
|
List<Dependency> dependencyList = new ArrayList<Dependency>(); |
||||||
|
dependencyList.add(new Dependency("g1", "a1", "1")); |
||||||
|
dependencyList.add(new Dependency("g1", "a2", "1")); |
||||||
|
ManagedDependencies dependencies = mock(ManagedDependencies.class); |
||||||
|
given(dependencies.iterator()).willReturn(dependencyList.iterator()); |
||||||
|
ManagedDependenciesFactory factory = new ManagedDependenciesFactory(dependencies); |
||||||
|
List<org.eclipse.aether.graph.Dependency> result = factory |
||||||
|
.getManagedDependencies(); |
||||||
|
assertThat(result.size(), equalTo(2)); |
||||||
|
assertThat(result.get(0).toString(), equalTo("g1:a1:jar:1 (compile)")); |
||||||
|
assertThat(result.get(1).toString(), equalTo("g1:a2:jar:1 (compile)")); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -1,4 +1,4 @@ |
|||||||
@Grab('jopt-simple') |
@Grab('joda-time') |
||||||
class GrabTest { |
class GrabTest { |
||||||
|
|
||||||
} |
} |
||||||
|
|||||||
Loading…
Reference in new issue