为什么sbt坚持使用0.1-SNAPSHOT项目版本?

时间:2014-10-06 17:44:01

标签: intellij-idea playframework sbt sbt-idea

我正在使用IDEA 13.1.5旗舰版和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)在lazy val myLibrary = project中创建build.sbt行并刷新IDEA项目后,我希望IDE在myLibrary项目文件夹中创建sbt常规目录结构,但是,它什么也没做。当然,必须有一种方法来创建这个默认目录结构,而不是我手动创建结构?

我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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

让一切正常
scalaVersion in ThisBuild := "2.11.1" 

在根目录或main build.sbt