diffplug / diffplug/spotless

Consider shading the JGit dependency in Grade plugin

未关闭
#587 8 条评论 2 个 reaction 已指派 0 人 在 GitHub 查看
enhancement
主要语言
Java
星标
5.6k
派生
559
平均合并
1 天 14 小时
30 天内合并 PR
43

描述

### Summary

In Gradle, all plugins share the same classpath. This makes it very hard, if not impossible, to use plugins which depend on different incompatible versions of the same library. This is the case with Spotless and [GitPublish](https://github.com/ajoberstar/gradle-git-publish):

1. Spotless [depends](https://github.com/diffplug/spotless/blob/5244a7e9d8958785b159bd8420f67e8ba36a91a3/lib-extra/build.gradle#L15) on 5.7.0.202003110725-r
2. GitPublish [depends](https://github.com/ajoberstar/grgit/blob/09e307a859033ca9591b3159672857a7b4709dde/grgit-core/build.gradle#L18) on the "latest release" version, which for the latest version of the plugin itself [is](https://mvnrepository.com/artifact/org.ajoberstar.grgit/grgit-core/4.0.1) 5.6.0.201912101111-r

Downgrading the JGit dependency in Spotless, I believe, is not an option, but maybe you could consider shading this dependency, building it into the Gradle plugin JAR file? I believe that the official Gradle guidelines [recommend](https://guides.gradle.org/designing-gradle-plugins/#minimizing_the_use_of_external_libraries) minimizing the number of external dependencies, and shading is one of the ways to mitigate issues like this one.

### Gradle version

Happens with any Gradle version, including the latest one, 6.4.1

### Spotless version

4.0.1

### Operating system and version

Probably not relevant, but macOS 10.15.3

### Spotless configuration

Having something as simple as

```kotlin
spotless {
scala {
scalafmt("2.3.2").configFile(layout.projectDirectory.file(".scalafmt.conf"))
}
}
```

in the build configuration will reproduce the issue,.

### Console errors

In all my test cases any Spotless tasks don't cause errors; exceptions can be observed when the GitPublish plugin is used, and they are generic class linkage errors which happen when binary incompatible libraries with the same class names are present in the one classpath.

贡献指南

打开贡献指南

调研方向

首先使用 Spotless 4.0.1、GitPublish 以及所示的 Scala scalafmt 配置复现冲突,然后检查 Gradle 插件的 JGit 依赖设置。将结果与 Gradle 关于最小化外部插件依赖的指导进行比较。当 GitPublish 和 Spotless 能够共存,且不再出现报告的由不兼容 JGit 版本导致的通用类链接错误时,即表示完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
java
领域
build-system
Issue 类型
功能
难度
5/5
预计耗时
一周以上
活跃度
停滞
描述清晰度
基本清楚
新手友好度
25/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。