第1章、安装和运行Lift

来源:互联网 发布:做非标刀具软件 编辑:程序博客网 时间:2024/06/05 15:44

本章介绍了使用Lift开始开发的问题:运行First Lift应用程序并设置编码环境。有关10章中关于生产部署的答案。

下载和运行提升

问题

您要在计算机上安装并运行升降机。

安装和运行Lift的唯一先决条件是安装Java 1.7或更高版本。有关安装Java的说明,请访问http://java.com/

您可以通过询问您已安装的版本,从shell或命令提示符中找出是否有Java

$ java -version
java version "1.7.0_13"
Java(TM) SE Runtime Environment (build 1.7.0_13-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)

一旦你有Java,以下说明将下载,构建和启动一个基本的Lift应用程序。

对于MacLinux

·        访问http://liftweb.net/download并下载最新的Lift 2.6 ZIP文件。

·        解压文件。

·        启动终端或您最喜欢的shell工具。

·        导航到解压缩的文件夹并进入scala_211 文件夹,然后进入lift_basic文件夹。

·        运行./sbt

·        所需库将自动下载。

·        SBT提示符(>)中,键入container:start

·        打开浏览器并转到http://127.0.0.1:8080/

·        完成后,输入exitSBT提示以停止应用程序的运行。

对于Windows

·        访问http://liftweb.net/download并找到到最新版本的Lift 2.6的链接,并将其保存到磁盘。

·        提取ZIP文件的内容。

·        在资源管理器中导航到提取的文件夹,一旦进入,导航到scala_211,然后升级_basic

·        双击sbt.bat运行构建工具一个终端窗口应该打开。

·        某些版本的Windows将显示SBT“发布者无法验证的警告。如果发生这种情况,点击运行

·        所需库将自动下载。

·        SBT提示符(>)中,键入container:start

·        您可能会发现Windows防火墙阻止Java运行。如果是,请选择允许访问

·        启动浏览器,然后访问http://127.0.0.1:8080/

·        完成后,输入exitSBT提示以停止应用程序的运行。

预期结果

这些命令的结果应该是在您的计算机上运行的一个基本的Lift应用程序,如图1-1所示


1-1。基本的Lift应用程序主页

讨论

Lift没有按照安装软件的通常意义安装。相反,您使用标准构建工具(如SBTMaven)将您的应用程序与Lift框架进行组合。在这个配方中,我们下载了一个ZIP文件,其中包含四个相当小的Lift应用程序,然后通过构建工具启动其中一个。

简单构建工具

键入sbt启动Scala项目使用的简单构建工具(它不是特定于Lift)。SBT将检查项目定义并下载所需的任何库,其中包括Lift框架。

此下载发生一次,下载的文件存储在您的主文件夹下的.ivy2磁盘上。

您的应用程序生成由build.sbt配置。看着里面,你会看到:

·        有关您的应用程序的基本信息,包括名称和版本

·        解析器,通知SBT从哪里获取依赖关系

·        插件和Scala编译器的设置

·        运行应用程序所需的依赖关系列表,其中包括Lift框架

运行你的应用程序

SBT命令container:start在默认端口8080启动Web服务器,并将请求传递到Lift应用程序。单词容器是指将应用程序部署到的软件。有各种容器(Jetty Tomcat可能是最着名的),所有容器都符合部署标准。结果是您可以构建您的应用程序并部署到您喜欢的任何一个。该container:start命令使用Jetty

源代码

应用程序的源代码位于src / main / webappsrc / main / scala。如果您在webapp文件夹中查看index.html,您会看到提及。这是对scala / code / snippet/ HelloWorld.scala定义的类的引用。这是一个片段调用Lift视图第一种Web应用程序的示例。也就是说,没有为索引页面设置路由来收集数据并将其转发到视图。相反,视图定义了用功能替换的内容的区域,例如在HelloWorld.scala中定义的那些函数data-lift="helloWorld.howdy"

Lift知道要查找code包中的代码段,因为该包被声明为Scala / bootstrap / liftweb / Boot.scala中的片段的位置。启动应用程序时启动Boot类,您可以在其中配置Lift的行为。

也可以看看

简单构建工具文档位于http://www.scala-sbt.org

Lift教程可以在Simply LiftInstant Lift Web Applications How-toPACKT Publishing)和Lift in ActionManningPublications Co.)中找到。

使用SBT从头开始创建Lift项目

问题

您想从头开始创建一个Lift Web项目,而不使用官方Lift网站上提供的ZIP文件。

