gpt4 book ai didi

java.lang.NoClassDefFoundError(Java、Eclipse、Fuse-JNA、Ubuntu)

转载 作者:行者123 更新时间:2023-11-29 05:31:47 24 4
gpt4 key购买 nike

通过 eclipse,我正在尝试运行 fuse-jna 的文件系统 (HelloFS.java) 的内置示例,但它给了我 java.lang.NoClassDefFoundError 。

我的源项目在/home/syed/workspace/HelloFS

fuse-jna 类文件在 home/syed/Downloads/fuse-jna-master/build/classes/main/net/fusejna

在 eclipse 中,我通过构建路径添加了类文件夹,还在环境文件中添加了 jre 路径。我在下面附上了快照。

请帮我在eclipse中运行这个例子。

错误:

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/jna/Structure
at net.fusejna.FuseFilesystem.mount(FuseFilesystem.java:545)
at net.fusejna.FuseFilesystem.mount(FuseFilesystem.java:550)
at HelloFS.main(HelloFS.java:22)
Caused by: java.lang.ClassNotFoundException: com.sun.jna.Structure
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 3 more

这是内置示例文件系统的代码(没有红色下划线,我认为这意味着正确输入了 eclipse 构建路径,):

import java.io.File;
import java.nio.ByteBuffer;

import net.fusejna.DirectoryFiller;
import net.fusejna.ErrorCodes;
import net.fusejna.FuseException;
import net.fusejna.StructFuseFileInfo.FileInfoWrapper;
import net.fusejna.StructStat.StatWrapper;
import net.fusejna.types.TypeMode.NodeType;
import net.fusejna.util.FuseFilesystemAdapterFull;

public class HelloFS extends FuseFilesystemAdapterFull
{
public static void main(String args[]) throws FuseException
{
/*if (args.length != 1) {
System.err.println("Usage: HelloFS <mountpoint>");
System.exit(1);
}*/
new HelloFS().log(true).mount("./testfs1");
}

private final String filename = "/hello.txt";
private final String contents = "Hello World!\n";

@Override
public int getattr(final String path, final StatWrapper stat)
{
if (path.equals(File.separator)) { // Root directory
stat.setMode(NodeType.DIRECTORY);
return 0;
}
if (path.equals(filename)) { // hello.txt
stat.setMode(NodeType.FILE).size(contents.length());
return 0;
}
return -ErrorCodes.ENOENT();
}

@Override
public int read(final String path, final ByteBuffer buffer, final long size, final long offset, final FileInfoWrapper info)
{
// Compute substring that we are being asked to read
final String s = contents.substring((int) offset,
(int) Math.max(offset, Math.min(contents.length() - offset, offset + size)));
buffer.put(s.getBytes());
return s.getBytes().length;
}

@Override
public int readdir(final String path, final DirectoryFiller filler)
{
filler.add(filename);
return 0;
}
}

这是环境文件内容:

    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
JAVA_HOME="/usr/lib/jvm/java-6-openjdk-i386"

这是 fuse-jna 类路径

我添加了/main 文件夹

============================================= =========

@Viktor K. 感谢您的帮助,

通过下载 com.sun.jna » jna 到 referece 库修复上述错误

但现在它向我显示了新的错误

Dec 28, 2013 1:18:25 PM HelloFS getName
INFO: Method succeeded. Result: null
Dec 28, 2013 1:18:25 PM HelloFS getOptions
INFO: Method succeeded. Result: null
Exception in thread "main" java.lang.NoSuchMethodError: com.sun.jna.Platform.getOSType()I
at net.fusejna.Platform.init(Platform.java:39)
at net.fusejna.Platform.fuse(Platform.java:26)
at net.fusejna.FuseJna.init(FuseJna.java:113)
at net.fusejna.FuseJna.mount(FuseJna.java:172)
at net.fusejna.FuseFilesystem.mount(FuseFilesystem.java:545)
at net.fusejna.FuseFilesystem.mount(FuseFilesystem.java:550)
at HelloFS.main(HelloFS.java:22)

============================================= ========

嗯嗯

我认为我下载的那个不兼容,

在 fuse-jna 的临时文件夹中

/home/syed/Downloads/fuse-jna-master/build/tmp/expandedArchives/jna-3.5.2.jar_r4n26u14up0smlb84ivcvfnke/

有 jna3.5.2 类,我将它导入到 librarray,现在它工作正常。

我的问题解决了。非常感谢。

最佳答案

问题不在 Fuse-JNA 库中。 Fuse-JNA 库显然依赖于 jna 库(可以在公共(public) maven 存储库中找到 http://mvnrepository.com/artifact/com.sun.jna/jna )。您需要将此库添加为项目中的依赖项。您可以看到在您项目的引用库中没有可用的 com.sun.jna 包。

一般来说——如果你想使用包 A(在你的例子中是 Fuse-JNA)并且包 A 依赖于包 B(在你的例子中是 JNA),你必须自己添加 JNA 包作为项目的依赖项。一般来说,很难找出你想要使用的包的所有必需依赖项 - 因此许多项目都在使用 maven(或任何替代方案,如 gradle)。如果您想了解更多信息,请查看:Why maven? What are the benefits? .我强烈建议使用依赖项解析工具(如 maven),而不是手动解析依赖项。

另一种方法是下载一个包含所有依赖项的 fuse jar - 如果您认为它是您唯一需要的库。但是,如果您稍后添加其他依赖项,则添加带有依赖项的 jar 可能会导致大灾难。这可能会导致依赖冲突,很难发现问题。

关于java.lang.NoClassDefFoundError(Java、Eclipse、Fuse-JNA、Ubuntu),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20819024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com