问题包括包含清单的jar文件外的jar文件

时间:2010-06-04 17:08:18

标签: java plugins classpath

基本上让我先解释一下我的目标。我有一个用JAVA编写的动态ETL转换器应用程序。由于此应用程序的动态特性,我必须能够在应用程序jar文件之外的位置将插件jar添加到应用程序。 基本上希望有以下目录结构:

AppFolder
| - 插件/
| - configs /
| - mainApp.jar

如果可能,我希望能够在清单中使用通配符来动态添加位于plugins文件夹中的jar。 不幸的是,到目前为止我所尝试的都失败了。我试图使用相对路径和绝对路径都没有工作(有或没有通配符)。 但是,如果我在主应用程序的jar文件中包含plugins文件夹,那么它可以正常工作,因为我不使用通配符。

所以我的问题是,它实际上是否可能在jar之外有依赖关系,或者它们总是必须包含在其中。 另一个问题是关于通配符的使用。不幸的是,我看过[java文档](http://java.sun.com/javase/6/docs/technotes/tools/windows/classpath.html)并不占优势。

到目前为止我尝试过的一些例子:

  • ../插件/ *
  • ../插件/ plugin.jar
  • / abolute /路径/到/插件/ *
  • /abolute/path/to/plugins/plugin.jar

并且不幸的是他们都没有完成这个技巧所以任何帮助都会非常感激......

2 个答案:

答案 0 :(得分:3)

是的,您可以在jar之外拥有依赖项。但是,指定依赖的jar不支持通配符。

需要在清单中明确指定jar,并且位置需要相对于运行应用程序的位置

更好的选择可能是使用Extension Mechanism

java -Djava.ext.dirs=/abolute/path/to/plugins/ ......

答案 1 :(得分:0)

如果您可以控制代码,则可以随时添加JarClassLoader并动态加载jar http://java.sun.com/docs/books/tutorial/deployment/jar/jarclassloader.html