您需要自己配置SBTLift项目。幸运的是,只需要五个小文件。

首先,在project / plugins.sbt创建一个SBT插件文件(所有文件名相对于项目根目录):

addSbtPlugin("com.earldouglas"% "xsbt-web-plugin" % "0.7.0")

该文件告诉SBT您将使用该文件xsbt-web-plugin。此插件将允许您启动和停止您的应用程序。

接下来,创建一个SBT构建文件build.sbt

organization := "org.yourorganization"
 
name := "liftfromscratch"
 
version := "0.1-SNAPSHOT"
 
scalaVersion := "2.11.1"
 
seq(webSettings:_*)
 
libraryDependencies ++= {
  val liftVersion = "2.6-RC1"
  Seq(
    "net.liftweb" %% "lift-webkit" % liftVersion % "compile",
    "org.eclipse.jetty" % "jetty-webapp" % "8.1.7.v20120910"  %
      "container,test",
    "org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" %
      "container,compile" artifacts Artifact("javax.servlet", "jar", "jar")
  )
}

请随时更改各种版本,但请注意,某些版本的Lift仅适用于某些版本的Scala

现在您已经有了SBT项目的基础知识,可以启动sbt控制台。它应该加载所有必要的依赖关系,包括正确的Scala版本,并提示您。

接下来,在src / main / webapp / WEB-INF / web.xml创建以下文件:

<!DOCTYPE web-app SYSTEM "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <filter>
    <filter-name>LiftFilter</filter-name>
    <display-name>Lift Filter</display-name>
    <description>The Filter that intercepts Lift calls</description>
    <filter-class>net.liftweb.http.LiftFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>LiftFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

web.xml文件告诉web容器,如码头的配置为xsbt-web-plugin,通过对解除一切请求。

接下来,在src / main / webapp / index.html创建一个示例index.html文件,以加载我们的Lift应用程序。例如:

<!DOCTYPEhtml>

<html>

  <head>

    <title>Lift Scratch</title>

  </head>

  <body>

    <h1> Welcome, you now have a working Liftinstallation </h1>

  </body>

</html>

最后,通过在src / main / scala / bootstrap / Boot.scala创建一个Boot.scala文件来设置基本的Lift启动设置。以下内容将足够:

packagebootstrap.liftweb

 

importnet.liftweb.http.{Html5Properties,LiftRules,Req}

importnet.liftweb.sitemap.{Menu,SiteMap}

 

/**

 * A class that's instantiated early andrun.  It allows the application

 * to modify lift's environment

 */

classBoot {

  def boot {

    // where to search snippet

    LiftRules.addToPackages("org.yourorganization.liftfromscratch")

 

    // Build SiteMap

    def sitemap(): SiteMap =SiteMap(

     Menu.i("Home") / "index"

    )

 

    // Use HTML5 for rendering

    LiftRules.htmlProperties.default.set((r: Req)=>

     newHtml5Properties(r.userAgent))

  }

}


恭喜,你现在有一个工作的Lift项目!

您可以通过使用该container:start命令从SBT控制台启动Jetty Web容器来验证您是否具有正在工作的Lift项目。首先,应该编译Boot.scala文件,然后应该通知Jetty已经启动并正在http// localhost8080进行监听。您应该可以访问网络浏览器中的地址,并查看您之前创建的已渲染的index.html文件。

讨论

如前所述,从头创建Lift项目是一个相对简单的过程。然而,对于新来者来说,这可能是一个棘手的问题,特别是如果您不习惯使用Java虚拟机(JVM)生态系统及其Web容器的约定。如果遇到问题,请确保文件位于正确的位置,并且其内容未被错误修改。如果全部失败,请参阅下面的示例项目,或者在Lift邮件列表中寻求帮助。

使用SBT或类似构建工具提升项目遵循标准项目布局,其中Scala源代码位于src / main / scalaWeb资源位于src / main / webapp。您的斯卡拉文件必须在直接放置src / main /斯卡拉或匹配您所定义的组织名称嵌套目录build.sbt,在我们的案例给我们src / main /斯卡拉/组织/yourorganization / liftfromscratch /。测试文件与目录结构匹配,但是放在src / test /而不是src / main /。同样,web.xml文件必须放在src / main / webapp / WEB-INF /中才能正确检测。

给定这些约定,你应该有一个目录结构,如果不是完全如此,就像这样:

