Skip to content

Commit

Permalink
Make sure Java runtime libraries don't sneak into War classpath. We o…
Browse files Browse the repository at this point in the history
…nly want to subtract dependencies added to provided configuration.
  • Loading branch information
bmuschko committed May 18, 2015
1 parent 25e6fd1 commit 2821c08
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,11 @@ import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.Dependency
import org.gradle.api.artifacts.maven.Conf2ScopeMappingContainer
import org.gradle.api.file.FileCollection
import org.gradle.api.plugins.JavaPlugin
import org.gradle.api.plugins.JavaPluginConvention
import org.gradle.api.plugins.MavenPlugin
import org.gradle.api.plugins.WarPlugin
import org.gradle.api.publish.ivy.IvyPublication
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.bundling.War
import org.gradle.plugins.ide.eclipse.EclipsePlugin
import org.gradle.plugins.ide.idea.IdeaPlugin
Expand Down Expand Up @@ -157,11 +154,8 @@ class ProvidedBasePlugin implements Plugin<Project> {
*/
private void configureWarPlugin(Project project, Configuration providedConfiguration) {
project.plugins.withType(WarPlugin) {
FileCollection runtimeClasspath = project.convention.getPlugin(JavaPluginConvention)
.sourceSets.getByName(SourceSet.MAIN_SOURCE_SET_NAME).runtimeClasspath

project.tasks.withType(War) {
classpath = runtimeClasspath.minus(providedConfiguration)
classpath = classpath.minus(providedConfiguration)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ import org.gradle.api.artifacts.ResolvedConfiguration
import org.gradle.api.plugins.JavaPlugin
import org.gradle.api.plugins.JavaPluginConvention
import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.bundling.War
import spock.lang.Unroll

class ProvidedBasePluginSpec extends PluginProjectSpec {
@Override
Expand Down Expand Up @@ -95,4 +97,28 @@ class ProvidedBasePluginSpec extends PluginProjectSpec {
testSourceSet.compileClasspath.any { it.name.contains 'guava'}
testSourceSet.compileClasspath.any { it.name.contains 'commons-io'}
}

@Unroll
def "Dependency declared by configuration '#providedConfigurationName' is not added to War classpath if also defined by 'compile' configuration"() {
when:
project.apply plugin: 'war'
project.apply plugin: pluginName
project.repositories.mavenCentral()
project.dependencies.add('compile', 'commons-io:commons-io:2.2')
project.dependencies.add(providedConfigurationName, 'commons-io:commons-io:2.4')

then:
def resolved = project.configurations.getByName('compile').resolvedConfiguration
resolved.getResolvedArtifacts().any { it.name == 'commons-io' && it.moduleVersion.id.version == '2.4' } // This is different from above

def resolvedProvided = project.configurations.getByName(providedConfigurationName).resolvedConfiguration
resolvedProvided.getResolvedArtifacts().any { it.name == 'commons-io' && it.moduleVersion.id.version == '2.4' }

War warTask = project.tasks.getByName('war')
def commonIos = warTask.classpath.findAll { it.name.contains 'commons-io' }
commonIos.size() == 0

where:
providedConfigurationName << ['providedCompile', 'provided']
}
}

0 comments on commit 2821c08

Please sign in to comment.