Samba Share + Gradle = Java IO 异常

问题描述 投票:0回答:1

我正在使用带有 OpenDirectory 的新 Mac OS X Server (OS X 10.11) 和用于远程家庭设置的 samba 共享。 在此设置中使用 Android Studio 导致我遇到了 gradle 的一些问题。 Gradle 尝试锁定缓存目录中的文件,这会引发 java IOException。我可以将问题集中到这个演示代码上:

import java.io.*;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;

public class FileLockTest {

    public static void main(String[] args) throws Exception {
        RandomAccessFile file = null;
        FileLock fileLock = null;
        try
        {
            file = new RandomAccessFile(args[0], "rw");
            FileChannel fileChannel = file.getChannel();

            fileLock = fileChannel.tryLock();
            if (fileLock != null){
                System.out.println("File is locked");
            }
        } finally{
            if (fileLock != null){
                fileLock.release();
            }
        }
    }
}

使用文件名作为第一个参数编译并运行它会显示问题:本地文件可能被锁定(无论这意味着什么),但 samba 共享上的文件会抛出此异常

Exception in thread "main" java.io.IOException: Operation not supported
    at sun.nio.ch.FileDispatcherImpl.lock0(Native Method)
    at sun.nio.ch.FileDispatcherImpl.lock(FileDispatcherImpl.java:90)
    at sun.nio.ch.FileChannelImpl.tryLock(FileChannelImpl.java:1114)
    at java.nio.channels.FileChannel.tryLock(FileChannel.java:1155)
    at FileLockTest.main(FileLockTest.java:15)

现在问我的问题:有什么方法可以启用 mac OS X 服务器的 samba 共享的文件锁定功能吗?我是否错过了 samba 服务器的一些棘手设置?

这确实使得使用 Android Studio (/gradle) 无法通过 OpenDirectory 设置..

java android-studio gradle samba osx-server
1个回答
0
投票

这个问题已经有近 9 年历史了,没有答案,自从将我的源文件移动到基于 SAMBA 的 NAS 后,我一直遇到同样的问题。我正在使用 Flutter,它使用 Gradle 进行 Android 构建。由于无法锁定文件,构建全部失败。

花了很长时间在 SAMBA 服务器上尝试不同的设置来启用锁定、严格锁定、机会锁、二级机会锁和内核机会锁,但没有任何帮助。

我找到的解决方案是将

GRADLE_USER_HOME
环境变量设置为本地系统上的目录(例如:
/tmp/.gradle
),然后构建就能够完成。

© www.soinside.com 2019 - 2024. All rights reserved.