在sbt中将Visualization Toolkit(VTK)设置为项目依赖项?

时间:2014-03-21 11:19:37

标签: sbt vtk

我在 Ubuntu 13.10

我想在我的sbt项目中运行Visualization Toolkit (VTK)

我已经在libvtk上安装了突触包管理器。我可以毫无问题地使用VTK示例运行我的课程。但是当我尝试通过run命令在SBT上运行它时,我得到UnsatisfiedLinkError

我尝试了几件事。这意味着将vtk.jar添加到项目的lib文件夹中,并为Artenum的vtk尝试几个sbt依赖项。

我喜欢在sbt中运行所有内容,因为我使用其他一些东西进行测试等等。只编译内部具有vtk依赖性的类对我来说是没有选择。

设置路径等我也试过了。但我的意思是,我可以安装许多其他依赖项,而无需在我的操作系统中设置路径。

另一种方法是找到一个像vtk这样的工作图形工具,它可以作为Java / Scala中的依赖项运行。

这是我的build.sbt:

name := "selfoo"

version := "1.0"

scalaVersion := "2.10.3"

scalacOptions ++= Seq("-unchecked", "-deprecation", "-feature")

resolvers ++= Seq(
  "Sonatype OSS"  at "https://oss.sonatype.org/content/repositories/releases",
  "Typesafe"      at "http://repo.typesafe.com/typesafe/releases",
  "artenum"       at "http://maven.artenum.com/content/groups/public"
)

libraryDependencies ++= Seq(
  "com.typesafe.akka"       %% "akka-actor"     % "2.2.1",
  "com.typesafe.akka"       %% "akka-remote"    % "2.2.1",
  "com.typesafe.slick"      %% "slick"          % "1.0.1",
  "net.liftweb"             %% "lift-json"      % "2.5.1",
  // "com.h2database"       %% "h2"             % "1.3.166",
  // "com.googlecode.lanterna" %  "lanterna"       % "2.1.6",
  "commons-net"             %  "commons-net"    % "3.3",
  "jline"                   %  "jline"          % "2.11",
  "org.apache.mina"         %  "mina-core"      % "2.0.4",
  "org.apache.ftpserver"    %  "ftplet-api"     % "1.0.6",
  "org.apache.ftpserver"    %  "ftpserver-core" % "1.0.6",
  "org.slf4j"               %  "slf4j-api"      % "1.6.4",
  "org.scala-lang"          %  "scala-swing"    % "2.10+",
  "vtk"                     %  "vtk"            % "5.8.0",
  "org.slf4j"               %  "slf4j-simple"   % "1.6.4")

这是我得到的堆栈跟踪:

[info] Compiling 1 Scala source to /root/IdeaProjects/selfoo/target/scala-2.10/classes...
[info] Running ScalaCone 
[error] (run-main) java.lang.UnsatisfiedLinkError: vtk.vtkPoints.VTKInit()J
java.lang.UnsatisfiedLinkError: vtk.vtkPoints.VTKInit()J
    at vtk.vtkPoints.VTKInit(Native Method)
    at vtk.vtkObject.<init>(vtkObject.java:97)
    at vtk.vtkPoints.<init>(vtkPoints.java:166)
    at ScalaCone$.<init>(ScalaCone.scala:12)
    at ScalaCone$.<clinit>(ScalaCone.scala)
    at ScalaCone.main(ScalaCone.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
[trace] Stack trace suppressed: run 'last compile:run' for the full output.
java.lang.RuntimeException: Nonzero exit code: 1
    at scala.sys.package$.error(package.scala:27)
[trace] Stack trace suppressed: run 'last compile:run' for the full output.
[error] (compile:run) Nonzero exit code: 1
[error] Total time: 3 s, completed 21.03.2014 13:13:02

我尝试从http://ij-plugins.sourceforge.net/vtk-examples/ScalaCone.html

运行示例ScalaCone

1 个答案:

答案 0 :(得分:1)

截至今天,vtk未列在maven-central上。由于它依赖于机器的部分,我怀疑它会是什么(因为在jar文件中编译目标代码有点违反平台无关代码的想法 - 是的,我知道像swt这样的东西)。

话虽这么说,最简单的解决方案是将vtk java接口直接包含在项目中作为thirdparty元素。

如果查看源代码发行版的wrap / java文件夹,您会发现一些* .in文件包含由cmake扩展的宏。这些您必须适应使用系统安装的vtk库的方式。其余的只是普通的java,你应该可以重用它。

我知道这不是最好的解决方案,但它应该允许你保持相当平台独立(你只需要加载这个共享库)。另一方面,如果您不关心平台独立性,我谦虚地建议首先放弃Java;)。