加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在SBT .scala项目配置中从多个非托管目录添加jar

发布时间:2020-12-16 18:42:32 所属栏目:安全 来源:网络整理
导读:我正在尝试让SBT构建一个可能有多个非托管目录的项目.如果我有一个目录,我可以轻松地这样做: unmanagedBase := file( "custom-libs" ).getAbsoluteFile 但由于我有两个带有非托管jar的目录,我需要能够将它们全部添加.我找到了一些信息in here,但对我的完整.
我正在尝试让SBT构建一个可能有多个非托管目录的项目.如果我有一个目录,我可以轻松地这样做:

unmanagedBase := file( "custom-libs" ).getAbsoluteFile

但由于我有两个带有非托管jar的目录,我需要能够将它们全部添加.我找到了一些信息in here,但对我的完整.scala文件构建似乎没有用.

我创建了一个简单的项目,显示问题in here.以下是我的Build.scala文件.

UPDATE

我从sbt-users list获得了一些帮助,并且能够正确定义非托管jar,但代码仍然无法编译(但是sbt show unmanaged-jars正确显示文件).

import sbt._
import com.github.siasia._
import PluginKeys._
import Keys._

object Build extends sbt.Build {

  import Dependencies._

  val unmanagedListing = unmanagedJars :=  {
    Dependencies.listUnmanaged( file(".").getAbsoluteFile )
  }

  lazy val myProject = Project("spray-template",file("."))
    .settings(WebPlugin.webSettings: _*)
    .settings(port in config("container")  := 8080)
    .settings(
      organization  := "com.example",version       := "0.9.0-RC1",scalaVersion  := "2.9.1",scalacOptions := Seq("-deprecation","-encoding","utf8"),resolvers     ++= Dependencies.resolutionRepos,libraryDependencies ++= Seq(
        Compile.akkaActor,Compile.sprayServer,Test.specs2,Container.jettyWebApp,Container.akkaSlf4j,Container.slf4j,Container.logback
      ),unmanagedListing
    )

}

object Dependencies {
  val resolutionRepos = Seq(
    ScalaToolsSnapshots,"Typesafe repo" at "http://repo.typesafe.com/typesafe/releases/","spray repo" at "http://repo.spray.cc/"
  )

  def listUnmanaged( base : RichFile ) : Keys.Classpath = {
    val baseDirectories = (base / "custom-libs") +++ ( base / "custom-libs2" )
    (baseDirectories ** "*.jar").classpath
  }

  object V {
    val akka    = "1.3"
    val spray   = "0.9.0-RC1"
    val specs2  = "1.7.1"
    val jetty   = "8.1.0.v20120127"
    val slf4j   = "1.6.4"
    val logback = "1.0.0"
  }

  object Compile {
    val akkaActor   = "se.scalablesolutions.akka" %  "akka-actor"      % V.akka    % "compile"
    val sprayServer = "cc.spray"                  %  "spray-server"    % V.spray   % "compile"
  }

  object Test {
    val specs2      = "org.specs2"                %% "specs2"          % V.specs2  % "test"
  }

  object Container {
    val jettyWebApp = "org.eclipse.jetty"         %  "jetty-webapp"    % V.jetty   % "container"
    val akkaSlf4j   = "se.scalablesolutions.akka" %  "akka-slf4j"      % V.akka
    val slf4j       = "org.slf4j"                 %  "slf4j-api"       % V.slf4j
    val logback     = "ch.qos.logback"            %  "logback-classic" % V.logback
  }
}

解决方法

我只是使用sbt 0.11.x从我的build.sbt文件发布片段.它可能会被重构一点.

unmanagedJars in Compile <++= baseDirectory map { base =>
    val libs = base / "lib"
    val dirs = (libs / "batik") +++ (libs / "libtw") +++ (libs / "kiama")
    (dirs ** "*.jar").classpath
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读