- project root directory
  | build.sbt
  - project/
    | plugins.sbt
  - src/
    - main/
      - scala/
        - bootstrap/
          | Boot.scala
        - org/
          - yourorganization/
            - liftfromscratch/
              | <your Scala code goes here>
      - webapp/
        | index.html
        | <any other web resources - images, HTML, JavaScript, etc - go here>
        - WEB-INF/
          | web.xml
    - test/
      - scala/
        - org/
          - yourorganization/
            - liftfromscratch/
              | <your tests go here>

也可以看看

有一个使用此方法创建示例项目

使用文本编辑器开发

问题

您希望使用自己喜欢的文本编辑器开发升降机应用程序,在浏览器中重新加载以查看更改。

在编辑过程中运行SBT,并要求它检测并编译Scala文件的更改。为此,请启动sbt并在SBT提示符下输入以下内容:

~; container:start; container:reload /

当您在编辑器中保存源文件时,SBT将检测到此更改,编译文件并重新加载Web容器。

讨论

前缀的SBT命令~使该命令在文件更改时运行。第一个分号引入一系列命令,如果第一个命令成功,第二个命令将运行。第二个分号意味着reload如果start命令运行正常,命令将运行。该start 命令将重新编译已更改的所有Scala源文件。

当您以这种方式运行SBT时,您会注意到以下输出:

1. Waiting for source changes... (press enter to interrupt)

事实上,如果在SBT窗口中按Enter键,您将退出此触发执行模式,SBT将不再需要查找文件更改。然而,当SBT正在观察变化时,输出将指示何时出现这种情况:

[info] Compiling 1 Scala source to target/scala-2.11/classes...
[success] Total time: 1 s, completed 26-Aug-2014 17:17:47
[pool-301-thread-4] DEBUG net.liftweb.http.LiftServlet - Destroyed Lift handler.
[info] stopped o.e.j.w.WebAppContext{/,[src/main/webapp/]}
[info] NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet
[info] started o.e.j.w.WebAppContext{/,[src/main/webapp/]}
[success] Total time: 0 s, completed 26-Aug-2014 17:17:48
2. Waiting for source changes... (press enter to interrupt)

HTML文件的编辑不会触发SBT编译和重新加载命令。这是因为SBT的默认行为是查找ScalaJava源文件更改,以及src / main /resources /中的文件更改。这样做很好,因为当您重新加载浏览器页面时,Jetty将使用您修改的HTML文件。

每次编辑Scala文件时,重新启动Web容器是不理想的。通过将JRebel集成到开发环境中可以减少对重新启动的需求,如并入JRebel”中所述

但是,如果您进行了大量的编辑,您可能更愿意发出container:stop命令,直到您准备好再次运行应用程序container:start。这将防止SBT编译并重新启动应用程序。SBT控制台具有命令历史记录,使用上下键盘箭头可以导航到上一个命令,然后按Return键运行它们。这需要这些长命令中的一些细节。

如果您在Java 8之前使用Java,可能遇到的一个错误是:

java.lang.OutOfMemoryError: PermGen space

永久代Java虚拟机的概念。这是用于存储类的内存区域(除其他外)。这是一个固定的大小,一旦它是满的,这个PermGen错误出现。你可以想象,不断重新启动容器会导致许多类被加载和卸载,但是这个过程并不完美,有效地泄露内存。最好的是停止,然后重新启动SBT。如果你经常看到这个错误,检查设置为-XX:MaxPermSize内部的SBT(或sbt.bat)脚本,如果可以的话,加倍。

也可以看看

触发的执行有许多可以调整的设置,如SBT文档所述

有关可用命令的概述,请参阅SBT命令行参考。

GitHub wiki描述SBT Web插件的命令和配置选项。

并入JRebel

问题

您希望在使用JRebel更改Scala源文件时避免重新启动应用程序。

解决方案

需要三个步骤:安装JRebel一次每年请求免费的Scala许可证并将SBT配置为使用JRebel

首先,访问https://my.jrebel.com/plans并请求免费的Scala许可证。

其次,下载通用ZIP存档版本的JRebel,将其解压到你喜欢的地方。对于这个食谱,我选择使用/ opt / zt /jrebel /

JRebel收到您的帐户确认邮件后,您可以从ZeroTurnaround网站的活动区域复制您的身份验证令牌。要将令牌应用于本地安装,请运行JRebel配置脚本:

$/opt/zt/jrebel/bin/jrebel-config.sh

对于Windows,请导航到并启动bin \ jrebel-config.cmd

