scala – 在SBT中的多项目构建下使用包为根项目生成无工件
发布时间:2020-12-16 09:27:27 所属栏目:安全 来源:网络整理
导读:我在SBT中有一个多项目构建配置,它由两个不相互依赖的不同模块组成.他们只是(碰巧)属于同一产品. 项目布局如下: myLib + build.sbt + myProject_1 | + build.sbt | + src | + ... + myProject_2 | + build.sbt | + src | + ... + project + Build.scala pro
我在SBT中有一个多项目构建配置,它由两个不相互依赖的不同模块组成.他们只是(碰巧)属于同一产品.
项目布局如下: myLib + build.sbt + myProject_1 | + build.sbt | + src | + ... + myProject_2 | + build.sbt | + src | + ... + project + Build.scala project / Build.scala包含常见设置,如下所示: import sbt._ import Keys._ object ApplicationBuild extends Build { val appVersion = "1.0-SNAPSHOT" val defaultScalacOptions = Seq( "-unchecked","-deprecation","-feature","-language:reflectiveCalls","-language:implicitConversions","-language:postfixOps","-language:dynamics","-language:higherKinds","-language:existentials","-language:experimental.macros","-Xmax-classfile-name","140") val defaultResolvers = Seq( "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/" ) val defaultLibraryDependencies = Seq( "org.specs2" %% "specs2" % "1.14" % "test","org.slf4j" % "slf4j-nop" % "1.7.5" % "test" ) val defaultSettings = Defaults.defaultSettings ++ Seq( scalacOptions ++= defaultScalacOptions,resolvers ++= defaultResolvers,libraryDependencies ++= defaultLibraryDependencies ) } 根构建文件build.sbt只需要将所有内容放在一起[我也尝试删除它..但是子项目不再被编译]: lazy val myProject_1 = project.in(file("myProject_1")) lazy val myProject_2 = project.in(file("myProject_2")) 最后这里是myProject_1 / build.sbt [我刚刚省略了myProject_2 / build.sbt,因为它非常相似,并没有为主题提供任何附加值]: name := "myProject_1" version := ApplicationBuild.appVersion ApplicationBuild.defaultSettings libraryDependencies ++= Seq( "commons-codec" % "commons-codec" % "1.8" ) 项目编译成功…但是当我发出命令sbt package时,会在根目标目录中生成一个空jar: j3d@gonzo:~/myLib/$ll target/scala-2.10 drwxrwxr-x 2 j3d j3d 4096 Dez 23 17:13 ./ drwxrwxr-x 5 j3d j3d 4096 Dez 23 17:13 ../ -rw-rw-r-- 1 j3d j3d 273 Dez 23 17:13 brix_2.10-0.1-SNAPSHOT.jar 我错过了什么吗?如何防止SBT生成这个空无用的jar? 解决方法
我建议在build.sbt中使用以下(重新)包定义的解决方法:
Keys.`package` := { (Keys.`package` in (a,Compile)).value (Keys.`package` in (b,Compile)).value } 其中a和b是(子)模块. lazy val a = project lazy val b = project 由于package是Scala中的关键字,因此需要引用才能解析. 它还需要完全限定,因为包是由Keys._和sbt._导入导入的,默认情况下是.sbt构建文件. /Users/jacek/sandbox/so/multi-packageBin/build.sbt:5: error: reference to package is ambiguous; it is imported twice in the same scope by import Keys._ and import sbt._ `package` := { ^ [error] Type error in expression 另请注意,我使用的是SBT 0.13.2-SNAPSHOT(从源代码构建),因此请谨慎使用(但我怀疑它会对任何版本的SBT 0.13产生影响). [multi-packagebin]> */*:sbtVersion [info] 0.13.2-SNAPSHOT [multi-packagebin]> projects [info] In file:/Users/jacek/sandbox/so/multi-packageBin/ [info] a [info] b [info] * multi-packagebin [multi-packagebin]> package [info] Updating {file:/Users/jacek/sandbox/so/multi-packageBin/}a... [info] Updating {file:/Users/jacek/sandbox/so/multi-packageBin/}b... [info] Resolving org.fusesource.jansi#jansi;1.4 ... [info] Done updating. [info] Resolving org.scala-lang#scala-reflect;2.10.3 ... [info] Packaging /Users/jacek/sandbox/so/multi-packageBin/b/target/scala-2.10/b_2.10-0.1-SNAPSHOT.jar ... [info] Done packaging. [info] Resolving org.fusesource.jansi#jansi;1.4 ... [info] Done updating. [info] Packaging /Users/jacek/sandbox/so/multi-packageBin/a/target/scala-2.10/a_2.10-0.1-SNAPSHOT.jar ... [info] Done packaging. [success] Total time: 1 s,completed Feb 23,2014 10:12:41 AM (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- vim – 如何使用vi将当前行替换为缓冲区中的内容
- 一个Unix的fork()系统调用的面试题
- 在Docker容器中运行Ruby Sinatra无法连接(通过Mac主机)或查
- WebService学习笔记-CXF支持的数据类型
- AngularJS入门(6)-Angular控制器
- bash – Unix find -exec:为什么以下行为有所不同?
- django-在此Dockerfile中在哪里创建Postgres用户名/密码?
- (二) 从Angular1到Angular2需要的预备知识
- angularjs – Angular UI select2 – 如何停止自动排序?
- 命令在使用emacs shell时清除shell