文件名太长sbt

Filename too long sbt

我收到一条错误消息,提示我在 sbt 中有一个太长的文件。

 [info] Compiling 29 Scala sources to /home/chris/dev/suredbits-core/target/scala-2.11/classes...
    [error] File name too long
    [error] one error found
    [error] (compile:compile) Compilation failed
    [error] Total time: 7 s, completed Feb 17, 2015 8:10:25 AM

如何找出哪个文件太长以便缩短文件名?我添加了编译器标志 -Xmax-classfile-name 并将其设置为 254.

尝试使用这样的 shell 脚本:

#!/bin/sh

for file in *; do {
        echo -m "$file" | wc -m;
        echo "$file"
}
done

运行 在您的 src/main/scala 目录中应该会显示哪些文件的名称超过 254 个字符。我希望这能回答你的问题。

这就是我解决问题的方法

mkdir /tmp/myproject-target
cd ~/workspace/myproject
rm -rf target
ln -s /tmp/myproject-target target

如果您的 /home 是一个加密文件系统(例如 LUKS),您可能 运行 遇到这个问题。

max-classfile-name 设置为 254 是默认值(或者它可能是 255)- 因此您不会将其减少太多。您可能应该考虑接近 70 - 100 的最大长度。您可以通过使用 scalac 覆盖创建 ~/.sbt/0.13/local.sbt 来为所有项目设置它:

scalacOptions ++= Seq("-Xmax-classfile-name","78")

我在 IntelliJ Ultimate 2016.1.2(类似于 Intellij 14)中遇到了这个问题。我通过设置解决了它:

-Xmax-classfile-name 78 

文件>设置...>构建、执行、部署>编译器>Scala编译器>附加编译器选项

注意:选项名称及其值(“78”)之间有一个space,而不是等号。

  • 设置文件长度限制可能不安全,我找不到任何官方文档证明此解决方案是安全的。
  • 使用未加密的目录不安全。

我想提供一种不同的方法:

  • 安装veracrypt (in ubuntu with apt)
  • 创建一个非加密目录(在加密的用户主目录之外)
  • 在新目录中创建一个 veracrypt 文件容器
  • 中安装容器

  • 即使挂载点在加密目录中,sbt 也能正常工作)
  • 可以使用复杂密码创建容器并在登录时挂载

    veracrypt -t --pim=0 --protect-hidden=no -k "" -p $PASSWORD $ENCRYPTED_CONTAINER $MOUNT_DIR