激活设置中,选择我想使用myJRebel”,然后在许可部分中,粘贴到激活令牌中。单击激活按钮,一旦您将许可证状态更改为您具有有效的myJRebel令牌,请单击完成

最后,通过修改sbt脚本来启用JRebel来配置SBT。这意味着为Java 设置-javaagent-noverify标志,并启用JRebel Lift插件。

对于MacLinuxLift下载中包含的脚本将成为:

java-Drebel.lift_plugin = true -noverify -javaagent/opt/zt/jrebel/jrebel.jar \

 -Xmx1024M -Xss2M -XXMaxPermSize = 512m -XX+ CMSClassUnloadingEnabled -jar \

 `dirname $ 0` / sbt-launch-0.12.jar“$ @”

对于Windows,将sbt.bat修改为:

set SCRIPT_DIR=%~dp0
java -Drebel.lift_plugin=true -noverify -javaagent:c:/opt/zt/jrebel/jrebel.jar \
 -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256m -Xmx1024M -Xss2M \
-jar"%SCRIPT_DIR%\sbt-launch-0.12.jar" %*

没有什么可以使用JRebel。当您启动SBT时,您会看到一个大横幅,表示如下:

#############################################################
 
  JRebel 5.1.1 (201211271929)
  (c) Copyright ZeroTurnaround OU, Estonia, Tartu.
 
  Over the last 30 days JRebel prevented
  at least 335 redeploys/restarts saving you about 13.6 hours.
....

安装JRebel后,您现在可以container:start在应用程序中修改和编译Scala文件,并在应用程序中重新加载页面。你会看到一个通知,该类已被重新加载:

[2012-12-16 23:15:44] JRebel: Reloading class 'code.snippet.HelloWorld'.

该更改是实时的,而无需重新启动容器。

讨论

JRebel很有可能加快你的发展。它更新运行Java虚拟机中的代码,而无需停止并重新启动它。效果是,总的来说,您可以编译一个类,然后在浏览器中重新加载,以查看Lift应用程序中的更改。

即使使用JRebel,您将需要不时重新启动应用程序,但JRebel通常会减少重新启动次数。例如,Boot.scala在应用程序启动时运行,因此如果您在Boot.scala中修改某些内容,则需要停止并启动应用程序。JRebel不能帮忙。

但是还有一些JRebel无法帮助的情况,比如超类改变。通常,JRebel将在控制台窗口中发出有关此警告。如果发生这种情况,请停止并启动您的应用程序。

-Drebel.lift_plugin=true设置将Lift特定功能添加到JRebel。具体而言,它允许JRebel的重新加载的变化LiftScreenWizardRestHelper。这意味着您可以更改字段或屏幕,并更改REST serve代码。

购买的许可证

该配方对名为myJRebel的服务使用免费的Scala许可证。这通过激活码与JRebel服务器进行通信。如果您从ZeroTurnaround购买了许可证,情况略有不同。在这种情况下,您将拥有您存储在名为jrebel.lic的文件中的许可证密钥。您可以将文件放置在主目录中的.jrebel文件夹中,或与jrebel.jar一起放置(例如,在/ opt / zt /jrebel /文件夹中,如果安装JRebel的位置),或者您可以指定其他位置。对于后一个选项,修改sbt脚本并通过添加另一个Java设置指定文件的位置:

-Drebel.license=/path/to/jrebel.lic

也可以看看

有关JRebel如何工作的详细信息,请参见零问题常见问题解答

Lift支持2012博客文章中公布,您将在此找到有关插件功能的更多信息。

使用Eclipse开发

问题

您希望使用Eclipse IDE开发Lift应用程序,在浏览器中重新加载以查看更改。

使用Eclipse“Scala IDE for Eclipse”插件和SBT sbteclipse插件。这将使Eclipse能够理解ScalaSBT能够创建Eclipse可以加载的项目文件。

Eclipse插件的说明在http://scala-ide.org上给出。选择更新站点时需要注意以下几个选项:Scala 2.92.10以及不同版本的Eclipse有不同的站点。从稳定版本的插件开始,而不是每晚或里程碑版本。这将为您提供一个了解ScalaEclipse透视图。

Eclipse插件安装并重新启动后,您需要创建项目文件,以使Eclipse能够加载Lift项目。通过在Lift项目中的projects / plugins.sbt中添加以下内容来安装sbteclipse

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.5.0")

然后,您可以通过在SBT提示符中输入以下内容来创建Eclipse项目文件(.project.classpath):

eclipse

