为SBT依赖项设置javac选项

Law*_*eld 4 scala javac sbt

我在编译通过GIT加载的Java依赖项时遇到问题:

object ApplicationBuild extends Build {
  lazy val project = Project("root", file(".")).dependsOn(RootProject(riakJavaClient))

  lazy val riakJavaClient = uri("git://github.com/basho/riak-java-client")
}
Run Code Online (Sandbox Code Playgroud)

我收到的错误sbt compile是:

[info] Compiling 134 Java sources to /Users/lawrencewagerfield/.sbt/0.13/staging/da0e66c4764a467c8977/riak-java-client/target/scala-2.10/classes...
[error] /Users/lawrencewagerfield/.sbt/0.13/staging/da0e66c4764a467c8977/riak-java-client/src/main/java/com/basho/riak/client/cap/Quorum.java:22: error: unmappable character for encoding ASCII
[error]  * Riak 0.12 introduced ???symbolic??? consistency options for R and W 
Run Code Online (Sandbox Code Playgroud)

SBT似乎javac正在使用与此依赖项中的源文件不兼容的编码执行.

我尝试添加以下内容build.sbt,但它没有效果(错误是相同的):

javacOptions ++= Seq("-encoding", "UTF-16") // Note: I have tried with UTF-8 too
Run Code Online (Sandbox Code Playgroud)

上述内容仅适用于我项目中的源文件吗?知道如何通过这个问题吗?


TL; DR如何使用正确的编码来编译Java依赖项?

Mar*_*rah 10

您是正确的,该设置仅适用于项目中的源文件.如果未指定范围的项目部分(这是典型的),则默认为封闭项目.要将设置应用于其他项目,请将其范围限定为该项目.例如,

javacOptions in riakJavaClient ++= Seq("-encoding", "UTF-8")
Run Code Online (Sandbox Code Playgroud)

您可以验证您的选项是否正在使用last.例如,

sbt> last compile
Run Code Online (Sandbox Code Playgroud)

要从git在项目上运行上述命令,project请使用(请参阅help project详细信息)进行更改.