【发布时间】:2021-09-08 06:59:54
【问题描述】:
我是一名开源 Scala 开发人员,希望在推送到 GitHub 并触发持续集成 (CircleCI) 的检查时尽量减少依赖关系的麻烦。我有两个项目,其中一个(A)依赖于另一个(B)。 B同时正在开发中(作为快照)。我的项目 A build.sbt 文件依赖于 B 的这个(快照)版本,当然在我的本地机器上一切正常。当我推送到 GitHub 时,它自然会失败,因为该快照文件对 CircleCI 不可用。
我通常通过将 jar 文件放入我的 lib 目录(并从 build.sbt 中删除依赖项)来解决此问题。我相信这被称为非托管依赖项。
我的问题是:有什么方法可以设置我的 lib 目录,以便 CircleCI 可以解决 lib 目录中的(托管)依赖项?我尝试将 ivy 结构放入 lib,从顶层 com.phasmidsoftware 开始,在其下使用 b_2.13,在 1.0.4-SNAPSHOT 下,依此类推。那是行不通的。我已经为项目 A(称为 Numeric)附加了 build.sbt。
organization := "com.phasmidsoftware"
name := "Number"
version := "1.0.9"
scalaVersion := "2.13.6"
scalacOptions ++= Seq( "-target:jvm-1.8", "-encoding", "UTF-8", "-unchecked", "-deprecation", "-Ywarn-dead-code", "-Ywarn-value-discard", "-Ywarn-unused" )
val scalaTestVersion = "3.2.3"
libraryDependencies += "org.scalatest" %% "scalatest" % scalaTestVersion % "test"
resolvers += "Typesafe Repository" at "https://repo.typesafe.com/typesafe/releases/"
libraryDependencies ++= Seq(
"com.phasmidsoftware" %% "matchers" % "1.0.4-SNAPSHOT",
"org.scala-lang.modules" %% "scala-parser-combinators" % "1.2.0-M1",
"org.apache.commons" % "commons-math3" % "3.6.1",
"org.slf4j" % "slf4j-api" % "1.7.31",
"ch.qos.logback" % "logback-classic" % "1.2.3" % "test",
"org.scalacheck" %% "scalacheck" % "1.14.1" % "test"
)
【问题讨论】:
-
我不建议将 JAR 推送到 Git,这真的不是一个好习惯。
-
它们是不相关的项目吗?它们不能是同一个 Git 存储库中的子项目吗?
-
一个 (B) 是通用的。 A 依赖于 B。我不认为一个普通项目的子项目真的是合理的。
-
就推动 JAR 而言,我同意。但是没有简单的方法可以让这些 JAR 到 Circle-CI(据我所知)。通过 Maven 发布当然是可能的,但与简单相反!
-
如果
B是通用的并且将被许多其他项目使用,那么推送到 maven central 是正确的做法,否则将两个项目合并为一个sbt 多模块设置。 - 一种中间方法是在编译代码之前克隆另一个 repo 并在 Circle 上执行sbt publishLocal。 - 还有一种方法可以从 github repo IIRC 添加 abt 依赖项:stackoverflow.com/questions/7550376/…