【问题标题】:How to use regular expression in java manifest classpath?如何在 java manifest 类路径中使用正则表达式?
【发布时间】:2011-01-21 08:21:14
【问题描述】:

我需要在程序执行期间使用额外的 jars。我手动将 jar 添加到相对的 ./lib 文件夹中,然后执行程序。我应该如何在清单文件中定义类路径?

【问题讨论】:

  • 我找到了解决方案!我将包括以下变量:类路径:lib/externaljar1.jar lib/externaljar2.jar 等最多 5 或 10 个值。然后在运行时包含 jars 时,只需将其重命名为 externaljar1、externaljar2 等并将其复制到 lib 文件夹。 ;-)
  • 感谢所有回复我问题的人。非常感谢!

标签: java classpath manifest


【解决方案1】:

您不能在清单的 Class-Path 属性中使用正则表达式或其他通配符。

Java 中只有一个受支持的通配符,并且只有在“手动”java 调用(即不使用 -jar)的命令行中指定时才有效:using directoryname/*

【讨论】:

  • 除了使用-cp命令或者classloader函数还有其他方法吗?
  • @Suraj:询问其他方法而不告诉我们为什么这些方法对你没有好处......相当没有意义。就个人而言,我也觉得这很粗鲁。
  • 对不起!实际上,我正在为用户友好的方法编写代码并将其部署在可执行 jar 中。它是有一个通用数据库,用户可以在其中选择他的数据库。因此,他需要指定所需的连接 jar 并将其放入程序可访问的文件夹中。我想我是否可以在清单类路径中使用正则表达式,如 lib/* 或 lib/*.jar 以便在程序执行时找到所有 jar。
  • 如果您只需要从该 jar 加载选定的类(例如 JDBC 驱动程序),那么您可以通过单独的 URLClassLoader 轻松加载它。为此,您不需要在“主”类路径中使用它。
  • 要明确 - 清单的 Class-Path 属性支持“支持一个通配符”,仅在命令行上的 -cp 选项中支持。
【解决方案2】:

我不太确定您到底想要什么,但您可以在运行时添加 jar:

  • 在包含 jar 的目录中使用 File.list() 列出 (jar) 文件
  • 对您检索的文件名执行正则表达式
  • 使用 URLClassLoader 加载 jar

我不知道如何将 URLClassLoaders 注册(如有必要)到主类加载器。但这就是我想我会去的方式。

【讨论】:

  • 你不能修改规范中的引导类加载器(有一些丑陋的黑客可以做到这一点,使用addURL())。符合规范的解决方案是将 boostrapping 类放入它自己的 jar 中,使用它来查找所有其他 jar(包括“真正的”主 jar)并将所有这些加载到一个类加载器中。然后从真正的主类调用真正的主方法。
猜你喜欢
  • 2014-05-09
  • 2014-08-23
  • 2012-12-22
  • 2019-05-12
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 1970-01-01
相关资源
最近更新 更多