在Linux上放置.jar文件的位置在哪里?

5

我有一个为Python服务定制的库,它是在systemd下运行的(因此适用于所有用户并在启动时启动)。该服务使用我的自定义构建的.jar文件。

我应该把这个库复制到哪里呢?

我认为/usr/share/java/是正确的文件夹。这是正确的吗?


1
你的Python服务希望在哪里/如何找到它? - John Bollinger
3
简而言之:http://refspecs.linuxfoundation.org/fhs(/opt的子目录可能是您所需的内容)。 提示:/opt目录的子目录可能是您需要的内容。此网址提供有关Linux文件系统层次结构的规范信息。 - kai
你的Python服务希望在哪里/如何找到它?这不应该是Linux服务器内部的方式。最好遵循标准,就像@kai提到的那样。 - Victor
1个回答

7
如果您正在尝试遵循良好的实践,但此jar文件未随应用程序一起提供,则按照文件系统层次结构标准是正确的。但有一些次要问题需要考虑。
1)您的服务是否通过发行版的标准打包系统安装?
2)此jar文件是否是您的服务的组件,并且仅适用于您的服务?
这将指导您说出像“它是共享的,所以应该放在这里”之类的话。如果您的服务未使用标准打包系统,则通常会使用/opt目录的子树,包括/opt/your_app/lib,但这只对您的应用程序也遵循相同结构时才有帮助,否则只是污染。
如果您使用的是打包系统,则/usr/share/java/或/usr/lib(如果从/usr/bin或/usr/sbin调用您的应用程序)是一个好选择。另一个很好的选择是/usr/local中,在这种情况下,只有当此应用程序是特定于主机的时才可以这样做。
简单来说,如果您手动安装应用程序而不使用.deb之类的东西,请在/opt内使用应用程序结构,否则您需要评估此库的特性,共享或非共享,是否特定于您的主机。
/usr/share/java/是Java应用程序的常见选择,但有时被误用。
无论如何,不应该有理由使用/opt或/usr之外的子树。
考虑到所有这些,我几乎可以确定您正在寻找/opt/your_app/lib,猜测您正在打包并自己安装应用程序,并猜测此jar仅对您的应用程序有用。

1
完美!也许为了背景:Java有点问题,因为它在某种程度上是可执行的,但仔细看只是虚拟机使用的共享静态数据。由于后一种原因,Java资源通常被放置在/usr/shared中。这是有争议的,也是一个持续的讨论。此外,Linux内核可以配置为像本地代码一样加载Java,并且运行时是加载程序。随着越来越多的倾向于解释性代码,问题就出现了,是否应该将这样的代码视为可执行/库,就像其他任何数据一样。但这有它的问题,截至今天,共同点是将其视为数据。 - kai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接