openSUSE:Java jpackage-utils

跳转到:导航搜索
项目 jpackage.org 提供了常用规则、rpm 宏 和脚本的集合,这些对于软件包维护者来说非常有用(不仅仅是他们)。

build-classpath

build-classpath - 一个小型工具,用于使用指定的 JAR 文件构建 Java CLASSPATH。CLASSPATH 将返回到标准输出。此脚本应在 spec 文件的 %pre%build 部分,或在 pre/post un/install 脚本中,或在包装脚本中使用。

常见的用法形式是

设置 CLASSPATH

$ build-classpath ant
/usr/share/java/ant.jar
$ export CLASSPATH=$(build-classpath ant servletapi5)
$ echo ${CLASSPATH}
/usr/share/java/ant.jar:/usr/share/java/servletapi5.jar

如果 jar 文件位于 %{_javadir} 的子目录中,您需要编写

$ build-classpath asm/asm
/usr/share/java/asm/asm.jar

如果您需要子目录中的所有类,您应该简单地编写

$ build-classpath asm/
/usr/share/java/asm/asm-1.5.3.jar:/usr/share/java/asm/asm-analysis-1.5.3.jar:
/usr/share/java/asm/asm-attrs-1.5.3.jar:/usr/share/java/asm/asm-tree-1.5.3.jar:
/usr/share/java/asm/asm-util-1.5.3.jar:/usr/share/java/asm/asm-xml-1.5.3.jar:
/usr/share/java/asm/kasm-1.5.3.jar

请注意,如果参数中存在拼写错误,build-classpath 将返回相同的结果,因此 build-classpath asm/foo 的输出与上面的示例相同!

也可以使用 build-classpath 创建符号链接,如果程序期望 JAR 文件位于某些外部目录中。

$ ln -s $(build-classpath ant)
$ readlink ant.jar
/usr/share/java/ant.jar
$ ln -s $(build-classpath ant) libs/expected_jar_name-1.0.9.jar
$ readlink libs/expected_jar_name-1.0.9.jar
/usr/share/java/ant.jar

build-classpath 返回多个路径时,build-classpathln 的组合可能会产生错误的符号链接。

build-classpath-directory

一个从目录构建 classpath 的小型脚本。此脚本查找指定目录中的所有 jar 文件并生成一个 CLASSPATH。

build-classpath-directory /usr/share/java
/usr/share/java/libgcj-4.3.jar:/usr/share/java/libgcj-tools-4.3.jar:
/usr/share/java/ecj-3.3.jar:/usr/share/java/ecj.jar:
/usr/share/java/tomcat6-servlet-2.5-api-6.0.16.jar:
/usr/share/java/tomcat6-servlet-2.5-api.jar
[snip]

build-jar-repository

通过复制文件或创建符号链接,在指定的目录中构建一个 JAR 存储库。此脚本是比 build-classpathln(或 cp)的组合更好的解决方案,用于生成符号链接(或 JAR 文件的副本)。

如果未指定任何选项,默认操作将是创建符号链接。在其他情况下,脚本具有以下参数

  • -c, --copy 复制文件而不是链接
  • -h, --hard 创建硬链接
  • -p, --preserve-naming 保留原始 JAR 文件的名称
  • -s, --soft, --symbolic 创建符号链接(默认)

常见的用法很简单

$ mkdir libs
$ build-jar-repository libs ant asm/asm

build-jar-repository 不会像 build-classpath 那样生成符号链接,而会在文件名中添加方括号。

$ ls libs [ant].jar [asm][asm].jar 

方括号的目的是识别脚本创建的符号链接,并且可以重新运行脚本以将它们链接到新位置。应该通过 -p, --preserve-naming 参数抑制此行为。

$ build-jar-repository -p libs ant asm/asm ant.jar asm_asm.jar 

在这种情况下,斜杠符号被下划线替换,默认操作更改为复制,因此如果您想要 JAR 文件的符号链接,您需要添加 -s 参数。