通过导航到文件导入...”并选择常规现有项目进入工作区,在Eclipse中打开项目。浏览并选择您的Lift项目。现在,您已经开始在Eclipse中开发应用程序了。

要在编辑和保存工作时查看实时更改,请在单独的终端窗口中运行SBT。也就是说,从Eclipse外的终端窗口启动sbt,并输入以下内容:

~; container:start; container:reload /

此命令的行为在使用文本编辑器开发中有所描述,但如果您使用JRebel(请参阅并入JRebel”),那么您只需要自己运行container:start

然后,您可以在Eclipse中编辑,保存以进行编译,然后在Web浏览器中,重新加载以查看更改。

讨论

IDE的一大优点是可以通过Cmd +单击(Mac)或F3PC)来导航源。您可以要求SBT eclipse命令下载Lift源和Scaladoc,让您从方法和类中点击Lift源,这是了解更多关于Lift的有用方式。

要在项目中实现此目的,请eclipsewith-source=trueSBT 中运行,但如果您希望将其作为默认行为,请将以下内容添加到您的build.sbt文件中:

EclipseKeys.withSource := true

如果您发现自己经常使用插件,您可能希望在全局SBT配置文件中声明它,因此它适用于所有项目。为此,请创建一个~/ .sbt / 0.13 /plugins / build.sbt文件,其中包含:

resolvers +=Classpaths.typesafeResolver

 

addSbtPlugin("com.typesafe.sbteclipse"% "sbteclipse-plugin" % "2.5.0")

注意resolvers和之间的空白行addSbtPlugin。在.sbt文件中,语句之间需要空行。

最后,withSource/ .sbt / 0.13 /global.sbt中设置全局配置(如)。

也可以看看

sbteclipse还有其他有用的设置。您还会在该网站上找到插件的最新版本号。

SBT /.bst /结构中被描述的使用指南的插件和在为全局配置wiki页面

开发使用IntelliJ IDEA

问题

您在编写升降机应用程序时要使用IntelliJ IDEA开发环境。

您需要IntelliJScala插件和一个SBT插件来生成IDEA项目文件。

IntelliJ插件只需安装一次,这些说明适用于IntelliJ IDEA 13. IDE的各个版本之间的细节可能有所不同,但基本思路是找到JetBrains Scala插件,并下载并安装。

“Welcome to IntelliJ IDEA”“Quick Staert”屏幕中,选择“Configure”,然后选择“Plugins”。选择浏览存储库...”在右上角的搜索框中,键入“Scala”。你会在左边找到一些比赛:选择“Scala”。在右侧,您将看到这是“Scala语言支持插件,供应商是JetBrainsInc.。单击安装插件按钮,确认要安装,然后关闭存储库浏览器,最后OK的插件窗口。系统将提示您重新启动IntelliJ IDEA

配置IDE后,您现在需要在Lift项目中添加SBT插件,方法是将以下内容添加到projects / plugins.sbt文件中:

addSbtPlugin("com.github.mpeltonen"% "sbt-idea" % "1.6.0")

启动SBT,并在SBT提示符下,键入以下内容创建IDEA项目文件:

gen-idea

这将生成IntelliJ使用的.idea.iml文件。在IntelliJ中,您可以从文件菜单中打开项目,选择打开...”,然后导航到项目并选择目录。

要在编辑和保存工作时查看实时更改,请在单独的终端窗口中运行SBT。也就是说,从IntelliJ以外的终端窗口启动sbt,并输入以下内容:

~; container:start; container:reload /

此命令的此行为在使用文本编辑器开发中有描述,但如果您使用JRebel(请参阅合并JRebel”),那么您只需要自己运行container:start

每次编译或制作项目时,容器都会接收更改,您可以通过重新加载浏览器窗口来查看它们。

讨论

默认情况下,该gen-idea命令将获取依赖库的源。这意味着开箱即用,您可以点击来提升源代码来探索它,并了解有关框架的更多信息。

如果要尝试插件的最新快照版本,则需要将快照存储库包含在plugin.sbt文件中:

resolvers +="Sonatype snapshots" at

 "http://oss.sonatype.org/content/repositories/snapshots/"

对于所有SBT项目而言,为全局设置SBT IDEA插件,与开发使用Eclipse”中的Eclipse相同

也可以看看

SBT-想法插件没有配置指南呢。发现功能的一种方法是浏览该项目的notes文件夹中的发行说明。

JetBrains Scala插件提供了一个博客,其中包含了新闻和技巧。

查看lift_proto H2数据库

