Eclipse 插件包指南

出自 ArchWiki
Arch 软件包指南

32 位CLRCMakeCrossDKMSEclipseElectron字体Free PascalGNOMEGoHaskellJavaKDE内核模块LispMesonMinGWNode.js非自由软件OCamlPerlPHPPythonRRubyRust - 安全ShellVCSWebWine

安装可用的 Eclipse 插件有很多方法,特别是自从 Eclipse 3.4 引入了 dropins 目录以来,但其中一些方法很混乱,拥有标准化和一致的打包方式对于保持系统结构的整洁非常重要。然而,如果打包者不了解 Eclipse 插件如何工作的每一个细节,就很难实现这一点。本页面旨在为 Eclipse 插件 PKGBUILD 定义一个标准而简单的结构,以便文件系统结构可以在所有插件之间保持一致,而无需打包者为每个新软件包重新开始。

Eclipse 插件结构和安装

典型的 Eclipse 插件包含两个目录,features 和 plugins,并且自从 Eclipse 3.3 以来,它们只能放在 /usr/lib/eclipse/ 目录下。这两个目录的内容可能与其他插件的内容混合在一起,这造成了混乱,并使结构难以管理。也很难一眼看出哪个软件包包含哪个文件。

Eclipse 3.4 仍然支持这种安装方法,但现在首选的方法是使用 /usr/lib/eclipse/dropins/ 目录。在这个目录下可以存在无限数量的子目录,每个子目录都包含自己的 features 和 plugins 子目录。这允许保持整洁和干净的结构,并且应该是标准的打包方式。

打包

PKGBUILD 示例

这是一个示例,我们将在下面详细介绍如何自定义它。

PKGBUILD-eclipse.proto
pkgname=eclipse-mylyn
pkgver=3.0.3
pkgrel=1
pkgdesc="A task-focused interface for Eclipse"
arch=('any')
url="https://eclipse.org/mylyn/"
license=('EPL')
depends=('eclipse')
optdepends=('bugzilla: ticketing support')
source=(https://download.eclipse.org/tools/mylyn/update/mylyn-${pkgver}-e3.4.zip)
sha512sums=('aa6289046df4c254567010b30706cc9cb0a1355e9634adcb2052127030d2640f399caf20fce10e8b4fab5885da29057ab9117af42472bcc1645dcf9881f84236')

prepare() {
  # remove features and plug-ins containing sources
  rm -f features/*.source_*
  rm -f plugins/*.source_*
  # remove gz files
  rm -f plugins/*.pack.gz
}

package() {
  _dest="${pkgdir}/usr/lib/eclipse/dropins/${pkgname/eclipse-}/eclipse"

  # Features
  find features -type f | while read -r _feature ; do
    if [[ "${_feature}" =~ (.*\.jar$) ]] ; then
      install -dm755 "${_dest}/${_feature%*.jar}"
      cd "${_dest}/${_feature/.jar}"
      # extract features (otherwise they are not visible in about dialog)
      jar xf "${srcdir}/${_feature}" || return 1
    else
      install -Dm644 "${_feature}" "${_dest}/${_feature}"
    fi
  done

  # Plugins
  find plugins -type f | while read -r _plugin ; do
    install -Dm644 "${_plugin}" "${_dest}/${_plugin}"
  done
}

如何自定义构建

主要需要自定义的变量是 pkgname。如果您正在打包一个典型的插件,那么这是您唯一需要做的事情:大多数插件都以 zip 文件的形式分发,其中仅包含 features 和 plugins 这两个子目录。因此,如果您正在打包 foo 插件,并且源文件仅包含 features 和 plugins,您只需将 pkgname 更改为 eclipse-foo 即可。

继续阅读以了解 PKGBUILD 的内部结构,这将有助于理解如何为所有其他情况设置构建。

PKGBUILD 深入审查

包命名

软件包应命名为 eclipse-插件名称,以便它们可以被识别为与 Eclipse 相关的软件包,并且可以使用简单的 shell 替换(如 ${pkgname/eclipse-})轻松提取插件名称,而无需使用不必要的 ${_realname} 变量。插件名称对于在安装期间整理所有内容并避免冲突是必要的。

文件

提取

一些插件需要从 jar 文件中提取 features。已经包含在 JRE 中的 jar 实用程序用于执行此操作。但是,jar 无法提取到当前目录以外的目录:这意味着,在每次创建目录之后,都需要 cd 进入该目录才能进行提取。${_dest} 变量在此上下文中用于提高可读性和 PKGBUILD 的整洁性。

位置

正如我们所说,源存档提供了 features 和 plugins 两个目录,每个目录都打包了 jar 文件。首选的 dropins 结构应如下所示

/usr/lib/eclipse/dropins/pluginname/eclipse/features/feature1/...
/usr/lib/eclipse/dropins/pluginname/eclipse/features/feature2/...
/usr/lib/eclipse/dropins/pluginname/eclipse/plugins/plugin1.jar
/usr/lib/eclipse/dropins/pluginname/eclipse/plugins/plugin2.jar

这种结构允许混合不同版本的库,这些库可能被不同的插件需要,同时清楚地了解哪个软件包拥有什么。它还可以避免在不同软件包提供相同的库时发生冲突。唯一的替代方案是将每个软件包与其库分开,这需要额外的麻烦,并且甚至不能保证工作,因为软件包可能需要旧版本的库。Features 必须解压,因为 Eclipse 否则无法检测到它们,并且整个插件安装将无法工作。发生这种情况是因为 Eclipse 对待更新站点和本地安装的方式不同(不要问为什么,它就是这样)。

build() 函数

首先要注意的是 cd ${srcdir} 命令。通常,源存档将 features 和 plugins 文件夹直接提取到 ${srcdir} 下,但情况并非总是如此。无论如何,对于大多数非(事实上的)标准插件,这是唯一需要更改的行。

一些发布的 features 也包含它们的源代码。对于正常的发布版本,这些源代码是不需要的,可以删除。此外,相同的 features 还包括 *.pack.gz 文件,与 jar 存档相比,这些文件包含相同的文件。因此,这些文件也可以删除。

接下来是 features 部分。它为每个 jar 文件创建一个必要的目录,并将 jar 提取到相应的目录中。同样,plugins 部分将 jar 文件安装到它们的目录中。使用 while 循环是为了防止出现命名奇怪的文件。

故障排除

  • 有时清理 Eclipse 有助于修复一些问题
    $ eclipse -clean
  • 如果新安装的插件没有出现在 Eclipse 中,请尝试使用干净的 ~/.eclipse 目录,例如通过重命名现有目录。请注意,这将导致通过 Marketplace 用户安装的所有插件都不可用。