1

私は SBT を初めて使用し、プロジェクトの 1 つに RPM パッケージを作成する必要があります。RPM には、sbt-onejar プラグインによって作成された 1 つの jar ファイルが 1 つだけ含まれています)。sbt-native-packager プラグインを使用したいので、次のように /project ディレクトリの下に Packagin.scala ファイルを作成しました。

object Packaging {
  val settings: Seq[Setting[_]] = packagerSettings ++ deploymentSettings ++ mapGenericFilesToLinux ++ Seq(

    maintainer := "Team",
    packageSummary := "Summary",
    packageDescription := """Description""",

    mappings in Universal += {
      file("target/scala-2.10/projectname_2.10-0.1-one-jar.jar") -> "/opt/projectname/projectname-0.1.jar"
    },

    linuxPackageMappings in Rpm <+= (baseDirectory) map { _:File =>
      (packageMapping(file("target/scala-2.10/projectname_2.10-0.1-one-jar.jar") -> "/opt/projectname/projectname-0.1.jar")
        withUser "someusr" withGroup "somegroup" withPerms "0755")
    },

    name in Rpm := "projectname",
    version in Rpm <<= version apply { sv => sv split "[^\\d]" filterNot (_.isEmpty) mkString "." },
    rpmRelease := "1",
    rpmVendor := "Vendor",
    rpmUrl := Some("url"),
    rpmGroup := Some("group"),
    rpmLicense := Some("BSD")
  )
}

1) ファイル名をハードコーディングしたくありません。代わりに、"target/scala-2.10/projectname_2.10-0.1-one-jar.jar"既存の SettingKey を使用する方法が必要です。つまり、target + "scala-" + scalaVersion + "/" + name + "_" + scalaVersion + "-" + version + "-one-jar.jar"これをどのように行うのですか =

2)rpmRelease := "1"システム プロパティを使用したい値については、つまり Maven では${rpm.buildNumber}、SBT ではどのように機能しますか?

3) sbt-native-packager プラグインに関して何か改善すべき点はありますか?

4

1 に答える 1

3

1) sbt では、生のファイルシステム ルックアップではなく、常にタスク出力を使用する必要があります。sbt には並列実行があるため、タスクの出力に明示的な依存関係を設定しない場合、タスクを実行する前にファイルが作成されるという保証はありません。

その意味で、パッケージ マッピングの行を次のように変更します。

mappings in Universal += {
  oneJar.value -> "/opt/projectname/projectname-0.1.jar"
},

oneJarキーが onejar プラグインで定義されている場所

2) Sbt はビルド言語に scala を使用するだけなので、同様にシステム プロパティを取得できます (ただし、デフォルトも指定してください)。

rpmRelease := Option(sys.props("rpm.buildNumber")) getOrElse "1"

3) 現在、汎用パッケージ定義し、Rpm 内の同じファイルを別のユーザーで再定義しています。設定にはまだいくつかのカスタマイズが欠けていますが、ユニバーサル ディストリビューションを作成していない場合は、そのmapGenericFilesToLinux設定を削除して、代わりに Linux パッケージを直接構成できるはずです。

linuxPackageMappings in Rpm <+= (oneJar) map { jar:File =>
  (packageMapping(jar -> "/opt/projectname/projectname-0.1.jar")
    withUser "someusr" withGroup "somegroup" withPerms "0755")
},
于 2013-12-09T16:55:43.987 に答える