小编nau*_*nau的帖子

SBT使用项目定义的生成器生成代码

我想编译一个包含java源代码生成器的项目,然后在单个项目中编译生成的代码.即:编译Generator.scala,运行Generator.generate(outputDir),将outputDir,package编译成jar.我正在尝试这个:

sourceGenerators in Compile <+= sourceManaged in Compile map { out =>
    Generator.generate(out / "generated")
}
Run Code Online (Sandbox Code Playgroud)

但是sbt抱怨

[error] Build.scala:1: object example is not a member of package org
[error] import org.example.Generator
Run Code Online (Sandbox Code Playgroud)

基本上,sbt没有看到它编译的项目中定义的Generator.是不是可以用sbt的方式做到这一点?

code-generation sbt

16
推荐指数
1
解决办法
3136
查看次数

Sbt用于持续集成:打印堆栈跟踪并在出错时退出

我正在使用Sbt进行持续集成(Bamboo).我想检查所有环境变量是否已设置或获取描述性错误消息.我使用以下方法:

def env(n: String) = Option(System.getenv(n)).getOrElse(throw new RuntimeException("Undefined required environment variable " + n))

val mySetting = env("REQUIRED_ENV_VAR") + "..."
Run Code Online (Sandbox Code Playgroud)

相反,我得到了

[error] java.lang.ExceptionInInitializerError
[error] Use 'last' for the full log.
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore? q
Run Code Online (Sandbox Code Playgroud)

两个问题:

  1. 如何在不需要使用'last'的情况下获得完整的堆栈跟踪(简单的不能在Bamboo上执行)?
  2. 如果项目加载失败而不是要求重试等,如何告诉sbt退出?

continuous-integration scala sbt

7
推荐指数
1
解决办法
758
查看次数

由于修改后的二进制依赖关系rt.jar,Sbt总是进行完全重建

由于修改后的二进制依赖性,Sbt总是进行完全重建:rt.jar:

[debug] 
[debug] Initial source changes: 
[debug]     removed:Set()
[debug]     added: Set()
[debug]     modified: Set()
[debug] Removed products: Set()
[debug] Modified external sources: Set()
[debug] Modified binary dependencies: Set(C:\Program Files\Java\jdk1.6.0_37\jre\lib\rt.jar)
[debug] Initial directly invalidated sources: Set()
Run Code Online (Sandbox Code Playgroud)

显然,rt.jar没有改变,它的创建/访问/修改日期是相同的和相当古老的.

它位于c:\ Program Files\Java\jdk1.6.0_37\jre\lib \

JAVA_HOME设置为C:\ Progra~1\Java\jdk1.6.0_37

JAVA_HOME/bin在PATH中.

任何想法为什么sbt认为rt.jar被改变了?

scala sbt

6
推荐指数
1
解决办法
671
查看次数

F#模块签名文件的用例是什么?

与OCaml不同,F#模块签名文件大多没用,因为F#没有仿函数吗?

F#模块签名文件的用例是什么?

f# signature

6
推荐指数
1
解决办法
239
查看次数

如何使用Scala的Enum.valueOf?

我需要从给定Enum的Class实例的字符串中获取Java枚举值.我尝试了下面的代码,但我得到"未绑定的通配符类型"编译错误.似乎,我需要对存在类型做一些事情,对于某些事情,但是我无法理解如何做到这一点.