问题

您正在开发使用默认的lift_proto.db H2数据库,并且您希望使用工具查看表。

使用作为H2一部分的Web界面。以下是步骤:

1.      找到H2 JAR文件。对我来说,这是:~/.ivy2/cache/com.h2database/h2/jars/h2-1.2.147.jar.

使用JAR文件从终端窗口启动服务器:java -cp /path/to/h2-version.jar org.h2.tools.Server.

2.     这应该启动您的网络浏览器,要求您登录。

3.     保存设置中选择通用H2服务器

4.     输入jdbc:h2:/path/to/youapp/lift_proto.db;AUTO_SERVER=TRUE for "JDBCURL,"调整数据库位置的路径,并调整数据库的名称(lift_proto.db),如果Boot.scala有所不同

5.     连接查看和编辑您的数据库。

讨论

包括数据库(例如lift_basic的默认Lift项目使用H2关系数据库,因为它可以作为SBT依赖项包含,并且不需要外部安装或配置。这是一个很好的产品,虽然生产部署通常使用独立的数据库,如PostgreSQLMySQL

即使您正在部署到非H2数据库,因为它具有内存模式,因此对于单元测试是非常有用的。这意味着您可以在内存中创建数据库,并在单元测试结束时将其丢弃。

如果您不喜欢Web界面,则此配方中描述的连接设置应为您提供配置其他SQL工具所需的信息。

也可以看看

H2站点列出了数据库引擎的功能和配置选项。

如果您经常使用控制台,请考虑使用开发节点中的Lift应用程序可以访问该控制台。这是由Diego Medina一篇博文中描述的

7章的示例Lift项目启用了H2控制台。

使用最新的Lift构建

问题

你想使用Lift的最新(快照)版本。

您需要对build.sbt文件进行两次更改。首先,引用快照库:

resolvers +="snapshots" at

 "http://oss.sonatype.org/content/repositories/snapshots"

其次,将liftVersion您的版本更改为最新版本。对于这个例子,让我们使用Lift3.0快照版本:

val liftVersion= "3.0-SNAPSHOT"

重新启动SBT(或发出reload命令)将触发最新版本的下载。

讨论

Lift的生产版本(例如2.5,2.6)以及里程碑版本(例如2.6-M3)和发布候选人(例如2.6-RC1)都会发布到版本库中。当SBT下载它们时,它们被下载一次。

快照版本不同:它们是自动构建的结果,并且经常更改。您可以强制SBT通过运行以下命令来解决的最新版本clean,然后update

也可以看看

要了解快照版本的详细信息,请参阅Maven Complete Reference

使用新版本的Scala

问题

刚刚发布了一个新的Scala版本,您想立即在Lift项目中使用它。

提供Scala版本与Lift使用的最新版本二进制兼容,您可以更改构建文件以使用最新版本的Scala

例如,假设您的build.sbt文件设置为使用Scala 2.11.1Lift 2.6

scalaVersion :="2.11.1"

 

libraryDependencies++= {

  val liftVersion = "2.6"

  Seq(

    "net.liftweb" %%"lift-webkit" % liftVersion % "compile->default"

  )

}

要使用Scala 2.11.2,只需更改其值scalaVersion

讨论

依赖关系具有特定的命名约定。例如,lift-webkitLift 2.6 的库称为lift-webkit_2.11-2.6.jar。通常,在build.sbt中,我们简单地引用"net.liftweb" %% "lift-webkit"SBT将其转换为可以下载的文件的名称。

如果由于任何原因需要控制下载的依赖关系,可以删除%%并使用%

scalaVersion :="2.11.2"

 

libraryDependencies++= {

  val liftVersion = "2.6"

  Seq(

    "net.liftweb" %"lift-webkit_2.11" % liftVersion % "compile->default"

  )

}

我们在这里做的是明确规定我们想要2.11 Scala版本的Lift。这是使用%%和依赖之间%的区别:%%您不要指定Scala版本,因为SBT将自动附加scalaVersion数字这个自动更改没有做,所以我们必须手动指定更多的详细信息库的名称。

请注意,这仅适用于Scala的次要版本:主要版本断开兼容性。例如,Scala 2.10.1Scala 2.10.2兼容,但不兼容于2.11

也可以看看

Scala用户邮件列表中讨论Scala中的二进制兼容性。

SBT库依赖关系页面描述SBT如何管理版本号。

使用最新Lift构建介绍如何使用Lift的快照版本。

 


0 0
原创粉丝点击