【问题标题】:How to setup build.sbt with sbt-assembly plugin?如何使用 sbt-assembly 插件设置 build.sbt?
【发布时间】:2019-07-15 09:46:44
【问题描述】:

发布这个只是因为没有其他建议的解决方案有帮助。 我有一个非常简单的一类 Scala sbt 项目,它需要是一个可运行的 .jar 文件。它有一些 java 依赖项,所以 sbt package 对我不起作用,我需要一个胖罐子。该项目具有以下结构。

├── build.sbt
├── project
│   ├── assembly.sbt
│   ├── build.properties
│   ├── project
│   └── target
├── README.md
├── src
│   ├── main
│   └── test
├── target
│   ├── scala-2.12
│   ├── specs2-reports
│   ├── streams
│   └── test-reports

它有一个主类和一个测试规范。为了使 sbt 生成一个胖 jar,我将 assembly.sbt 添加到 project 目录中,并相应地修改了我的 build.sbt

import AssemblyKeys._

name := "myproj"

version := "1.0"

scalaVersion := "2.12.8"

libraryDependencies ++= Seq(
  "au.com.bytecode" %% "opencsv" % "2.4",
  "org.specs2" %% "specs2-core" % "4.3.0" % "test"
)

scalacOptions in Test ++= Seq("-Yrangepos")

assemblyMergeStrategy in assembly := {
  case PathList("META-INF", xs @ _*) => MergeStrategy.discard
  case x => MergeStrategy.first
}

但是,import AssemblyKeys._cannot resolve symbol 是红色的?从控制台尝试它给了我

import AssemblyKeys._
       ^
[error] Type error in expression
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore? 

我还忘记了什么,因为 github 页面没有说明我们需要做任何其他事情。我的 sbt 版本是sbt 1:1.2.8-1

【问题讨论】:

    标签: java scala sbt


    【解决方案1】:

    在您的project 目录下,您需要添加一个plugins.sbt 文件,其中包含以下内容:

    addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.15.0")
    

    然后,删除AssemblyKeys._ 并刷新sbt。只有在成功刷新后,您才能插入该导入

    【讨论】:

    • 一旦我这样做并尝试在 sbt 控制台中运行 compile 我得到未解决的 opencsv 依赖异常。然后我完全关闭了想法并删除了~/.sbt/0.13 dir 并再次尝试。 sbt 组装成功!
    • @minerals 是的,有时缓存会很麻烦,但如果你使用的是 sbt 1.2.8,如果我没记错的话,一切都应该在 ~/.sbt/1.0 目录下。
    • 应该的。但由于某种原因,我也有0.13,并认为它可能与1.0 冲突。关于 Idea IDE,我认为它根本无法与 sbt 一起使用 :(
    猜你喜欢
    • 2019-07-14
    • 1970-01-01
    • 2018-12-11
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 2015-12-24
    • 1970-01-01
    相关资源
    最近更新 更多