Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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
获取对sbt中jar程序集路径的引用_Sbt - Fatal编程技术网

获取对sbt中jar程序集路径的引用

获取对sbt中jar程序集路径的引用,sbt,Sbt,我正在使用构建一个安装程序。看起来有一个错误,包文件名的变量没有被正确引用。我希望主震击器能够正确打包,如下所示: variables in IzPack += ("artifactName", artifactFileName.value ) 问题是我不知道如何获取主工件的路径字符串。假设我可以映射到包并获得一个工件、文件对,如下所示: val artifactFileName = settingKey[String]("My task.") artifactFileName := {

我正在使用构建一个安装程序。看起来有一个错误,包文件名的变量没有被正确引用。我希望主震击器能够正确打包,如下所示:

variables in IzPack += ("artifactName", artifactFileName.value )
问题是我不知道如何获取主工件的路径字符串。假设我可以映射到包并获得一个工件、文件对,如下所示:

val artifactFileName = settingKey[String]("My task.")

artifactFileName :=  {
  val (art, file) = packagedArtifact.in(Compile, packageBin).value
  println("Artifact definition: " + art)
  println("Packaged file: " + file.getAbsolutePath)
  file.getAbsolutePath
}
但sbt抱怨设置不能依赖于任务

有没有一种方法可以让我不需要在任务中首先生成主程序集,就可以通过设置传递主程序集的路径


或者,是否有办法更新任务中提供给izpack的设置?

答案似乎在文档中,但并不明显,因为它在关于修改工件而不是读取其属性的部分

发件人::

除了发布工件外,每个内置工件都有几个可配置的设置。基本的是SettingKey[artifact]类型的工件、TaskKey[File,String]类型的映射和SettingKey[File]类型的工件路径。如前一节所示,它们的范围是

因此,您可以通过以下方式获得artifactPath的字符串值,这是一个设置,因此在izPack设置中可用:

lazy val artifactPathExt = settingKey[String]("Get the main artifact path")
artifactPathExt := (artifactPath in (Compile, packageBin)).value.getPath
虽然我完全忘记了我是如何发现这一点的,但以下是人们如何发现sbt中的信息可发现性是一个问题:

我们知道包任务构建了主输出,因此您可以键入:

inspect tree package
在sbt提示符下,将显示以下树:

> inspect tree package
[info] compile:package = Task[java.io.File]
[info]   +-compile:packageBin = Task[java.io.File]
[info]     +-compile:packageBin::packageConfiguration = Task[sbt.Package$Conf..
[info]     | +-compile:packageBin::artifactPath = target\scala-2.11\scaladaem..
[info]     | | +-*:scalaBinaryVersion = 2.11
[info]     | | +-*:scalaVersion = 2.11.5
在这里,您可以看到包任务需要compile:packageBin::packageConfiguration。您可以在sbt提示符下检查此设置的值

要在构建中真正掌握这个值,您必须知道如何引用它。你必须弄清楚钥匙、任务和密码。你必须知道从中取出钥匙的语法。最后,您必须知道如何以及如何在运行时引用和声明设置和任务。最后,您必须知道如何使用一个设置来设置另一个设置


唷。

答案似乎在文档中,但并不明显,因为它在关于修改工件的部分,而不是读取它们的属性

发件人::

除了发布工件外,每个内置工件都有几个可配置的设置。基本的是SettingKey[artifact]类型的工件、TaskKey[File,String]类型的映射和SettingKey[File]类型的工件路径。如前一节所示,它们的范围是

因此,您可以通过以下方式获得artifactPath的字符串值,这是一个设置,因此在izPack设置中可用:

lazy val artifactPathExt = settingKey[String]("Get the main artifact path")
artifactPathExt := (artifactPath in (Compile, packageBin)).value.getPath
虽然我完全忘记了我是如何发现这一点的,但以下是人们如何发现sbt中的信息可发现性是一个问题:

我们知道包任务构建了主输出,因此您可以键入:

inspect tree package
在sbt提示符下,将显示以下树:

> inspect tree package
[info] compile:package = Task[java.io.File]
[info]   +-compile:packageBin = Task[java.io.File]
[info]     +-compile:packageBin::packageConfiguration = Task[sbt.Package$Conf..
[info]     | +-compile:packageBin::artifactPath = target\scala-2.11\scaladaem..
[info]     | | +-*:scalaBinaryVersion = 2.11
[info]     | | +-*:scalaVersion = 2.11.5
在这里,您可以看到包任务需要compile:packageBin::packageConfiguration。您可以在sbt提示符下检查此设置的值

要在构建中真正掌握这个值,您必须知道如何引用它。你必须弄清楚钥匙、任务和密码。你必须知道从中取出钥匙的语法。最后,您必须知道如何以及如何在运行时引用和声明设置和任务。最后,您必须知道如何使用一个设置来设置另一个设置


唷。

sbt izpack中仍然存在此问题,您的解决方案非常有效。谢谢这个问题仍然存在于sbt izpack中,您的解决方案非常有效。谢谢