【问题标题】:Custom task in multi-project build in SBT buildSBT 构建中的多项目构建中的自定义任务
【发布时间】:2016-08-04 10:42:28
【问题描述】:

在这些项目之一中是否有任何带有多项目设置和自定义任务的 build.sbt 示例? 我无法弄清楚正确的语法。我有一个顶级项目的自定义任务。我也有一个多项目构建。但是组合在一起是相当棘手的。

【问题讨论】:

    标签: scala sbt multi-project


    【解决方案1】:

    My web3j-scala project 这样做。这是完整的build.sbt

    val web3jVersion = "3.1.0"
    
    lazy val commonSettings = Seq(
      cancelable := true,
    
      buildInfoKeys ++= Seq[BuildInfoKey]( // assumes that the git repo directory has not been renamed
        "gitRepoName" -> new File(sys.props("user.dir")).getName
      ),
    
      developers := List(
        Developer("mslinn",
                  "Mike Slinn",
                  "mslinn@micronauticsresearch.com",
                  url("https://github.com/mslinn")
        )
      ),
    
      // define the statements initially evaluated when entering 'console', 'console-quick', but not 'console-project'
      initialCommands in console := """
                                      |""".stripMargin,
      javacOptions ++= Seq(
        "-Xlint:deprecation",
        "-Xlint:unchecked",
        "-source", "1.8",
        "-target", "1.8",
        "-g:vars"
      ),
    
      libraryDependencies ++= Seq(
        "commons-io"              %  "commons-io"      % "2.6"    withSources(),
        "ch.qos.logback"          %  "logback-classic" % "1.2.3",
        "com.github.scopt"        %% "scopt"           % "3.7.0"  withSources(),
        //
         "org.scalatest"          %% "scalatest"       % "3.0.3" % Test withSources(),
         "junit"                  %  "junit"           % "4.12"  % Test
      ),
    
      licenses += ("Apache-2.0", url("https://www.apache.org/licenses/LICENSE-2.0.html")),
    
      logLevel := Level.Warn,
    
      // Only show warnings and errors on the screen for compilations.
      // This applies to both test:compile and compile and is Info by default
      logLevel in compile := Level.Warn,
    
      // Level.INFO is needed to see detailed output when running tests
      logLevel in test := Level.Info,
    
      organization := "com.micronautics",
    
      resolvers ++= Seq(
        "Ethereum Maven" at "https://dl.bintray.com/ethereum/maven/"
      ),
    
      scalacOptions ++= Seq( // From https://tpolecat.github.io/2017/04/25/scalac-flags.html
        "-deprecation",                      // Emit warning and location for usages of deprecated APIs.
        "-encoding", "utf-8",                // Specify character encoding used by source files.
        "-explaintypes",                     // Explain type errors in more detail.
        "-feature",                          // Emit warning and location for usages of features that should be imported explicitly.
        "-language:existentials",            // Existential types (besides wildcard types) can be written and inferred
        "-language:experimental.macros",     // Allow macro definition (besides implementation and application)
        "-language:higherKinds",             // Allow higher-kinded types
        "-language:implicitConversions",     // Allow definition of implicit functions called views
        "-unchecked",                        // Enable additional warnings where generated code depends on assumptions.
        "-Xcheckinit",                       // Wrap field accessors to throw an exception on uninitialized access.
        //"-Xfatal-warnings",                  // Fail the compilation if there are any warnings.
        "-Xfuture",                          // Turn on future language features.
        "-Xlint:adapted-args",               // Warn if an argument list is modified to match the receiver.
        "-Xlint:by-name-right-associative",  // By-name parameter of right associative operator.
        "-Xlint:constant",                   // Evaluation of a constant arithmetic expression results in an error.
        "-Xlint:delayedinit-select",         // Selecting member of DelayedInit.
        "-Xlint:doc-detached",               // A Scaladoc comment appears to be detached from its element.
        "-Xlint:inaccessible",               // Warn about inaccessible types in method signatures.
        "-Xlint:infer-any",                  // Warn when a type argument is inferred to be `Any`.
        "-Xlint:missing-interpolator",       // A string literal appears to be missing an interpolator id.
        "-Xlint:nullary-override",           // Warn when non-nullary `def f()' overrides nullary `def f'.
        "-Xlint:nullary-unit",               // Warn when nullary methods return Unit.
        "-Xlint:option-implicit",            // Option.apply used implicit view.
        "-Xlint:package-object-classes",     // Class or object defined in package object.
        "-Xlint:poly-implicit-overload",     // Parameterized overloaded implicit methods are not visible as view bounds.
        "-Xlint:private-shadow",             // A private field (or class parameter) shadows a superclass field.
        "-Xlint:stars-align",                // Pattern sequence wildcard must align with sequence component.
        "-Xlint:type-parameter-shadow",      // A local type parameter shadows a type already in scope.
        "-Xlint:unsound-match",              // Pattern match may not be typesafe.
        "-Yno-adapted-args",                 // Do not adapt an argument list (either by inserting () or creating a tuple) to match the receiver.
        "-Ypartial-unification",             // Enable partial unification in type constructor inference
        //"-Ywarn-dead-code",                  // Warn when dead code is identified.
        "-Ywarn-extra-implicit",             // Warn when more than one implicit parameter section is defined.
        "-Ywarn-inaccessible",               // Warn about inaccessible types in method signatures.
        "-Ywarn-infer-any",                  // Warn when a type argument is inferred to be `Any`.
        "-Ywarn-nullary-override",           // Warn when non-nullary `def f()' overrides nullary `def f'.
        "-Ywarn-nullary-unit",               // Warn when nullary methods return Unit.
        "-Ywarn-numeric-widen"               // Warn when numerics are widened.
        //"-Ywarn-unused:implicits",           // Warn if an implicit parameter is unused.
        //"-Ywarn-unused:imports",             // Warn if an import selector is not referenced.
        //"-Ywarn-unused:locals",              // Warn if a local definition is unused.
        //"-Ywarn-unused:params",              // Warn if a value parameter is unused.
        //"-Ywarn-unused:patvars",             // Warn if a variable bound in a pattern is unused.
        //"-Ywarn-unused:privates",            // Warn if a private member is unused.
        //"-Ywarn-value-discard"               // Warn when non-Unit expression results are unused.
      ),
    
      // The REPL can’t cope with -Ywarn-unused:imports or -Xfatal-warnings so turn them off for the console
      scalacOptions in (Compile, console) --= Seq("-Ywarn-unused:imports", "-Xfatal-warnings"),
    
      scmInfo := Some(
        ScmInfo(
          url("https://github.com/mslinn/web3j-scala"),
          "git@github.com:mslinn/web3j-scala.git"
        )
      ),
    
      version := "0.5.0"
    )
    
    lazy val demo = project
      .aggregate(root)
      .settings(
        // define the statements to be evaluated when entering 'console' and 'consoleQuick' but not 'consoleProject'
        initialCommands in console := """import java.math.BigInteger
                                        |import java.util.concurrent.Future
                                        |import org.web3j.protocol._
                                        |import org.web3j.protocol.infura._
                                        |""".stripMargin,
    
        name := "demo",
    
        unmanagedSourceDirectories in Compile += baseDirectory.value / "../abiWrapper"
      ).dependsOn(root)
    
    lazy val root = (project in file("root"))
      .settings(
        // define the statements initially evaluated when entering 'console', 'console-quick', but not 'console-project'
        initialCommands in console := """
                                        |""".stripMargin,
    
        libraryDependencies ++= Seq(
          // See https://docs.web3j.io/modules.html
          "org.web3j"              %  "abi"                   % web3jVersion withSources(), // Application Binary Interface encoders
          "org.web3j"              %  "codegen"               % web3jVersion withSources(), // Code generators
          "org.web3j"              %  "console"               % web3jVersion withSources(), // Command-line tools
          "org.web3j"              %  "core"                  % web3jVersion withSources(),
          "org.web3j"              %  "crypto"                % web3jVersion withSources(), // For transaction signing and key/wallet management
          "org.web3j"              %  "geth"                  % web3jVersion withSources(), // Geth-specific JSON-RPC module
          "org.web3j"              %  "infura"                % web3jVersion withSources(), // Infura-specific HTTP header support
          "org.web3j"              %  "parity"                % web3jVersion withSources(), // Parity-specific JSON-RPC module
        //  "org.web3j"              %  "quorum"                % "0.7.0"      withSources(), // integration with JP Morgan's Quorum
          "org.web3j"              %  "rlp"                   % web3jVersion withSources(), // Recursive Length Prefix (RLP) encoders
        //  "org.web3j"              %  "tuples"                % web3jVersion withSources(), // See http://www.javatuples.org ... not needed for Scala?
          "org.web3j"              %  "utils"                 % web3jVersion withSources(), // Minimal set of utility classes
          "org.web3j"              %  "web3j-maven-plugin"    % "0.1.2"      withSources(), // Create Java classes from solidity contract files
          //
          "org.scala-lang.modules" %% "scala-java8-compat"    % "0.8.0",
          "ch.qos.logback"         %  "logback-classic"       % "1.2.3",
          //
          "org.scalatest"          %% "scalatest"   % "3.0.3" % Test withSources(),
          "junit"                  %  "junit"       % "4.12"  % Test
        ),
    
        name := "root"
      )
    

    【讨论】:

      猜你喜欢
      • 2021-05-28
      • 2016-01-29
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      • 2016-10-01
      • 2011-02-09
      • 2023-03-26
      相关资源
      最近更新 更多