Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何将非托管JAR添加到g8模板生成的build.sbt中?_Scala_Sbt - Fatal编程技术网

Scala 如何将非托管JAR添加到g8模板生成的build.sbt中?

Scala 如何将非托管JAR添加到g8模板生成的build.sbt中?,scala,sbt,Scala,Sbt,我正在Scala中从事libgdx/android项目。我有libgdx-sbt-project.g8模板生成的build.sbt。我正在尝试添加一个jar文件。谁能帮帮我吗? 代码如下: lazy val android = common ++ Tasks.natives ++ Seq( versionCode := 0, keyalias := "change-me", platformName := "android-19", mainAssetsPath in Compile := fi

我正在Scala中从事libgdx/android项目。我有libgdx-sbt-project.g8模板生成的build.sbt。我正在尝试添加一个jar文件。谁能帮帮我吗? 代码如下:

lazy val android = common ++ Tasks.natives ++ Seq(
versionCode := 0,
keyalias := "change-me",
platformName := "android-19",
mainAssetsPath in Compile := file("common/assets"),
unmanagedJars in Compile <+= (libraryJarPath) (p => Attributed.blank(p)) map( x=> x),
libraryDependencies ++= Seq(
  "com.badlogicgames.gdx" % "gdx-backend-android" % "0.9.9",
  "com.badlogicgames.gdx" % "gdx-platform" % "0.9.9" % "natives" classifier "natives-armeabi",
  "com.badlogicgames.gdx" % "gdx-platform" % "0.9.9" % "natives" classifier "natives-armeabi-v7a"
),
nativeExtractions <<= (baseDirectory) { base => Seq(
  ("natives-armeabi.jar", new ExactFilter("libgdx.so"), base / "lib" / "armeabi"),
  ("natives-armeabi-v7a.jar", new ExactFilter("libgdx.so"), base / "lib" / "armeabi-v7a")
)})
lazy val android=common++Tasks.natives++Seq(
版本代码:=0,
keyalias:=“更改我”,
平台名称:=“android-19”,
编译中的MainAssetPath:=文件(“公共/资产”),
Compile Attributed.blank(p))映射(x=>x)中的unmanagedJars,
libraryDependencies++=Seq(
“com.badlogicgames.gdx”%“gdx后端android”%“0.9.9”,
“com.badlogicgames.gdx”%“gdx平台”%“0.9.9”%“本地人”分类器“本地人armeabi”,
“com.badlogicgames.gdx”%“gdx平台”%“0.9.9”%“本地人”分类器“本地人-armeabi-v7a”
),
nativeExtractions将jar保存到
libraryJarPath
重新加载
项目所指向的目录中,您应该将它们放在
编译
类路径上

要查询
libraryJarPath
设置的值,请在sbt shell中执行
show libraryJarPath

如果您在GitHub上共享该项目,这将非常有帮助,这样可以更容易地提供帮助

亲自试用libgdx-sbt-project.g8 如果使用默认值的项目模板:

~/sandbox/so
▶ g8 ajhager/libgdx-sbt-project
package [my.game.pkg]:
name [My Game]:
scala_version [2.10.3]:
api_level [19]:
libgdx_version [0.9.9]:

Template applied in ./my-game

~/sandbox/so
▶ cd my-game
我将首先更新项目中使用的sbt:

sandbox/so/my-game
▶ cat project/build.properties
sbt.version=0.12.4
0.12.4已经很老了,因为0.13.2已经过时,0.13.5即将到来。他们带来了许多构建定义语法的更改,这些更改被认为是为了简化构建工作

我正在使用0.13.6-SNAPSHOT启动器:

sandbox/so/my-game
▶ xsbt --version
sbt launcher version 0.13.6-SNAPSHOT
启动sbt:

sandbox/so/my-game                                                                                                                                                             
▶ xsbt
Getting org.scala-sbt sbt 0.12.4 ...
...
[info] Done updating.
[info] Compiling 1 Scala source to /Users/jacek/sandbox/so/my-game/project/target/scala-2.9.2/sbt-0.12/classes...
[error] Android SDK not found. You might need to set ANDROID_SDK_HOME or ANDROID_SDK_ROOT or ANDROID_HOME
[error] Use 'last' for the full log.
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore? q

sandbox/so/my-game
▶ ANDROID_SDK_HOME=~/apps/android-sdk-mac_x86 xsbt
[info] Loading project definition from /Users/jacek/sandbox/so/my-game/project
[info] Set current project to all-platforms (in build file:/Users/jacek/sandbox/so/my-game/)
>
inspect
Compile中的
unmanagedJars提供:

> show compile:unmanaged-jars
[info] common/compile:unmanaged-jars
[info]  ArrayBuffer()
[info] desktop/compile:unmanaged-jars
[info]  ArrayBuffer()
[info] android/compile:unmanaged-jars
[info]  ArrayBuffer(Attributed(/Users/jacek/apps/android-sdk-mac_x86/platforms/android-19/android.jar))
[info] ios/compile:unmanaged-jars
[info]  ArrayBuffer()
[info] all-platforms/compile:unmanaged-jars
[info]  ArrayBuffer()
[success] Total time: 0 s, completed May 27, 2014 11:45:47 PM
将要包含在类路径中的jar放入:

sandbox/so/my-game
▶ mkdir -p android/lib/

sandbox/so/my-game
▶ touch android/lib/my-shiny-android-library.jar

sandbox/so/my-game
▶ ANDROID_SDK_HOME=~/apps/android-sdk-mac_x86 xsbt
[info] Loading project definition from /Users/jacek/sandbox/so/my-game/project
[info] Set current project to all-platforms (in build file:/Users/jacek/sandbox/so/my-game/)
> show unmanaged-jars
[info] common/compile:unmanaged-jars
[info]  ArrayBuffer()
[info] desktop/compile:unmanaged-jars
[info]  ArrayBuffer()
[info] android/compile:unmanaged-jars
[info]  ArrayBuffer(Attributed(/Users/jacek/sandbox/so/my-game/android/lib/my-shiny-android-library.jar), Attributed(/Users/jacek/apps/android-sdk-mac_x86/platforms/android-19/android.jar))
[info] ios/compile:unmanaged-jars
[info]  ArrayBuffer()
[info] all-platforms/compile:unmanaged-jars
[info]  ArrayBuffer()
[success] Total time: 0 s, completed May 27, 2014 11:54:40 PM
有趣的是,设置
libraryJarPath
可用为(注意名称中的
y
):

要查询该值,应使用sbt shell中的
库jary路径
设置名称:

> show library-jary-path
[info] /Users/jacek/apps/android-sdk-mac_x86/platforms/android-19/android.jar
要查看以下语法正在执行的操作

unmanagedJars in Compile <+= (libraryJarPath) (p => Attributed.blank(p)) map(x => x)

apply
map
之后,将附加转换后的值,
关于您说您不理解语法的点,请检查我的回答,我没有足够的代表投票,但非常感谢您的帮助!
> show library-jary-path
[info] /Users/jacek/apps/android-sdk-mac_x86/platforms/android-19/android.jar
unmanagedJars in Compile <+= (libraryJarPath) (p => Attributed.blank(p)) map(x => x)
> console-project
[info] Starting scala interpreter...
[info]
import sbt._
import Process._
import Keys._
import _root_.sbtandroid.AndroidPlugin._
import _root_.sbtrobovm.RobovmPlugin._
import LibgdxBuild._
import currentState._
import extracted._
Welcome to Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_55).
Type in expressions to have them evaluated.
Type :help for more information.

scala> libraryJarPath
res0: sbt.SettingKey[sbt.package.File] = sbt.SettingKey$$anon$4@4db9c8c3

scala> libraryJarPath(p => Attributed.blank(p))
res1: sbt.Project.Initialize[sbt.Attributed[sbt.package.File]] = sbt.Init$GetValue@2ed40452

scala> libraryJarPath.apply(p => Attributed.blank(p))
res2: sbt.Project.Initialize[sbt.Attributed[sbt.package.File]] = sbt.Init$GetValue@14e6f49b

scala> libraryJarPath.apply(p => Attributed.blank(p)) map (x => x)
res3: sbt.Project.Initialize[sbt.Task[sbt.Attributed[sbt.package.File]]] = sbt.Init$GetValue@48a4f61e

scala> libraryJarPath.apply(p => Attributed.blank(p)) map identity
res4: sbt.Project.Initialize[sbt.Task[sbt.Attributed[sbt.package.File]]] = sbt.Init$GetValue@526c8b39
scala> get(libraryJarPath in Compile in android)
res5: sbt.package.File = /Users/jacek/apps/android-sdk-mac_x86/platforms/android-19/android.jar