【问题标题】:The conventional location for storing my Java libraries and applications in UNIX based systems在基于 UNIX 的系统中存储我的 Java 库和应用程序的常规位置
【发布时间】:2023-03-07 16:54:02
【问题描述】:

我通常将我从 Web 下载的 Java 应用程序和 JAR 文件存储在我的计算机(OS X 机器)上的 ~/Java 文件夹中。自从我还是 Windows 用户以来,我就一直在这样做。但是我认为在基于 UNIX 的系统中,用户本地应用程序通常存储在另一个目录中。我感觉这个目录应该是/usr/local//usr/local/USERNAME/opt/local/opt/local/USERNAME,但我不确定。我可以为此目的使用哪个目录?

请注意,我说的是我从 Web 下载、解压并在本地使用的存档文件,而不是具有安装脚本或 MacPorts 等的程序。

【问题讨论】:

  • 将它们存储在 /home/USERNAME/.maybeEvenAHiddenFolder 中。 "/usr/" btw 与 "user" 无关,但实际上是 unix 系统资源的缩写。
  • 1. OS X 是 unix 2。除非您希望为系统中的所有用户安装这些,否则将它们放在您的主目录中没有任何问题..
  • @xenoterracide:我知道!而且我已经使用 ~/Java 多年了,没有任何问题!我的问题是关于约定的。

标签: java linux macos unix


【解决方案1】:

辅助答案是您根本不应该手动下载 jar,而应该使用 GradleIvyMaven 或类似的工具来为您管理 jar。这些工具将您的依赖项的简单规范作为输入,然后查找、下载、存储和提供所有必要的 jar 文件。这需要一点时间来适应,但是一旦你开始使用它就会非常棒。

不过,直接的答案是,在正统的 unix 上,这些文件属于 /usr/local/shareusr 因为它们是不属于基本操作系统的只读数据,local 因为它们不是由操作系统提供的(它拥有/usr 的其余部分),share 因为jar 文件与体系结构无关。

请注意,在 FreeBSD 上,“ports”包管理系统将文件放在/usr/local 中,但我相信它与本地管理员共享。没有其他地方可以存放纯本地文件。

如果系统对包管理的 jar 的去向有约定,则将其复制到 /usr/local 下。例如,在 Ubuntu 上,有/usr/share/java,所以你应该使用/usr/local/share/java

此外,如果系统有处理版本的约定,请复制该约定。同样,在 Ubuntu 上,jar 都存储在一个目录中,名称中带有版本号,但带有指向默认/最新版本的无版本符号链接。所以,我在/usr/share/java/xstream-1.3.1.jar 有一个文件,在/usr/share/java/xstream.jar 有一个符号链接指向它。我会在 /usr/local/share/java 中使用相同的方法。

现在,这是正统的 unix。你在 OS X 上,它不是正统的 unix。尽管如此,这些原则仍然适用:找到系统如何存储它提供的 jar,并将其转置到用户管理的文件系统空间中。

【讨论】:

    【解决方案2】:

    没有任何幸运的方法可以做到这一点。但是,您可能会遇到一个 jar 的多个版本,然后它就会从那里走下坡路。

    我通常会下载我需要的 jar 作为分发包,并将其解压缩到自己的文件夹中,然后将这些 jar 添加到我在 IDE 中需要它们的项目中。对于库,一种常见的方法是使用 Maven 及其依赖处理。

    所以,我的建议是保持你目前的做法,如果你喜欢的话,但将每个项目放在自己的文件夹中,比如

    ~/Java/jakarta-commons-net-1.1.8/commons-net.jar
    

    【讨论】:

    • @Thorbjørn:我知道 JAR 冲突等,目前我正在像您的示例一样组织它们。但是,我只是在询问公约。不过这里似乎没有约定... :)
    • 我们仍然使用 CVS,并且我们已经养成了使用库的习惯,每个库都被放入自己的 Eclipse 项目中,并定义了源代码和 javadoc,并且这些库也被检入到 CVS 中。这允许我们使用 Import -> ProjectSet 来获得一个完全填充的工作区,而无需 maven 并且完全在内部。
    【解决方案3】:

    Apple 有一个 note 将 /Library/Java/Extensions 作为共享 jar 的目录,将 ~/Library/Java/Extensions 作为 jar 的目录供您自己使用。这些路径位于类路径中。

    只要该目录在您的类路径上,jar 就可以在任何地方。 (我使用一个版本 我使用的是 Thorbjørn Ravn Andersen 的风格 ~/Library/Jar/jakarta-commons-net-1.1.8/commons-net.jar)

    查看 Tom Anderson 的回答,了解使用 ivy 等更好的方法

    【讨论】:

      【解决方案4】:

      您可能希望阅读Filesystem Hierarchy Standard /opt 或 /usr/local 可能是合适的,但您应该先阅读那里的 FHS 定义。

      【讨论】:

      【解决方案5】:

      在 FreeBSD 系统上,位置是 ${LOCALBASE}/share/java -- 及其子目录。并不是所有的软件端口都尊重它,但他们应该这样做。

      LOCALBASE 通常是 /usr/local -- 除非被系统管理员覆盖。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-26
        • 1970-01-01
        • 1970-01-01
        • 2020-05-12
        • 1970-01-01
        • 1970-01-01
        • 2023-03-15
        相关资源
        最近更新 更多