添加插件的插件依赖作为用户的插件依赖
Posted
技术标签:
【中文标题】添加插件的插件依赖作为用户的插件依赖【英文标题】:Add plugin's plugin dependency as plugin dependency of user 【发布时间】:2018-07-15 08:01:02 【问题描述】:我正在创建一个用于我公司所有 Scala 项目的 SBT 插件。它是常用 SBT 插件的集合和可以在任何地方共享的通用配置。我的插件使用例如sbt-release
:配置凭据,设置发布过程,默认发布存储库等。所以我将其添加为插件依赖项
project/plugins.sbt
:
addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.7")
但是我想向我的用户公开这个插件,以便他们可以致电sbt release
。目前我有以下代码:
build.sbt
sbtPlugin := true
/* common release configuration code */
addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.7")
如果我删除最后一行,我的用户将无法调用sbt release
。但是我想避免两次声明依赖项。我能做得更好吗?
【问题讨论】:
【参考方案1】:我采用了不同的方法,因为配置甚至没有以这种方式应用,而且它还解决了重复问题。我为插件创建了 Scala 文件,而不是 sbt 文件,并将所需的插件依赖项包含在 build.sbt
中。这样一来,您根本不需要将其添加到 project/plugins.sbt
。
例子:
build.sbt
sbtPlugin := true
addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.7")
src/main/scala/mycompany/MyReleaseConfigPlugin.scala
package mycompany
import sbt._
import Keys._
object MyReleaseConfigPlugin extends AutoPlugin
override def trigger: PluginTrigger = allRequirements
override def requires = sbtrelease.ReleasePlugin
/* common release configuration code example */
import sbtrelease.ReleasePlugin.autoImport._
import ReleaseTransformations._
override lazy val projectSettings = Seq(
releaseProcess := Seq[ReleaseStep](
checkSnapshotDependencies,
inquireVersions,
runClean,
setReleaseVersion,
commitReleaseVersion,
tagRelease,
publishArtifacts),
releaseIgnoreUntrackedFiles := false,
publishMavenStyle := true,
credentials += Credentials(
"Artifactory Realm",
"artifactory.mycompany.com",
sys.env.get("REPO_USER").getOrElse(""),
sys.env.get("REPO_PASS").getOrElse(""))
)
【讨论】:
以上是关于添加插件的插件依赖作为用户的插件依赖的主要内容,如果未能解决你的问题,请参考以下文章
对于高度依赖数学的用户编码的脚本或插件语言的建议? [关闭]
Android Gradle 插件Gradle 依赖管理 ⑨ ( implementation project 导入依赖库 Module | 导入aar文件作为依赖 | 先配置仓库再导入依赖 )