2

ユニバーサル sbt-native-packager を使用して、zip ファイルの配布を生成します。

sbt universal:packageBin

生成された zip ファイルを抽出すると、zip ファイルとして名前が付けられたメイン ディレクトリ内のすべてが含まれます。

unzip my-project-0.0.1.zip

my-project-0.0.1/bin
my-project-0.0.1/lib
my-project-0.0.1/conf
...

ルート フォルダを持たない zip を作成して、解凍するとそのような構造になるようにするにはどうすればよいですか?

bin
lib
conf

ありがとう

4

2 に答える 2

1

sbt と scala については、プル リクエストを送信できるほど自信がありません。bashスクリプトは今すぐ除外する必要があるため、私の現在の(そして醜い)解決策は次のとおりです。

packageBin in Universal := { val originalFileName = (packageBin in Universal).value val (base, ext) = originalFileName.baseAndExt val newFileName = file(originalFileName.getParent) / (base + "_dist." + ext) val extractedFiles = IO.unzip(originalFileName,file(originalFileName.getParent)) val mappings: Set[(File, String)] = extractedFiles.map( f => (f, f.getAbsolutePath.substring(originalFileName.getParent.size + base.size + 2))) val binFiles = mappings.filter{ case (file, path) => path.startsWith("bin/")} for (f <- binFiles) f._1.setExecutable(true) ZipHelper.zip(mappings,newFileName) IO.move(newFileName, originalFileName) IO.delete(file(originalFileName.getParent + "/" + originalFileName.base)) originalFileName }

githubで提案された解決策は、私にとってはうまくいかなくても、私のものよりもはるかに優れているようです: https://github.com/sbt/sbt-native-packager/issues/276

于 2014-11-12T12:28:42.347 に答える
0

残念ながら、その最上位ディレクトリの名前は、配布可能な zip の名前と同じになるように固定されているようです ( GitHubの ZipHelper ソースの24 行目を確認してください)。

そのため、構成可能にしてプル リクエストを送信したくない場合は、コマンド ラインで結果の zip を変更する方が簡単かもしれません (UNIX のフレーバーを想定しています)。

unzip my-project-0.0.1.zip && cd my-project-0.0.1 && zip -r ../new.zip * && cd -

new.zipこれにより、既存の zip ファイルと一緒に作成さmvれます。

于 2014-11-12T00:17:19.843 に答える