- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在开发一个利用 Caprica's VLCJ Bindings 的程序.
这对 Windows 和 Mac 来说很好,因为我可以将它们的 VLC 库打包到一个 zip 文件中,并在适当的地方将它们输出到用户机器。
当我需要为 Linux 执行此操作时,问题就来了,因为,亲爱的上帝,
有十一个。单独编译。应用程序/库。
其中一些甚至有自己的口味。它就像操作系统的 Baskin Robins(我知道有一些,但我只真正运行过 Ubuntu,所以我没有为此做好准备)。
如果我是一个受虐狂,我完全可以完成这项工作并最终得到一个巨大的 jar,其中包含数量多得离谱的压缩 Linux 库,但我真的,嘿嘿嘿,不想那样做。
所以我认为最好的做法是检查是否安装了 LibVLC,如果安装了,直接引用它,如果没有,则在运行时安装(在库尝试安装之前)加载自身),或者甚至在 Java 程序的启动/安装时加载。
这可能吗?我知道在使用终端的 Ubuntu 上它类似于
sudo apt-get install vlc
可能有 15 种不同的风格,这很好,我可以处理,但是是否可以从正在运行的 Java 应用程序中执行此操作(并等到它完成后再继续),如果可以,我该怎么做才能做到这一点,如果做不到,我的状况如何?
最佳答案
要检测 LibVLC 是否已经安装,可以在纯 Java 中通过使用 Java 文件 IO 搜索文件系统来完成。这个想法是你会在“/usr/lib”和/或其他“知名”位置寻找“libvlc.so.*”。
vlcj 提供了一个 NativeDiscovery
类,它会为您做这件事:
boolean foundLibVLC = new NativeDiscovery().discover();
您可以找到 Javadoc here .
然后您可以抛出一个对话框,提示用户使用他们的包管理器安装 vlc。
或者您可以通过使用 Java 文件 IO 读取“/etc/issue”来检测操作系统,如果它是 Ubuntu,您可以启动一个进程来运行“apt-get install”,或者为不同的发行版使用不同的包管理器.我用过 Apache Commons-Exec以前做过这种事。
根本没有您可以跨不同发行版使用的通用包管理器。
我知道这并不理想,但这就是我为我的项目所做的。
公平地说,如果您的目标用户是 Linux 用户,那么您可能会比大多数用户更精通技术,而且他们在安装其他软件时可能没有问题。
我想还有一个选择是将 VLC 源代码与您的项目一起发送,并让您的安装程序构建 VLC。不过,从头开始构建 VLC 需要一段时间,并且必须首先安装许多第三方库依赖项。
我想在 Linux 上,“正确”的做法是创建一个发行版包(比如 .deb 或 .rpm 或其他东西),声明对 VLC、Java 和 JNA 的依赖,然后按照这种方式进行。
关于java - 如果正在运行的 Java 程序中没有安装 LibVLC,我该如何告诉 Linux Distro 进行 apt-get install LibVLC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26129264/
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我需要测试 includes this line 的功能: if $translate-nl && $*DISTRO.is-win 我试图重新分配一个值给 $*DISTRO, $*DISTRO='Wi
我正尝试按照此处的步骤安装 MinGW 发行版:http://nuwen.net/mingw.html#install 但是,当我尝试运行时:gcc --version 在我的命令行中,我得到以下信息
Closed. This question is off-topic。它当前不接受答案。
我是新来开放 flex 搜索发行版并尝试在Kubernetes集群上运行它的。部署集群后,我需要更改admin用户的密码。 我看了这篇文章-default-password-reset 我知道,要更改
我可以使用基本身份验证(使用内部用户数据库)运行开放发行版,现在我需要使用JWT token 对Kibana仪表板进行身份验证。 Elasticsearch配置: basic_interna
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
我需要将几百个 AD 发行组移动到一个新的 OU。我只得到了他们的电子邮件地址,并想制作一个脚本来根据 samaccountname 移动它们。我想知道为什么以下内容不返回任何内容,如果我对电子邮件地
我正在构建一个 .a来自 C++ 代码。它仅取决于标准库( libc++/libstdc++ )。从一般阅读来看,二进制文件的可移植性似乎取决于 编译器版本(因为它会影响 ABI)。对于 gcc ,A
从 java 中,我得到了我正在工作的操作系统的名称。看下面的代码: System.out.println(System.getProperty("os.name")); 在 windows xp 中
大多数 Linux 发行版通常默认包含 C++ Boost 库吗? 最佳答案 许多发行版在其官方存储库中包含 boost,但在标准安装中默认不提供(换句话说,默认情况下不安装,但安装相对容易)。 另一
一些包冲突,所以不可能一次安装所有可用的包。给定系统的可安装软件包的最大可能数量是多少?一种蛮力试错法是: 列出所有可能的包名称,即 dglob -a > list 由此,为每个可能的包创建子列表sl
我正在使用 elastic search open distro。这是我的触发条件: for (int i = 0; i 5) { resMessate.add(item.key);
我是 docker 的新手,我想在这里解释一下假设我在上面安装了 Windows Machine 和 docker 桌面。 首先运行 Some Linux Distro Container 并在该容器
我有一个 Debian 发行版,可以为信息亭启动并执行单个应用程序。文件系统当前为 1.5 GB,其中大部分未使用。是否有一种方法可以分析启动过程并查找启动和执行期间使用了哪些库?然后我可以卸载未使用
我是一名计算机科学工程专业的学生,我已经在 .NET Framework 上编程了 2-3 年,但我没有使用过 Linux。我认为,对于我的最后一年项目,Linux 发行版会很好。 我正在考虑几种
我想开始一个个人项目,我想让它跨平台。我所有的 Linux 工作都是为商业客户完成的,所以目标发行版是提前指定的,但这是不同的。 该项目将开源并使用Qt。这是我想知道的: 如果我在一个发行版上进行开发
Yocto 的新功能。尝试为 Xilinx Zynq 构建镜像。按照 https://github.com/Xilinx/meta-petalinux 上的说明进行操作.不需要那里的所有东西,所以删除
我的 Beam/Dataflow 管道涉及一些使用 Linux CLI 工具(特别是 osmium-tool 版本 >= 1.9.1)的数据处理,该工具仅适用于一些较新的 Ubuntu 发行版(cos
这段代码: #include #include using namespace std; int main() { cout _file) c:/mingw/include/stdio.h:#
我是一名优秀的程序员,十分优秀!