【问题标题】:Why does sbt insist on using 0.1-SNAPSHOT for project version?为什么 sbt 坚持使用 0.1-SNAPSHOT 作为项目版本?
【发布时间】:2023-03-07 20:07:01
【问题描述】:

我正在使用 IDEA 13.1.5 Ultimate edition 和 sbt 0.13.5(每个 Play Activator 默认配置),这是我当前的build.sbt:

name := """my-first-app"""

version := "1.0-SNAPSHOT"

lazy val root = (project in file("."))
  .enablePlugins(PlayJava)
  .aggregate(myLibrary)
  .dependsOn(myLibrary)

lazy val myLibrary = (project in file("myLibrary"))
  .enablePlugins(PlayJava)

scalaVersion := "2.11.1"

libraryDependencies ++= Seq(
  javaJdbc,
  javaEbean,
  cache,
  javaWs
)

libraryDependencies ++= Seq(
  "net.sf.jsefa" % "jsefa" % "1.1.1.RELEASE"
)

我看到两个问题:

1) sbt 出于某种原因试图解决 myLibrary 项目的错误版本 - 出于某种原因,它试图解决 0.1-SNAPSHOT 而不是 1.0-SNAPSHOT 版本(这是我所期望的);例如,sbt update 返回:

[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: mylibrary#mylibrary_2.11;0.1-SNAPSHOT: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[trace] Stack trace suppressed: run 'last root/*:update' for the full output.
[error] (root/*:update) sbt.ResolveException: unresolved dependency: mylibrary#mylibrary_2.11;0.1-SNAPSHOT: not found

我不明白为什么-我已经对本地.ivy repo 缓存、本地.m2 repo 缓存、整个项目目录进行了全文搜索,手动清理它们,使IDEA缓存无效+重新启动IDE ,但我仍然找不到对包含 0.1-SNAPSHOT 的文件的任何引用,除了在 target/ 文件夹中,这显然意味着某些东西正在提供此信息,但我无法确定那是什么。

我也尝试过 activator clean 然后手动删除 target/ 文件夹,但我根本看不到这些信息来自哪里。

2) 在build.sbt 中创建lazy val myLibrary = project 行并刷新IDEA 项目后,我希望IDE 在myLibrary 项目文件夹中创建sbt 常规目录结构,但是,它什么也不做。当然,必须有一种方法来创建这个默认目录结构,而不是我手动创建结构?

我在这里错过了什么?

【问题讨论】:

    标签: intellij-idea playframework sbt sbt-idea


    【解决方案1】:

    您只指定了根构建的版本,而不是您的库。 0.1-SNAPSHOT 是 sbt 的默认版本,如果没有指定。

    您必须在myLibrary 中创建build.sbt 并在其中指定版本,或者如果您想使用单个全局版本号,您可以使用version in ThisBuild := "1.0-SNAPSHOT"。

    IntelliJ 提供了一个自动创建丢失文件夹的选项,转到首选项,搜索sbt 并检查Create directories for empty content roots automatically。

    【讨论】:

    • 嗯,有趣 - 我不知道复选框已关闭,谢谢!是的,IDEA 现在正在创建预期的结构,但即使在将构建设置为 1.0-SNAPSHOT 之后,我仍然在项目目标文件夹中找到旧的 0.1-SNAPSHOT 文件(我之前实验的剩余部分)(链接显示图片)。如何摆脱它们以及需要调用什么来清理该文件夹?
    • 不,还是一样 - 尝试将ThisBuild 放在scalaVersion 和name 设置上。我还尝试在myLibrary 项目中创建一个build.sbt 文件,以查看它是否会覆盖版本 - 什么都没有。出于某种原因,我也看到了我的~/.sbt/boot 文件夹,其中包含三个不同的 scala 版本(2.10.2、2.10.4、2.11.1),尽管我希望在那里看到最新的版本。这可以连接吗?
    • 但是现在可以正确解析了吗?我认为那里的分辨率缓存只与 sbt 相关,它可能仍然使用 Scala 2.10。
    • 我会说是的 - 更改build.sbt 中的版本,使root 依赖于myLibrary(通过lazy val root = (project in file(".")).dependsOn(myLibrary).aggregate(myLibrary)),然后执行activator clean compile,激活器输出似乎是随着我更改myLibrary 版本(例如... [info] Resolving mylibrary#mylibrary_2.11;1.1-SNAPSHOT ...)而更改。然而,target/ 文件夹仍然包含对0.1-SNAPSHOT 的引用,这令人不安。有没有更好的方法来查看 sbt 中的依赖树?可能类似于 maven 产生的东西?
    • 当然,sbt dependencies,虽然我不会担心太多。我的猜测是它与 sbt 有关,因此很正常。
    【解决方案2】:

    我遇到了类似的问题。子项目没有构建,sbt 在升级到 Play 2.3.6 和 Scala 2.11.1 时未能尝试定位到远程存储库。早些时候使用 Play 2.2 和 Scala 2.10 一切正常。现在我通过把

    scalaVersion in ThisBuild := "2.11.1" 
    

    在根目录或main build.sbt

    【讨论】:

      猜你喜欢
      • 2018-03-28
      • 2014-09-19
      • 2013-05-29
      • 1970-01-01
      • 2015-01-27
      • 1970-01-01
      • 2017-03-04
      • 2013-06-06
      • 2012-01-03
      相关资源
      最近更新 更多