如果Linux发行版没有安装LibVLC';你不能从运行的Java程序中获得它吗?

如果Linux发行版没有安装LibVLC';你不能从运行的Java程序中获得它吗?,java,linux,apt-get,libvlc,Java,Linux,Apt Get,Libvlc,我正在做一个利用 这对Windows和Mac来说很好,因为我可以将VLC库打包到一个zip文件中,并在适当的地方将它们输出到用户机器 当我需要为Linux做这件事时,问题就来了,因为,亲爱的上帝 有十一个。单独汇编。应用程序/库 有些甚至有自己的口味。这就像操作系统的巴斯金罗宾斯(我知道有一些,但我只真正运行过Ubuntu,所以我没有准备好) 如果我是一个受虐狂,我完全可以做到这一点,并最终得到一个巨大的罐子,里面有大量荒谬的压缩Linux库,但我真的不想这么做 因此,我认为最好的做法是检查L

我正在做一个利用

这对Windows和Mac来说很好,因为我可以将VLC库打包到一个zip文件中,并在适当的地方将它们输出到用户机器

当我需要为Linux做这件事时,问题就来了,因为,亲爱的上帝

有十一个。单独汇编。应用程序/库

有些甚至有自己的口味。这就像操作系统的巴斯金罗宾斯(我知道有一些,但我只真正运行过Ubuntu,所以我没有准备好)

如果我是一个受虐狂,我完全可以做到这一点,并最终得到一个巨大的罐子,里面有大量荒谬的压缩Linux库,但我真的不想这么做

因此,我认为最好的做法是检查LibVLC是否已安装,如果已安装,则直接引用它,如果未安装,则在运行时安装(在库尝试加载自身之前),或者,见鬼,甚至在Java程序的启动/安装时安装

这可能吗?我知道在Ubuntu上使用终端会有类似于

sudo apt-get install vlc

可能有15种不同的风格,这很好,我可以处理,但是否可以在运行的Java应用程序中这样做(并等待它完成后再继续),如果可以,我如何做,如果不能,我有多忙?

要检测是否已经安装了LibVLC,只需使用Java文件IO搜索文件系统,就可以在纯Java中实现这一点。想法是在“/usr/lib”和/或其他“知名”位置查找“libvlc.so.*”

vlcj提供了一个
NativeDiscovery
类,该类将为您执行以下操作:

boolean foundLibVLC = new NativeDiscovery().discover();
你可以找到Javadoc

然后,您可以弹出一个对话框,提示用户使用包管理器安装vlc

或者,您可以通过使用Java文件IO读取“/etc/issue”来检测操作系统,如果是Ubuntu,您可以启动一个进程来运行“apt get install”,或者为不同的发行版启动不同的包管理器。我以前做过这种事

在不同的发行版中根本没有通用的包管理器

我知道这并不理想,但这是我为我的项目所做的

平心而论,如果你的目标用户是Linux上的用户,那么你的目标用户可能比大多数人都更精通技术,而且他们在安装其他软件时可能不会遇到任何问题

我认为另一个选择是将VLC源代码与项目一起提供,并让安装程序构建VLC。但是从头开始构建VLC需要一段时间,而且必须首先安装许多第三方库依赖项


我想在Linux上,正确的做法是创建一个发行版包(比如.deb或.rpm之类),声明对VLC、Java和JNA的依赖,然后这样做。

我想这篇文章就是你想要的:我看到了一些类似的。然后我的下一个问题是如何确定当前的Linux版本是否安装了VLC?我必须处理抛出的异常吗?看起来你不希望自动安装程序处理这种事情。您真的需要支持所有linuxes发行版吗?如果安装了软件包,请搜索apt缓存:
apt缓存搜索vlc
@JoshuaD我没有,抱歉。我很久以前就不再尝试用Linux做任何事情了。希望你能找到一个解决方案。这似乎是合理的。VLC在Linux中是否总是放在同一个目录中,或者是否有一种方法(例如通过NativeDiscovery方法)来查找它所在的目录?如果您使用NativeDiscovery,我不确定您为什么还需要知道实际的目录。无论如何,自己搜索“/usr/lib”或“/usr/local/lib”都不太困难。