【问题标题】:Import sbt and typesafe in build (IntelliJ)在构建中导入 sbt 和类型安全 (IntelliJ)
【发布时间】:2020-05-28 22:59:21
【问题描述】:

我无法将 sbt 和类型安全库导入 IntelliJ 中的 build.sbt。

sbt 和 typesafe 的依赖在 plugin.sbt 文件中。在文件 plugin.sbt 中,我也有红色的 addSbtPlugin 方法:

plugin.sbt

而库的导入在 build.sbt 文件中。

build.sbt

我的

我该怎么办?

更新

build.sbt 文件是这样的:

import com.typesafe.sbt.license.{DepModuleInfo, LicenseCategory, LicenseInfo}
import sbt._
import scala.io.Source

// Core library versions (the ones that are used multiple times)
val sparkVersion: String = "2.3.1"
val slf4jVersion: String = "1.7.25"
val logbackVersion: String = "1.2.3"

// Artifactory settings
val artifactoryRealm: String = "artifactory-espoo1.int.net.nokia.com"
val artifactoryUrl: String = s"https://$artifactoryRealm/artifactory/"
val artifactoryUser: Option[String] = sys.env.get("ARTIFACTORY_USER")
val artifactoryPassword: Option[String] = sys.env.get("ARTIFACTORY_PASSWORD")

// Project variables
val organizationId: String = "com.nokia.gs.npo.ae"
val rootPackage: String = organizationId + ".rfco"

// Base settings shared across modules
val baseSettings: Seq[SettingsDefinition] = Seq(
  organization := organizationId,
  version := Source.fromFile(file("VERSION")).mkString.trim + sys.env.getOrElse("VERSION_TAG", ""),
  scalaVersion := "2.11.12",
  buildInfoUsePackageAsPath := true,
  scalafmtOnCompile in ThisBuild := false, // just invoke `sbt scalafmt` before commits!
  parallelExecution in ThisBuild := false,
  fork in Test := true,
  testForkedParallel in Test := true,
  logLevel in test := util.Level.Info,
  coverageMinimum := sys.env.getOrElse("COVERAGE_MINIMUM", "80.0").toDouble,
  coverageFailOnMinimum := true,
  libraryDependencies ++= Seq(
    "org.apache.spark"              %% "spark-sql"               % sparkVersion   % Provided,
    "org.apache.spark"              %% "spark-hive"              % sparkVersion   % Provided,
    "org.slf4j"                     % "slf4j-api"                % slf4jVersion   % Compile,
    "com.nokia.gs.ncs.chubs.common" %% "spark-commons"           % "0.5.10"       % Compile,
    "com.nokia.gs.ncs.chubs.common" %% "lang"                    % "0.2.0"        % Compile,
    "com.fasterxml.jackson.module"  %% "jackson-module-scala"    % "2.9.8"        % Compile,
    "com.typesafe.play"             %% "play-json"               % "2.7.1"        % Compile,
    "org.apache.commons"            % "commons-csv"              % "1.7"          % Compile,
    "org.scalatest"                 %% "scalatest"               % "3.0.5"        % Test,
    "ch.qos.logback"                % "logback-classic"          % logbackVersion % Test,
    "ch.qos.logback"                % "logback-core"             % logbackVersion % Test,
    "org.apache.spark"              %% "spark-hive-thriftserver" % sparkVersion   % Test,
    "com.github.tomakehurst"        % "wiremock-standalone"      % "2.22.0"       % Test
  ),
  excludeDependencies ++= Seq(
    "com.fasterxml.jackson.module" % "jackson-module-scala",
    "org.slf4j"                    % "slf4j-log4j12",
    "org.hamcrest"                 % "hamcrest-core",
    "javax.servlet"                % "servlet-api"
  ),
  publishTo := {
    Some("Artifactory Realm" at artifactoryUrl + sys.env.getOrElse("ARTIFACTORY_LOCATION", "ava-maven-snapshots-local"))
  },
  packagedArtifacts in publish ~= { m =>
    val classifiersToExclude = Set(Artifact.SourceClassifier)
    m.filter({ case (art, _) => art.classifier.forall(c => !classifiersToExclude.contains(c)) })
  },
  (artifactoryUser, artifactoryPassword) match {
    case (Some(user), Some(password)) =>
      credentials += Credentials("Artifactory Realm", artifactoryRealm, user, password)
    case _ =>
      println("[info] USERNAME and/or PASSWORD is missing for publishing to Artifactory")
      credentials := Seq()
  }
)

【问题讨论】:

  • 看起来您在 build.sbt 飞行中使用了 Build.scala 语法。另外,这两个文件在哪里? build.sbt 应该在您的项目根文件夹中。 plugins.sbt 应位于 project 文件夹内。
  • build.sbt 位于根文件夹中。 plugin.sbt 位于 project 文件夹中。我应该使用哪种语法?我从终端 sbt compile 运行命令
  • Plus 在您的 build.sbt 中,我只看到一些版本号(用于 spark、slf4j 等...)。你需要什么神器?通常你有类似libraryDependencies ++= Seq( "org.slf4j" % "slf4j-api" % "1.7.25"...
  • build.sbt 文件很长。 build.sbt 文件中的一些依赖项如下:libraryDependencies ++= Seq( "org.apache.spark" %% "spark-sql" % sparkVersion % Provided, "org.apache.spark" %% "spark-hive" % sparkVersion % Provided )

标签: scala intellij-idea sbt


【解决方案1】:

通过查看build.sbt,您的plugins.sbt 至少应该包含以下几行:

addSbtPlugin("com.typesafe.sbt" % "sbt-license-report" % "1.2.0")
addSbtPlugin("com.eed3si9n"     % "sbt-buildinfo"      % "0.9.0")
addSbtPlugin("org.scalameta"    % "sbt-scalafmt"       % "2.2.1")
addSbtPlugin("org.scoverage"    % "sbt-scoverage"      % "1.6.1")

【讨论】:

  • 在 build.sbt 我必须导入 import sbt: ``` import sbt._ name := "My Project" version := "1.0" scalaVersion := "2.11.8" libraryDependencies + =“org.apache.spark”%%“spark-core”%“2.3.1”```
  • 你不应该。你用的是什么版本的 sbt?
  • sbt.version=1.3.8
  • 我明白了。我仍然认为您首先需要决定是要Build.scala 还是build.sbt。在更新版本的 sbt Build.scala 定义已被弃用。
【解决方案2】:

我解决了 import sbt,在 IntelliJ IDea 上创建了一个新项目,并将源文件导入到我创建的项目中。奇怪的是现在它进行了导入。然而,之前我用 IntelliJ 的代码打开了源文件夹,但没有导入 sbt。

build.sbt

我只需要解决类型安全的依赖关系,但这是外部和私有依赖关系的问题。

感谢您的帮助

【讨论】:

    猜你喜欢
    • 2018-01-11
    • 1970-01-01
    • 2018-08-19
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 2018-11-10
    相关资源
    最近更新 更多