2017-10-16 163 views
2

例如:SBT:如何解决Maven依赖使用Maven的性质

lazy val someProject = project 
    .settings(
    scalaVersion := "2.12.3", 
    libraryDependencies += "org.jcuda" % "jcuda" % "0.8.0" 
) 

以上不能解决:

sbt:someProject> update 
[info] Updating ... 
[info] downloading https://repo1.maven.org/maven2/org/jcuda/jcuda/0.8.0/jcuda-0.8.0.jar ... 
[warn] Detected merged artifact: [NOT FOUND ] org.jcuda#jcuda-natives;0.8.0!jcuda-natives.jar (16ms). 
[warn] ==== public: tried 
[warn] https://repo1.maven.org/maven2/org/jcuda/jcuda-natives/0.8.0/jcuda-natives-0.8.0-${jcuda.os}-${jcuda.arch}.jar 
[info] [SUCCESSFUL ] org.jcuda#jcuda;0.8.0!jcuda.jar (227ms) 
[warn] :::::::::::::::::::::::::::::::::::::::::::::: 
[warn] ::    FAILED DOWNLOADS   :: 
[warn] ::^see resolution messages for details^:: 
[warn] :::::::::::::::::::::::::::::::::::::::::::::: 
[warn] :: org.jcuda#jcuda-natives;0.8.0!jcuda-natives.jar 
[warn] :::::::::::::::::::::::::::::::::::::::::::::: 

注意${jcuda.os}出现在错误消息。

+0

仅供参考,此工具可以与[coursier](http://get-coursier.io)一起使用(使用1.0.0-RC12进行测试)。 – al3xar

+0

@ al3xar请将其作为回答发布。 –

回答

5

正如你可以设置自定义设置,并提供了Maven的财产作为JVM属性的值解决方法:

lazy val mavenProps = settingKey[Unit]("workaround for Maven properties") 
lazy val jcudaOs = settingKey[String]("") 
lazy val jcudaArch = settingKey[String]("") 
lazy val someProject = project 
    .settings(
    scalaVersion := "2.12.3", 
    libraryDependencies += "org.jcuda" % "jcuda" % "0.8.0", 
    jcudaOs := "linux", 
    jcudaArch := "x86_64", 
    mavenProps := { 
     sys.props("jcuda.os") = jcudaOs.value 
     sys.props("jcuda.arch") = jcudaArch.value 
    () 
    } 
) 

此打出缺少的Maven的特性SBT设置,然后将其转换为sys.props在构建的加载时间。

+1

一时之间,我担心你实际上在问SBT问题。 :-) – stefanobaghino