使用 sbt-native-packager 发布到 bintray 一个 zip 文件 [英] Publish to bintray a zip file with sbt-native-packager
问题描述
我想使用 sbt-native-launcher 将 zip 文件发布到 bintray.
I want to publish a zip file to bintray using the sbt-native-launcher.
我能够执行:
sbt publish
并发布主要工件(.jar、javadocs 等).
and it publishes the main artifacts (.jar, javadocs, and so on).
我也可以执行:
sbt universal:packageBin
它会生成 .zip 文件.
and it generates the .zip file.
但是,当我执行时:
sbt universal:publish
它给出了以下错误:
[info] Wrote C:\src\ShExcala\target\scala-2.10\shexcala_2.10-0.0.1.pom
tar: Cannot execute remote shell: No such file or directory
tar: C\:\\Users\\Labra\\AppData\\Local\\Temp\\sbt_407249ba\\shexcala-0.0.1.tar: Cannot open: I/O error
tar: Error is not recoverable: exiting now
[trace] Stack trace suppressed: run last universal:packageZipTarball for the full output.
[error] (universal:packageZipTarball) Error tarballing
C:\src\ShExcala\target\universal\shexcala-0.0.1.tgz. Exit code: 2
问题似乎出在universal:packageZipTarball"任务上,它也给出了同样的错误.
It seems that the problem is with the "universal:packageZipTarball" task which also gives the same error.
我正在使用 Windows,并且我已经检查过我是否安装了tar"、xz"和gzip".
I am using windows and I have checked that I have "tar", "xz" and "gzip" installed.
我现在不介意只发布 .zip,所以也许另一种解决方法就是知道如何配置 sbt-native-packager 以避免 packageZipTarball 任务.
I would not mind to publish only the .zip by now, so maybe another workaround is just to know how can I configure sbt-native-packager to avoid the packageZipTarball task.
build.sbt 定义是:
The build.sbt definition is:
import sbt._
import sbt.Keys._
import AssemblyKeys._
import bintray.Plugin.bintraySettings
import bintray.Keys._
import scala.scalajs.sbtplugin.ScalaJSPlugin.ScalaJSKeys._
lazy val root = project.in(file("."))//.settings(crossScalaVersions := Seq("2.10.4", "2.11.0"))
Build.sharedSettings
version := Build.currentVersion
libraryDependencies ++= Seq(
"org.specs2" %% "specs2" % "2.3.7" % "test"
, "org.scalatest" % "scalatest_2.10" % "2.0.1-SNAP" % "test"
, "commons-configuration" % "commons-configuration" % "1.7"
, "org.rogach" %% "scallop" % "0.9.5"
, "com.typesafe" % "config" % "1.0.1"
, "org.scala-lang" % "scala-compiler" % "2.10.2"
, "com.assembla.scala-incubator" % "graph-core_2.10" % "1.6.2"
, "org.apache.jena" % "jena-arq" % "2.10.1"
, "org.scalaz" % "scalaz-core_2.10" % "7.0.6"
, "es.weso" % "stateparser_2.10" % "0.0.1"
, "es.weso" % "wesin_2.10" % "0.0.1"
)
autoCompilerPlugins := true
seq(bintraySettings:_*)
Build.publishSettings
deploymentSettings
publishMavenStyle := true
// publish <<= publish.dependsOn(publish in config("universal"))
packageArchetype.java_application
resourceGenerators in Test += Def.task {
val location = url("https://github.com/shexSpec/test-suite/raw/gh-pages/tests.zip")
IO.unzipURL(location, resourceManaged.value / "downloadedTests").toSeq
}.taskValue
resolvers ++= Seq("snapshots", "releases").map(Resolver.sonatypeRepo)
和 project/build.scala
是:
import sbt._
import sbt.Keys._
import bintray.Plugin.bintraySettings
import bintray.Keys._
import Def.ScopedKey
import scala.scalajs.sbtplugin.ScalaJSPlugin._
object Build extends sbt.Build {
val isRelease = true
def repo = "weso-releases"
val shExcalaVersion = "0.0.1"
publishMavenStyle := false
val currentVersion = shExcalaVersion
protected val bintrayPublishIvyStyle = settingKey[Boolean]("=== !publishMavenStyle")
lazy val publishSettings = Seq(
repository in bintray := this.repo,
bintrayOrganization in bintray := Some("weso"),
licenses += ("MPL-2.0", url("http://opensource.org/licenses/MPL-2.0")),
bintrayPublishIvyStyle := true
)
val sharedSettings = Seq(
organization := "es.weso",
name := "shExcala",
scalaVersion := "2.10.4"
)
}
lastuniversal:packageZipTarball
的输出是:
> last universal:packageZipTarball
java.lang.RuntimeException: Error tarballing C:\src\ShExcala\target\universal\shexcala-0.0.1.tgz. Exit code: 2
at scala.sys.package$.error(package.scala:27)
at com.typesafe.sbt.packager.universal.Archives$$anonfun$makeTarball$1.apply(Archives.scala:134)
at com.typesafe.sbt.packager.universal.Archives$$anonfun$makeTarball$1.apply(Archives.scala:118)
at sbt.IO$.withTemporaryDirectory(IO.scala:285)
at com.typesafe.sbt.packager.universal.Archives$.makeTarball(Archives.scala:118)
at com.typesafe.sbt.packager.universal.Archives$$anonfun$10.apply(Archives.scala:111)
at com.typesafe.sbt.packager.universal.Archives$$anonfun$10.apply(Archives.scala:111)
at scala.Function3$$anonfun$tupled$1.apply(Function3.scala:35)
at scala.Function3$$anonfun$tupled$1.apply(Function3.scala:34)
at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:42)
at sbt.std.Transform$$anon$4.work(System.scala:64)
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
at sbt.Execute.work(Execute.scala:244)
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160)
at sbt.CompletionService$$anon$2.call(CompletionService.scala:30)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
[error] (universal:packageZipTarball) Error tarballing C:\src\ShExcala\target\universal\shexcala-0.0.1.tgz. Exit code: 2
>
推荐答案
我认为问题在于 Windows 的 tar
,它不接受绝对路径.sbt-native-packager 所做的是执行 tar -pcvf
I think the problem is with the tar
for windows, which does not accept absolute paths. What sbt-native-packager does is executing tar -pcvf <absolute-path> <input>
.
我不确定您是否可以轻松禁用 universal:packageZipTarball
任务.
I am not sure you can easily disable universal:packageZipTarball
task.
不过我可以提出一个解决方法.安装bsdtar,貌似没有这个问题,依然可以称为牛油果.从链接下载文件,并安装gnutar,安装后进入C:\Program Files\GnuWin32\bin 复制bsdtar.exe
到 tar.exe
.
I can propose a workaround though. Install bsdtar, which doesn't seem to have this issue, and still can be called as gnu tar. Download the file from the link, and install gnutar, after installation go to C:\Program Files\GnuWin32\bin and copy bsdtar.exe
to tar.exe
.
确保 tar
命令在您的 PATH
变量中.
Make sure the tar
command is in your PATH
variable.
这篇关于使用 sbt-native-packager 发布到 bintray 一个 zip 文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!