Browse Source
Update the Spring Boot Gradle plugin to automatically apply exclude rules to dependencies. See gh-1047pull/1052/head
7 changed files with 234 additions and 47 deletions
@ -0,0 +1,86 @@
@@ -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.gradle; |
||||
|
||||
import java.io.File; |
||||
import java.io.FileInputStream; |
||||
import java.io.IOException; |
||||
import java.util.ArrayList; |
||||
import java.util.Collection; |
||||
import java.util.List; |
||||
import java.util.Set; |
||||
|
||||
import org.gradle.api.Project; |
||||
import org.gradle.api.artifacts.Configuration; |
||||
import org.springframework.boot.dependency.tools.Dependencies; |
||||
import org.springframework.boot.dependency.tools.ManagedDependencies; |
||||
import org.springframework.boot.dependency.tools.PropertiesFileDependencies; |
||||
|
||||
/** |
||||
* Utility to provide access to {@link ManagedDependencies} with support for version |
||||
* file overrides. |
||||
* |
||||
* @author Phillip Webb |
||||
*/ |
||||
public class VersionManagedDependencies { |
||||
|
||||
public static final String CONFIGURATION = "versionManagement"; |
||||
|
||||
private Configuration versionManagementConfiguration; |
||||
|
||||
private Collection<Dependencies> versionManagedDependencies; |
||||
|
||||
private ManagedDependencies managedDependencies; |
||||
|
||||
public VersionManagedDependencies(Project project) { |
||||
this.versionManagementConfiguration = project.getConfigurations().getByName( |
||||
CONFIGURATION); |
||||
} |
||||
|
||||
public ManagedDependencies getManagedDependencies() { |
||||
if (this.managedDependencies == null) { |
||||
this.managedDependencies = ManagedDependencies |
||||
.get(getVersionManagedDependencies()); |
||||
} |
||||
return this.managedDependencies; |
||||
} |
||||
|
||||
private Collection<Dependencies> getVersionManagedDependencies() { |
||||
if (versionManagedDependencies == null) { |
||||
Set<File> files = versionManagementConfiguration.resolve(); |
||||
List<Dependencies> dependencies = new ArrayList<Dependencies>(files.size()); |
||||
for (File file : files) { |
||||
dependencies.add(getPropertiesFileManagedDependencies(file)); |
||||
} |
||||
this.versionManagedDependencies = dependencies; |
||||
} |
||||
return versionManagedDependencies; |
||||
} |
||||
|
||||
private Dependencies getPropertiesFileManagedDependencies(File file) { |
||||
if (!file.getName().toLowerCase().endsWith(".properties")) { |
||||
throw new IllegalStateException(file + " is not a version property file"); |
||||
} |
||||
try { |
||||
return new PropertiesFileDependencies(new FileInputStream(file)); |
||||
} |
||||
catch (IOException ex) { |
||||
throw new IllegalStateException(ex); |
||||
} |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,89 @@
@@ -0,0 +1,89 @@
|
||||
/* |
||||
* 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.gradle.exclude; |
||||
|
||||
import org.gradle.api.Action; |
||||
import org.gradle.api.Project; |
||||
import org.gradle.api.artifacts.Configuration; |
||||
import org.gradle.api.artifacts.Dependency; |
||||
import org.gradle.api.artifacts.ModuleDependency; |
||||
import org.gradle.api.internal.artifacts.DefaultExcludeRule; |
||||
import org.gradle.api.logging.Logger; |
||||
import org.springframework.boot.dependency.tools.Dependency.Exclusion; |
||||
import org.springframework.boot.dependency.tools.ManagedDependencies; |
||||
import org.springframework.boot.gradle.VersionManagedDependencies; |
||||
|
||||
/** |
||||
* {@link Action} to apply exclude rules. |
||||
* |
||||
* @author Phillip Webb |
||||
*/ |
||||
public class ApplyExcludeRules implements Action<Configuration> { |
||||
|
||||
private final Logger logger; |
||||
|
||||
private final VersionManagedDependencies versionManagedDependencies; |
||||
|
||||
public ApplyExcludeRules(Project project) { |
||||
this.logger = project.getLogger(); |
||||
this.versionManagedDependencies = new VersionManagedDependencies(project); |
||||
} |
||||
|
||||
@Override |
||||
public void execute(Configuration configuration) { |
||||
configuration.getDependencies().all(new Action<Dependency>() { |
||||
@Override |
||||
public void execute(Dependency dependency) { |
||||
applyExcludeRules(dependency); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
private void applyExcludeRules(Dependency dependency) { |
||||
if (dependency instanceof ModuleDependency) { |
||||
applyExcludeRules((ModuleDependency) dependency); |
||||
} |
||||
} |
||||
|
||||
private void applyExcludeRules(ModuleDependency dependency) { |
||||
ManagedDependencies managedDependencies = versionManagedDependencies |
||||
.getManagedDependencies(); |
||||
org.springframework.boot.dependency.tools.Dependency managedDependency = managedDependencies |
||||
.find(dependency.getGroup(), dependency.getName()); |
||||
if (managedDependency != null) { |
||||
if (managedDependency.getExclusions().isEmpty()) { |
||||
logger.debug("No exclusions rules applied for managed dependency " |
||||
+ dependency); |
||||
} |
||||
for (Exclusion exclusion : managedDependency.getExclusions()) { |
||||
addExcludeRule(dependency, exclusion); |
||||
} |
||||
} |
||||
else { |
||||
logger.debug("No exclusions rules applied for non-managed dependency " |
||||
+ dependency); |
||||
} |
||||
} |
||||
|
||||
private void addExcludeRule(ModuleDependency dependency, Exclusion exclusion) { |
||||
logger.info("Adding managed exclusion rule " + exclusion + " to " + dependency); |
||||
DefaultExcludeRule rule = new DefaultExcludeRule(exclusion.getGroupId(), |
||||
exclusion.getArtifactId()); |
||||
dependency.getExcludeRules().add(rule); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,39 @@
@@ -0,0 +1,39 @@
|
||||
/* |
||||
* 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.gradle.exclude; |
||||
|
||||
import org.gradle.api.Project; |
||||
import org.springframework.boot.gradle.PluginFeatures; |
||||
import org.springframework.boot.gradle.SpringBootPluginExtension; |
||||
|
||||
/** |
||||
* {@link PluginFeatures} to apply exclusion rules. |
||||
* |
||||
* @author Phillip Webb |
||||
*/ |
||||
public class ExcludePluginFeatures implements PluginFeatures { |
||||
|
||||
@Override |
||||
public void apply(Project project) { |
||||
SpringBootPluginExtension extension = project.getExtensions().getByType( |
||||
SpringBootPluginExtension.class); |
||||
if (extension.isApplyExcludeRules()) { |
||||
project.getConfigurations().all(new ApplyExcludeRules(project)); |
||||
} |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue