Nix对您下载的tar进行一些自动检测,假设它包含一个目录。要跳过它,您可以添加
sourceRoot = ".";
对你的推导是这样的:
{
stdenv,
fetchurl,
gnutar,
...
}: stdenv.mkDerivation {
pname = "jdtls";
version = "1.28.0";
src = fetchurl {
url = "https://www.eclipse.org/downloads/download.php?file=/jdtls/snapshots/jdt-language-server-1.28.0-202309211406.tar.gz";
sha256 = "q9O44I8iLuNT/eD1IDVnoa1TQgzEIhl2YF40wD0y/sA=";
};
sourceRoot = ".";
nativeBuildInputs = [ gnutar ];
buildPhase = ''
ls -l
# mkdir -p $out/share
# tar -xf $src -d $out/share
# mv $out/share/bin $out
'';
}
你可以看到
in the default unpackPhase
它是如何出错的。