Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save maxs-rose/3889d10d3535cc07bceb631ff90504f2 to your computer and use it in GitHub Desktop.
Save maxs-rose/3889d10d3535cc07bceb631ff90504f2 to your computer and use it in GitHub Desktop.
Properly generate only top level dependencies for multi project gradle builds when using https://github.com/jk1/Gradle-License-Report
import com.github.jk1.license.ModuleData
import com.github.jk1.license.ProjectData
import com.github.jk1.license.filter.DependencyFilter
import org.gradle.api.artifacts.ConfigurationContainer
import org.gradle.api.artifacts.ResolvedDependency
import java.util.stream.Collectors
import java.util.stream.Stream
public class ExcludeTransitiveDependenciesFilterMultiProject implements DependencyFilter {
private static Set<ResolvedDependency> getFirstLevelDependenciesForConfiguration(ConfigurationContainer configContainer, String configName) {
if (!configContainer.names.contains(configName))
return null
return configContainer
.getByName(configName)
.getResolvedConfiguration()
.getFirstLevelModuleDependencies()
}
@Override
public ProjectData filter(ProjectData source) {
Set<ResolvedDependency> firstLevelDependencies = source.getConfigurations()
.stream()
.flatMap({ c ->
{
Stream<ResolvedDependency> parentDeps = getFirstLevelDependenciesForConfiguration(source.getProject().getConfigurations(), c.getName()).stream()
Stream<ResolvedDependency> childDeps = source.getProject().getSubprojects()
.stream().flatMap(sp -> getFirstLevelDependenciesForConfiguration(sp.getConfigurations(), c.getName()).stream())
return Stream.concat(parentDeps, childDeps)
}
})
.collect(Collectors.toSet());
Set<ModuleData> moduleDataSet = source.getAllDependencies()
.stream()
.filter({ md ->
firstLevelDependencies
.stream()
.anyMatch({ dependency ->
md.getName() == dependency.getModuleName() &&
md.getGroup() == dependency.getModuleGroup() &&
md.getVersion() == dependency.getModuleVersion()
})
})
.collect(Collectors.toSet())
return new ProjectData(source.getProject(), source.getConfigurations(), source.getImportedModules()) {
@Override
Set<ModuleData> getAllDependencies() {
return moduleDataSet
}
};
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment