我想编译一个包含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的方式做到这一点?
我正在使用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)
两个问题:
由于修改后的二进制依赖性,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被改变了?
我需要从给定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) 当我运行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
知道什么是错的吗?
我想从测试目录中的 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 文件。
我想使用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) 什么是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的方式来做到这一点?
我想在光滑的查询中使用我的自定义对象作为值,类似于 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 ×7
sbt ×6
ant ×1
enums ×1
f# ×1
java ×1
javascript ×1
scala-2.10 ×1
scala-macros ×1
scalapb ×1
signature ×1
slick ×1
slick-3.0 ×1
target ×1