val paramClass = method.getParameterTypes()(0)
val value = paramClass match {
  case _ if classOf[Enum[_]].isAssignableFrom(paramClass) => Enum.valueOf[_ <: Enum[_]](paramClass.asInstanceOf[Class[_ <: Enum[_]]], "MYENUM")
Run Code Online (Sandbox Code Playgroud)

java enums scala existential-type

5
推荐指数
1
解决办法
1965
查看次数

对于getEngineByName("JavaScript"),Sbt 0.13 ScriptEngine为空

当我运行getEngineByName("JavaScript")在sbt 0.13 中使用的测试时,该方法返回null.安全代码适用于sbt 0.12.x.

尝试在不同的环境:Windows 7和Mac - 同样的问题.

我试图手动设置javaHomesbt.

test:dependencyClasspath 包含 .ivy2/cache/rhino/js/jars/js-1.6R7.jar

知道什么是错的吗?

javascript scala sbt

3
推荐指数
1
解决办法
939
查看次数

scalapb如何从测试目录中的protobuf文件生成代码?

我想从测试目录中的 protobuf 文件生成代码。

project/test/protobuf/myproto.proto
Run Code Online (Sandbox Code Playgroud)

这是行不通的。

PB.targets in Test := Seq(
  scalapb.gen() -> (sourceManaged in Test).value
)
Run Code Online (Sandbox Code Playgroud)

看起来 scalapb 只在 main/protobuf 目录中生成 protos 文件。

protocol-buffers sbt scalapb

3
推荐指数
1
解决办法
1235
查看次数

使用Scala宏在树中查找所有可能的序列创建

我想使用Scala宏在树中找到所有可能的序列创建.

val l = List(1, 2)
val v = Vector(1, 2)
val ab = ArrayBuffer(1, 2)
val s = Seq(1, 2)
Run Code Online (Sandbox Code Playgroud)

但以下匹配不起作用:

case Apply(TypeApply(Select(path, Name("apply")), _), args) if path.tpe <:< weakTypeOf[SeqFactory[Any]] => ...
Run Code Online (Sandbox Code Playgroud)

同样,我需要通过索引查找序列的所有访问:

val v = Vector(1, 2)
val one = v(0)
Run Code Online (Sandbox Code Playgroud)

或路径上的所有'apply'方法调用,即path.tpe <:<???? [Seq [_]

怎么写这张支票?这不编译:

case Apply(Select(path, Name("apply")), List(idx)) if path.tpe <:< typeOf[Seq[_]]
Run Code Online (Sandbox Code Playgroud)

scala scala-2.10 scala-macros

2
推荐指数
1
解决办法
227
查看次数

SBT相当于Ant目标

什么是Ant目标的SBT等价物(如果有的话)?例如,Ant的build.xml文件中的代码段将是:

<target name="runClient" description="run client">
    <java classname="client.Client" fork="true">
        <jvmarg value="-Djava.rmi.server.codebase=${client_web_codebase}"/>
        <jvmarg value="-Djava.security.policy=policy"/>
        <arg value="localhost"/>
        <classpath>
            <pathelement location="dist/client.jar"/>
        </classpath>
    </java>
</target>
Run Code Online (Sandbox Code Playgroud)

然后我会做类似的事情ant runClient,用XML中指定的jvmargs启动应用程序"client.Client".是否有SBT等效,或SBT挂钩到Ant的方式来做到这一点?

ant scala target sbt

0
推荐指数
1
解决办法
935
查看次数

Slick 如何将 scala 对象映射到列并在查询中使用对象

我想在光滑的查询中使用我的自定义对象作为值,类似于 Scala Enumeration。

sealed trait UserStatus
object UserStatus {
  object Active extends UserStatus
  object Deleted extends UserStatus
}
Run Code Online (Sandbox Code Playgroud)

我已经为 UserStatus 定义了 MappedColumnType 并且它工作正常。

implicit val UserStatusColumn = MappedColumnType.base[UserStatus, String](_.toString, _ => UserStatus.Active)
Run Code Online (Sandbox Code Playgroud)

直到我想在查询中使用这些对象。

for {
  u <- slickUsers
  if u.status === UserStatus.Active
} yield u
Run Code Online (Sandbox Code Playgroud)

我得到错误

Error:(26, 34) type mismatch;
 found   : models.UserStatus.Active.type
 required: slick.lifted.Rep[?]
      if u.status === UserStatus.Active
Run Code Online (Sandbox Code Playgroud)

当我明确说它是 UserType 时,它​​工作正常:

for (u <- slickUsers if u.status === UserStatus.Active.asInstanceOf[UserStatus]) yield u
Run Code Online (Sandbox Code Playgroud)

我需要以某种方式提示 Slick Active.type 是 UserStatus 类型。知道怎么做吗?

scala slick slick-3.0

0
推荐指数
1
解决办法
802
查看次数